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

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

使用 EFA 进行训练

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

Prerequisites

您的容器必须满足SageMaker 培训容器规格

安装 EFA 和所需软件包

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

必须在容器内安装和管理 MPI 和 NCCL 等任何工具,以便作为启用 EFA 的培训工作的一部分使用。以下示例说明如何修改启用 EFA 的容器的 Docker 文件,以安装 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) 处理对等方之间的常规 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 估计器运行 EFA 训练作业,就像使用任何其他码头图像一样。有关注册容器并将其用于培训的详细信息,请参阅调整您自己的训练容器.