如何在 AWS 上跑 GPU Tensorflow
11/30/2017
这篇文章整理自 Udacity Deep Learning Nanodegree Foundation (opens in a new tab) 教程的第六课 Cloud Computing。最终创建的 instance 使用的是 Udacity 的 AMI,安装有许多现成的依赖包。最主要的是,可以立即运行 GPU-tensorflow,无需设置 GPU 驱动。
第一步 创建 AWS 账户(5 分钟)
略
第二部 取得 GPU Instance 权限(5 分钟)
估计是为了防止误操作导致用户账单爆表,AWS 的高级 instance 是不能随意 launch 的,GPU instance 就是如此。
首先点击这个链接 (opens in a new tab)查看当前的 instance limit。这里要特别注意,不同区域的 limit 是不一样的,区域可以在右上角切换,一般北美的机器相对便宜。以 p2.xlarge
为例,limit 一般都是 0
:
{% img /images/2017-11-30-run-tensorflow-on-aws/p2-large-limit-request.png %}
申请权限的步骤是:
- 在 "EC2 Service Limits" 页面,点击需要的 instance 类型(比如 "p2.xlarge")边上的 "Request limit increase"。这个操作没有任何费用。
- 填写所有的问题:
- "Region"
- "New limit value" 一般是 1,毕竟 GPU instance 也不能串联起来跑,一个就够了。
- "Use Case Description" 可以填写 "Udacity—Nanodegree program"
- 如果之前从来没有运行过任何 AWS instance,Amazon 可能会邮件要求用户创建一个其他的 instance 来“初始化”账户。
- 等待请求通过。一般在 48 小时内完成。
第三步 启动 Instance(15 分钟)
选择 AMI(1 分钟)
- 进入 EC2 Management Console (opens in a new tab)
- 点击 "Launch Instance" {% img /images/2017-11-30-run-tensorflow-on-aws/instance-button.png 150 %}
- 点击 "AWS Marketplace"
- 搜索 "Deep Learning AMI CUDA 8 Ubuntu Version" 并选择这个 AMI
- AMI 全称是 Amazon Machine Image。每个 image 包括了所有环境设置、驱动、依赖。
选择 instance type(1 分钟)
-
GPU compute
-
p2.xlarge(或者其他有权限 launch 的 GPU type) {% img /images/2017-11-30-run-tensorflow-on-aws/instance-type.png 400 %}
-
点击 "Review and Launch"
-
先不要 "Launch Instances"
Security Groups(5 分钟)
为了在 instance 上运行 jupyter notebook,需要开放相应的端口,这是通过 security groups 设置完成的。
-
点击 "Edit security groups"
-
如图设置安全组: {% img /images/2017-11-30-run-tensorflow-on-aws/aws-add-sec-group.png %}
- 选择 "Create a new security group"
- 设置 "Security group name",比如 "Jupyter"
- 点击 "Add Rule"
- 设置 "Custom TCP Rule"
- 把 "Port Range" 设置为 "8888"
- 选择 "Anywhere" 作为 "Source",也就是可以从任意一个 IP 访问在 instance 上运行的 jupyter notebook。
-
点击 "Review and Launch"
Launch(5 分钟)
- 点击 "Launch" 创建 instance
- AWS 会要求制定一对 authentication key。这里可以选择 "Create a new key pair" 并 "Download Key Pair",
.pem
文件会开始自动下载。这个文件以后用来进入 instance,所以要妥善保存。
- AWS 会要求制定一对 authentication key。这里可以选择 "Create a new key pair" 并 "Download Key Pair",
.pem
文件下载完毕之后,点击 "Launch Instances"- 点击 "View Instances" 进入 EC2 Management Console 查看正在启动中的 instance
计费
一旦 instance 启动就开始计费了。费用明细可以查看这个链接 (opens in a new tab)。由于 GPU instance 比较贵,而且 machine learning 一般不需要实时运行,所以不用的时候要及时关掉 instance。
{% img /images/2017-11-30-run-tensorflow-on-aws/stop.png %}
- Stop 相当于关机,硬盘资料不会丢失,开机之后还可以继续用。关机之后会收取少量的存储费用,不过非常便宜。
- Terminate 相当于销毁 instance。一旦销毁,再需要 instance 就必须重建。销毁之后不会有任何费用。
第四部 运行(10 分钟)
登陆(1 分钟)
Instance 启动之后,在 EC2 Management Console 里得到 instance 的 IP 地址(x.x.x.x
),然后使用 ssh 和 pem 文件登陆:
ssh -i <pem file path> ubuntu@x.x.x.x
设置 Jupyter(5 分钟)
这一步可以省略
- 创建 config 文件
jupyter notebook --generate-config
- 设置 jupyter IP,把
#c.NotebookApp.ip = 'localhost'
替换为#c.NotebookApp.ip = '*'
sed -ie "s/#c.NotebookApp.ip = 'localhost'/#c.NotebookApp.ip = '*'/g" ~/.jupyter/jupyter_notebook_config.py
测试(5 分钟)
使用 Udacity aind2-dl 测试 instance 和 jupyter notebook。
这一步也可以省略。
- 运行 repo
git clone https://github.com/udacity/aind2-dl.git
cd aind2-dl
jupyter notebook --ip=0.0.0.0 --no-browser
-
访问 jupyter notebook,点击命令行里显示的 jupyter notebook URL,把其中的
localhost
替换成x.x.x.x
,也就是 instance IP 地址。最终的 URL 类似x.x.x.x:8888/?token=...
,在外部浏览器访问这个 URL,应该出现运行中的 notebook -
运行 "IMDB_in_Keras_Solutions.ipynb",所有 cell 应该都可以正常运行。