本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 EFA 运行训练
SageMaker 提供与 EFA 设备的集成,以加速高性能计算 (HPC) 和机器学习应用程序。通过这种集成,您可在运行分布式训练作业时利用 EFA 设备。您可以将 EFA 集成添加到您引入的现有 Docker 容器中。 SageMaker以下信息概述了如何配置自己的容器,以便为分布式训练作业使用 EFA 设备。
先决条件
您的容器必须满足SageMaker 训练容器规范。
安装 EFA 和所需的软件包
您的容器必须下载并安装 EFA 软件。这使您的容器能够识别 EFA 设备,并提供兼容版本的 Libfabric 和 Open MPI。
容器内必须安装和管理 MPI 和 NCCL 等任意工具,才能在启用 EFA 的训练作业中使用。有关所有可用 EFA 版本的列表,请参阅使用校验和验证 EFA 安装程序。以下示例说明如何修改启用 EFA 的容器的 Dockerfile,以便安装 EFA、MPI、OFI、NCCL 和 NCCL-TEST。
注意
在容器上 PyTorch 与 EFA 一起使用时,容器的 NCCL 版本应与安装的 NCCL 版本相匹配。 PyTorch 要验证 PyTorch NCCL 版本,请使用以下命令:
torch.cuda.nccl.version()
ARG OPEN_MPI_PATH=/opt/amazon/openmpi/ ENV NCCL_VERSION=2.7.8 ENV EFA_VERSION=1.30.0 ENV BRANCH_OFI=1.1.1 ################################################# ## EFA and MPI SETUP RUN cd $HOME \ && curl -O https://s3-us-west-2.amazonaws.com/aws-efa-installer/aws-efa-installer-${EFA_VERSION}.tar.gz \ && tar -xf aws-efa-installer-${EFA_VERSION}.tar.gz \ && cd aws-efa-installer \ && ./efa_installer.sh -y --skip-kmod -g \ ENV PATH="$OPEN_MPI_PATH/bin:$PATH" ENV LD_LIBRARY_PATH="$OPEN_MPI_PATH/lib/:$LD_LIBRARY_PATH" ################################################# ## NCCL, OFI, NCCL-TEST SETUP RUN cd $HOME \ && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \ && cd nccl \ && make -j64 src.build BUILDDIR=/usr/local RUN apt-get update && apt-get install -y autoconf RUN cd $HOME \ && git clone https://github.com/aws/aws-ofi-nccl.git -b v${BRANCH_OFI} \ && cd aws-ofi-nccl \ && ./autogen.sh \ && ./configure --with-libfabric=/opt/amazon/efa \ --with-mpi=/opt/amazon/openmpi \ --with-cuda=/usr/local/cuda \ --with-nccl=/usr/local --prefix=/usr/local \ && make && make install RUN cd $HOME \ && git clone https://github.com/NVIDIA/nccl-tests \ && cd nccl-tests \ && make MPI=1 MPI_HOME=/opt/amazon/openmpi CUDA_HOME=/usr/local/cuda NCCL_HOME=/usr/local
创建容器时的注意事项
EFA 设备作为 /dev/infiniband/uverbs0
挂载到容器中,位于容器可访问的设备列表下。在 P4d 实例上,容器可以访问 4 个 EFA 设备。在容器能够访问的设备列表中可以找到 EFA 设备,如下所示:
-
/dev/infiniband/uverbs0
-
/dev/infiniband/uverbs1
-
/dev/infiniband/uverbs2
-
/dev/infiniband/uverbs3
要从向每个容器实例提供的 resourceconfig.json
文件中获取主机名、对等连接主机名和网络接口(对于 MPI)等信息,请参阅分布式训练配置。您的容器通过默认的弹性网络接口 (ENI) 处理对等连接之间的常规 TCP 流量,同时通过 EFA 设备处理 OFI(内核旁路)流量。
验证是否已识别您的 EFA 设备
要验证是否已识别 EFA 设备,请在容器内运行以下命令。
/opt/amazon/efa/bin/fi_info -p efa
您的输出应类似于以下内容。
provider: efa fabric: EFA-fe80::e5:56ff:fe34:56a8 domain: efa_0-rdm version: 2.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::e5:56ff:fe34:56a8 domain: efa_0-dgrm version: 2.0 type: FI_EP_DGRAM protocol: FI_PROTO_EFA provider: efa;ofi_rxd fabric: EFA-fe80::e5:56ff:fe34:56a8 domain: efa_0-dgrm version: 1.0 type: FI_EP_RDM protocol: FI_PROTO_RXD
使用 EFA 运行训练作业
创建支持 EFA 的容器后,您可以像处理任何其他 Docker 镜像一样使用 EFA 使用 SageMaker 估算器运行训练作业。有关注册容器并将其用于训练的更多信息,请参阅调整您自己的训练容器。