使用 EFA 运行训练 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用 EFA 运行训练

SageMaker 提供与的集成EFA设备以加快高性能计算 (HPC) 和机器学习应用程序的速度。这种集成允许您在运行分布式培训作业时利用 EFA 设备。您可以将 EFA 集成添加到您带到 SageMaker 的现有 Docker 容器中。以下信息概述了如何配置自己的容器,以便将 EFA 设备用于分布式培训作业。

先决条件

你的容器必须满足SageMaker 训练容器规格

安装 EFA 和所需的软件包

你的容器必须下载并安装EFA 软件. 这使您的容器能够识别 EFA 设备,并提供兼容版本的 Libfabric 和 Open MPI。

必须在容器内安装和管理 MPI 和 NCCL 等任何工具,才能作为启用 EFA 的培训作业的一部分使用。以下示例说明如何修改启用 EFA 的容器的 Dockerfile 以安装 EFA、MPI、OFI、NCCL 和 NCCL-TEST。

注意

在容器上使用 PyTorch 和 EFA 时,容器的 NCCL 版本应与 PyTorch 安装的 NCCL 版本匹配。要验证 PyTorch NCCL 版本,请使用以下命令:

torch.cuda.nccl.version()
ARG OPEN_MPI_PATH=/opt/amazon/openmpi/ ENV NCCL_VERSION=2.7.8 ENV EFA_VERSION=1.11.2 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

从中获取有关主机名、对等主机名和网络接口(对于 MPI)的信息resourceconfig.json提供给每个容器实例的文件,请参阅分布式训练配置. 您的容器通过默认的弹性网络接口 (ENI) 处理 Peer 节点之间的常规 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 的容器后,您可以使用 SageMaker Estystator 使用 EFA 运行训练作业,就像处理任何其他 Docker 映像一样。有关注册容器并将其用于培训的更多信息,请参阅调整自己的训练容器.