本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
透過 EFA 執行訓練
SageMaker 提供與 EFA 裝置整合,以加速高效能運算 (HPC) 和機器學習應用程式。此整合可讓您在執行分散式訓練任務時利用 EFA 裝置。您可以將 EFA 整合新增至您帶來的現有 Docker 容器。 SageMaker下列資訊概述如何將您自己的容器設定為使用 EFA 裝置進行分散式訓練工作。
必要條件
您的容器必須符合SageMaker 訓練容器規格。
安裝 EFA 和必要套件
您的容器必須下載並安裝 EFA 軟體。這可讓您的容器辨識 EFA 裝置,並提供相容的 Libfabric 和開放式 MPI 版本。
任何如 MPI 和 NCCL 等工具都必須在容器內安裝和管理,才能作為啟用 EFA 的訓練工作的一部分使用。如需所有可用 EFA 版本的清單,請參閱使用總和檢查碼驗證 EFA 安裝程式。下列範例會示範如何修改啟用 EFA 的容器的 Dockerfile,以安裝 EFA、MPI、OFI、NCCL 和 NCCL-TEST。
注意
在容器上搭配 EFA 使用時,容器的 NCCL 版本應 PyTorch 與您安裝的 NCCL 版本相符。 PyTorch 若要驗證 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 流量,同時處理透過 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 任何其他 Docker 映像檔相同的方式,使用估算器使用 EFA 執行訓練工作。如需註冊容器並將其用於訓練的詳細資訊,請參閱調整您自己的訓練容器。