23.3. 使用AWS EC2实例
在 Colab 中打开 Notebook
在 Colab 中打开 Notebook
在 Colab 中打开 Notebook
在 Colab 中打开 Notebook
在 SageMaker Studio Lab 中打开 Notebook

在本节中,我们将向你展示如何在一台纯净的Linux机器上安装所有库。回想一下,在 23.2节 中,我们讨论了如何使用Amazon SageMaker,而在AWS上自己构建实例的成本更低。整个过程包括三个步骤:

  1. 从AWS EC2申请一个GPU Linux实例。

  2. 安装CUDA(或使用预装了CUDA的亚马逊云镜像(AMI))。

  3. 安装深度学习框架和运行本书代码所需的其他库。

这个过程也适用于其他实例(以及其他云),尽管需要一些微小的修改。在继续之前,你需要创建一个AWS账户,更多详情请参见 23.2节

23.3.1. 创建并运行EC2实例

登录你的AWS账户后,点击“EC2”(图 23.3.1)进入EC2控制台。

../_images/aws.png

图 23.3.1 打开EC2控制台。

图 23.3.2 显示了EC2控制台。

../_images/ec2.png

图 23.3.2 EC2控制台。

23.3.1.1. 预设位置

选择一个附近的数据中心以减少延迟,例如,“Oregon”(俄勒冈,在图 23.3.2右上角的红框中标记)。如果你在中国,可以选择附近的亚太地区,如首尔或东京。请注意,一些数据中心可能没有GPU实例。

23.3.1.2. 增加限制

在选择实例之前,通过点击左侧栏中的“Limits”(限制)标签来检查是否有数量限制,如图 23.3.2所示。图 23.3.3 显示了此类限制的一个例子。根据区域,该账户目前无法开设“p2.xlarge”实例。如果你需要开设一个或多个实例,请点击“Request limit increase”(请求提高限制)链接来申请更高的实例配额。通常,处理申请需要一个工作日。

../_images/limits.png

图 23.3.3 实例数量限制。

23.3.1.3. 启动实例

接下来,点击图 23.3.2中红框标记的“Launch Instance”(启动实例)按钮来启动你的实例。

我们首先选择一个合适的亚马逊云镜像(AMI)。选择一个Ubuntu实例(图 23.3.4)。

../_images/ubuntu-new.png

图 23.3.4 选择一个AMI。

EC2提供了许多不同的实例配置可供选择。这有时会让初学者感到不知所措。tab_ec2 列出了不同的适用机型。

:不同的EC2实例类型

表 23.3.1 标签:tab_ec2

名称

GPU

备注

g2

Grid K520

老旧

p2

Kepler K80

老旧但作为竞价实例通常很便宜

g3

Maxwell M60

不错的性价比

p3

Volta V100

FP16高性能

p4

Ampere A100

大规模训练高性能

g4

Turing T4

推理优化 FP16/INT8

所有这些服务器都有多种型号,表示使用的GPU数量。例如,p2.xlarge有1个GPU,而p2.16xlarge有16个GPU和更多内存。有关更多详细信息,请参阅AWS EC2文档摘要页面。为了说明目的,一个p2.xlarge就足够了(在图 23.3.5的红框中标记)。

../_images/p2x.png

图 23.3.5 选择一个实例。

请注意,你应该使用一个带有合适驱动程序的启用了GPU的实例和一个启用了GPU的深度学习框架。否则你将无法从使用GPU中获得任何好处。

我们继续选择用于访问实例的密钥对。如果你没有密钥对,请点击图 23.3.6中的“创建新密钥对”来生成一个密钥对。随后,你可以选择之前生成的密钥对。如果你生成了一个新的密钥对,请确保下载并将其存放在一个安全的位置。这是你通过SSH连接到服务器的唯一方式。

../_images/keypair.png

图 23.3.6 选择一个密钥对。

在此示例中,我们将保留“网络设置”的默认配置(点击“编辑”按钮以配置子网和安全组等项目)。我们只将默认硬盘大小增加到64 GB(图 23.3.7)。请注意,CUDA本身已经占用了4 GB。

../_images/disk.png

图 23.3.7 修改硬盘大小。

点击“启动实例”以启动创建的实例。点击图 23.3.8中显示的实例ID以查看此实例的状态。

../_images/launching.png

图 23.3.8 点击实例ID。

23.3.1.4. 连接到实例

图 23.3.9所示,在实例状态变为绿色后,右键单击实例并选择Connect(连接)以查看实例访问方法。

../_images/connect.png

图 23.3.9 查看实例访问方法。

如果这是一个新密钥,为了让SSH正常工作,它不能是公开可查看的。进入你存放D2L_key.pem的文件夹并执行以下命令,使密钥不公开可查看:

