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