在 AWS GPU 上运行 Jupyter Notebook:入门指南

本指南将逐步指导您开始在 AWS GPU 实例上运行深度学习 Jupyter Notebook,同时可以在任何地方的浏览器中编辑 Notebook。如果您在本地机器上没有 GPU,那么这是进行深度学习研究的完美设置。

什么是 Jupyter Notebook?为什么要在 AWS GPU 上运行 Jupyter Notebook?

Jupyter Notebook 是一个 Web 应用程序,允许您以交互方式编写和注释 Python 代码。这是一种进行实验、研究和共享您正在进行的工作的好方法。Notebook 看起来像这样

许多深度学习应用程序的计算量非常大,如果在笔记本电脑的 CPU 内核上运行,则需要数小时甚至数天的时间。在 GPU 上运行可以显著加快训练和推理速度(从现代 CPU 到单个现代 GPU,通常可以提高 5 到 10 倍)。但是,您可能无法在本地机器上访问 GPU。在 AWS 上运行 Jupyter Notebook 可为您提供与在本地机器上运行相同的体验,同时允许您利用 AWS 上的一个或多个 GPU。而且您只需为使用的资源付费,如果您只是偶尔使用深度学习,那么与投资购买自己的 GPU 相比,这可能更划算。

为什么我想在 AWS 上使用 Jupyter 进行深度学习?

AWS GPU 实例的成本可能很快就会变得昂贵。我们建议使用的实例每小时收费 0.90 美元。这对于偶尔使用是可以接受的,但如果您打算每天运行数小时的实验,那么最好构建自己的深度学习机器,配备 Titan X 或 GTX 1080 Ti。

开始之前

注意

  • 您需要一个活动的 AWS 账户。
  • 熟悉 AWS EC2 会有所帮助,但并非强制性要求。

设置过程大约需要 5 到 10 分钟。


分步指南

1 - 导航到EC2 控制面板,然后点击“启动实例”链接。

EC2 control panel

2 - 选择官方的 AWS 深度学习 Ubuntu AMI。

要找到它,请选择“AWS Marketplace”,然后在搜索框中搜索“深度学习”。

EC2 AMI Marketplace

向下滚动,直到找到名为“Deep Learning AMI Ubuntu Version”的 AMI(如下图所示)。选择此 AMI。

Deep learning AMI

3 - 选择 p2.xlarge 实例。

此实例类型提供对单个 GPU 的访问权限,每小时使用费用为 0.90 美元(截至 2017 年 3 月)。点击“配置实例详细信息”。

The p2.xlarge instance

4 - 配置实例详细信息

您可以对“配置实例”、“添加存储”、“添加标签”步骤保留默认配置。但我们将自定义“配置安全组”步骤。

创建一个自定义 TCP 规则以允许端口 8888

可以允许您当前的公网 IP(例如您的笔记本电脑的 IP)或任何 IP(例如 0.0.0.0/0)(如果前者不可行)使用此规则。请注意,如果您确实允许任何 IP 使用端口 8888,那么实际上任何人都能够监听您实例上的该端口(我们将在该端口上运行 IPython Notebook)。我们将为 Notebook 添加密码保护,以降低陌生人修改它们的风险,但这可能是一个非常薄弱的保护措施。如果可能的话,您真的应该考虑将访问权限限制到特定的 IP。但是,如果您的 IP 地址不断变化,那么这不是一个非常实用的选择。如果您要将访问权限开放给任何 IP,请记住不要在实例上留下任何敏感数据。

Configure a new security group

在启动过程结束时,系统会询问您是要创建新的连接密钥还是要重复使用现有密钥。如果您以前从未使用过 EC2,只需创建新密钥并下载即可。

5 - 启动您的实例并连接到它。

要连接到您的实例,请在 EC2 控制面板上选择它,点击“连接”按钮,然后按照提供的说明操作,例如:

Connect instructions

请注意,实例可能需要几分钟才能完全启动。如果您一开始无法连接,请稍等片刻,然后重试。

6 - 设置 SSL 证书

通过 ssh 登录实例后,在实例的根目录下创建一个 ssl 目录并 cd 到该目录(不是强制性的,但更简洁)。

mkdir ssl
cd ssl

使用 OpenSSL 创建新的 SSL 证书

sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout "cert.key" -out "cert.pem" -batch