chmod 400 D2L_key.pem
../_images/chmod.png

图 23.3.10 查看实例访问和启动方法。

现在,复制图 23.3.10下方红框中的SSH命令并粘贴到命令行中:

ssh -i "D2L_key.pem" ubuntu@ec2-xx-xxx-xxx-xxx.y.compute.amazonaws.com

当命令行提示“Are you sure you want to continue connecting (yes/no)”时,输入“yes”并按Enter键登录到实例。

你的服务器现在已经准备好了。

23.3.2. 安装CUDA

在安装CUDA之前,请务必用最新的驱动程序更新实例。

sudo apt-get update && sudo apt-get install -y build-essential git libgfortran3

这里我们下载CUDA 12.1。访问NVIDIA的官方仓库找到下载链接,如图 23.3.11所示。

../_images/cuda121.png

图 23.3.11 找到CUDA 12.1的下载地址。

复制说明并将其粘贴到终端以安装CUDA 12.1。

# The link and file name are subject to changes
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda-repo-ubuntu2204-12-1-local_12.1.0-530.30.02-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-1-local_12.1.0-530.30.02-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-12-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

安装程序后,运行以下命令查看GPU:

nvidia-smi

最后,将CUDA添加到库路径中,以帮助其他库找到它,例如,将以下几行附加到~/.bashrc的末尾。

export PATH="/usr/local/cuda-12.1/bin:$PATH"
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-12.1/lib64

23.3.3. 安装运行代码所需的库

要运行本书的代码,只需在EC2实例上按照安装中针对Linux用户的步骤进行操作,并使用以下技巧在远程Linux服务器上工作:

  • 要在Miniconda安装页面上下载bash脚本,请右键单击下载链接并选择“复制链接地址”,然后执行 wget [复制的链接地址]

  • 运行 ~/miniconda3/bin/conda init 后,你可以执行 source ~/.bashrc,而无需关闭并重新打开当前的shell。

23.3.4. 远程运行Jupyter Notebook

要远程运行Jupyter Notebook,你需要使用SSH端口转发。毕竟,云中的服务器没有显示器或键盘。为此,从你的台式机(或笔记本电脑)按如下方式登录到你的服务器:

# This command must be run in the local command line
ssh -i "/path/to/key.pem" ubuntu@ec2-xx-xxx-xxx-xxx.y.compute.amazonaws.com -L 8889:localhost:8888

接下来,在EC2实例上进入本书下载代码的位置,然后运行:

conda activate d2l
jupyter notebook

图 23.3.12 显示了运行Jupyter Notebook后可能的输出。最后一行是端口8888的URL。

../_images/jupyter.png

图 23.3.12 运行Jupyter Notebook后的输出。最后一行是端口8888的URL。

由于你使用了到端口8889的端口转发,请复制图 23.3.12红框中的最后一行,将URL中的“8888”替换为“8889”,然后在你的本地浏览器中打开它。

23.3.5. 关闭未使用的实例

由于云服务是按使用时间计费的,你应该关闭未在使用的实例。请注意,还有其他选择:

  • “停止”实例意味着你将能够再次启动它。这类似于关闭你常规服务器的电源。然而,停止的实例仍将为保留的硬盘空间收取少量费用。

  • “终止”实例将删除所有与之相关的数据。这包括磁盘,因此你无法再次启动它。只有当你确定将来不再需要它时才这样做。

如果你想将该实例用作更多实例的模板,请在图 23.3.9中的示例上右键单击,然后选择“Image”(映像)\(\rightarrow\)“Create”(创建)以创建实例的映像。完成后,选择“Instance State”(实例状态)\(\rightarrow\)“Terminate”(终止)以终止实例。下次你想使用此实例时,可以按照本节中的步骤,基于保存的映像创建实例。唯一的区别是,在图 23.3.4中显示的“1. Choose AMI”(选择AMI)中,你必须使用左侧的“My AMIs”(我的AMI)选项来选择你保存的映像。创建的实例将保留存储在映像硬盘上的信息。例如,你将不必重新安装CUDA和其他运行时环境。

23.3.6. 小结

  • 我们可以按需启动和停止实例,而无需购买和构建自己的计算机。

  • 在使用支持GPU的深度学习框架之前,我们需要安装CUDA。

  • 我们可以使用端口转发在远程服务器上运行Jupyter Notebook。

23.3.7. 练习

  1. 云提供了便利,但并不便宜。了解如何启动竞价实例,看看如何降低成本。

  2. 尝试不同的GPU服务器。它们有多快?

  3. 尝试多GPU服务器。你能将规模扩展到什么程度?

讨论