使用跑步训练 EFA - 亚马逊 SageMaker AI

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

使用跑步训练 EFA

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

先决条件

您的容器必须满足SageMaker 训练容器规范。 

安装EFA和必需的软件包

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

任何工具(如MPI和)都NCCL必须在容器内安装和管理,才能用作EFA已启用的训练作业的一部分。有关所有可用EFA版本的列表,请参阅使用校验和验证EFA安装程序。以下示例说明如何修改EFA已启用容器的 Dockerfile 以安装EFA、、MPIOFINCCL、和-。NCCL TEST

注意

在容器EFA上 PyTorch 与一起使用时,容器的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.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量,同时处理OFI(绕过内核)通过EFA设备的流量。

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