使用 EFA 运行训练 - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 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 估算器运行训练作业。有关注册容器并将其用于训练的更多信息,请参阅调整您自己的训练容器