本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用跑步训练 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 运行训练作业。有关注册容器并将其用于训练的更多信息,请参阅调整您自己的训练容器。