完成后,您将在当前 ssl 目录中创建两个文件:cert.keycert.pem

6 - 配置 Jupyter

在开始使用 Jupyter 之前,我们需要修改其默认配置。首先,我们需要生成一个新的 Jupyter 配置文件(仍在远程实例上)

jupyter notebook --generate-config

(可选)您可以为您的 Notebook 生成一个 Jupyter 密码。由于您的实例可能配置为可从任何 IP 访问(取决于您在配置安全组时所做的选择),因此最好通过密码限制对 Jupyter 的访问。要生成密码,请打开一个 IPython shell(命令 ipython)并运行

from IPython.lib import passwd
passwd()
exit

passwd() 命令将要求您输入并验证密码,完成后,它将显示您的密码哈希值。复制该哈希值,我们很快就会用到它。它看起来像这样:"sha1:b592a9cf2ec6:b99edb2fd3d0727e336185a0b0eab561aa533a43"(这是“password”的哈希值,您不应该使用该密码)。

接下来,使用 Vi(或您最喜欢的可用文本编辑器)编辑配置文件

vi ~/.jupyter/jupyter_notebook_config.py

这是一个 Python 文件,其中所有行都被注释掉了。

您需要插入以下 Python 代码行(例如,在文件的开头)

c = get_config()  # get the config object
c.NotebookApp.certfile = u'/home/ubuntu/ssl/cert.pem' # path to the certificate we generated
c.NotebookApp.keyfile = u'/home/ubuntu/ssl/cert.key' # path to the certificate key we generated
c.IPKernelApp.pylab = 'inline'  # in-line figure when using Matplotlib
c.NotebookApp.ip = '*'  # serve the notebooks locally
c.NotebookApp.open_browser = False  # do not open a browser window by default when using notebooks
c.NotebookApp.password = 'sha1:b592a9cf2ec6:b99edb2fd3d0727e336185a0b0eab561aa533a43'  # this is the password hash that we generated earlier.

如果您不是 Vi 用户,请记住,您需要按 i 开始插入内容,完成后,可以按 esc,然后按 :wq,最后按 enter 退出 Vi 并保存更改(:wq 代表写入并退出)。

7 - 更新 Keras

您几乎可以开始使用 Jupyter 了。但首先,请确保更新 Keras。尽管 AMI 上预装了一个版本的 Keras,但它可能不是最新的。在远程实例上,运行

.安装 Keras [source,cs]


sudo pip install keras --upgrade

如果您打算使用 Python 3,则还应该使用 pip3 更新 Keras

.更新 Python 3 的 Keras [source,cs]


sudo pip3 install keras --upgrade

如果实例上存在任何现有的 Keras 配置文件(不应该出现这种情况,但自我们编写本指南以来,AMI 可能已更改),则应将其删除,以防万一。Keras 在第一次启动时将重新创建标准配置文件。

如果下面的代码片段返回一个错误,指出该文件不存在,则可以忽略它。

.清理 Keras 配置文件 [source,cs]


rm ~/.keras/keras.json

8 - 设置本地端口转发

本地机器不是远程实例)上的 shell 中,开始将本地端口 443(HTTPS 端口)转发到远程实例的端口 8888。这可以使用以下语法完成

sudo ssh -i awsKeys.pem -L local_port:local_machine:remote_port remote_machine

在我们的例子中,它变成了

sudo ssh -i awsKeys.pem -L 443:127.0.0.1:8888 [email protected]

9 - 从本地浏览器开始使用 Jupyter

首先,在远程实例上,创建用于保存 Notebook 的文件夹

mkdir notebooks
cd notebooks

在远程实例上,通过在您创建的文件夹中运行以下命令来启动 Jupyter Notebook

jupyter notebook

然后,在本地浏览器中,导航到我们正在转发到远程 Notebook 进程的本地地址 https://127.0.0.1。确保在地址中使用 HTTPS,否则会出现 SSL 错误。

您应该会看到一条安全警告

Safety warning

此警告仅仅是因为我们生成的 SSL 证书未经任何受信任的机构验证(显然:我们只是生成了自己的证书)。点击“高级”并继续导航,这是安全的。

然后,系统应该会提示您输入 Jupyter 密码。然后,您将进入 Jupyter 仪表板。

dashboard

点击“新建 -> Notebook”开始使用。您可以使用您选择的 Python 版本。

create a new notebook

一切就绪!