

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 透過 EFA 執行訓練
<a name="your-algorithms-training-efa"></a>

 SageMaker AI 可整合 [EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) 裝置，以加速高效能運算 (HPC) 和機器學習應用程式。此整合可讓您在執行分散式訓練工作時利用 EFA 裝置。您可以將 EFA 整合新增至您帶給 SageMaker AI 的現有 Docker 容器。下列資訊概述如何將您自有的容器設定為使用 EFA 裝置進行分散式訓練工作。

## 先決條件
<a name="your-algorithms-training-efa-prereq"></a>

 您的容器必須符合 [SageMaker 訓練容器規格](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-dockerfile.html)。  

## 安裝 EFA 和必要套件
<a name="your-algorithms-training-efa-install"></a>

您的容器必須下載並安裝 [EFA 軟體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html)。這可讓您的容器辨識 EFA 裝置，並提供相容的 Libfabric 和 Open MPI 版本。

任何如 MPI 和 NCCL 等工具都必須在容器內安裝和管理，才能作為啟用 EFA 的訓練工作的一部分使用。如需了解所有可用 EFA 版本，請參閱[使用檢查總和驗證 EFA 安裝程式](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-verify.html)。下列範例會示範如何修改啟用 EFA 的容器的 Dockerfile，以安裝 EFA、MPI、OFI、NCCL 和 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
```

## 建立容器時的考量
<a name="your-algorithms-training-efa-considerations"></a>

EFA 裝置在可供容器存取的裝置清單下，以 `/dev/infiniband/uverbs0` 掛載至容器。在 P4d 執行個體上，容器可以存取 4 個 EFA 裝置。您可以在可供容器存取的裝置清單中找到 EFA 裝置，如下所示：
+  `/dev/infiniband/uverbs0` 
+  `/dev/infiniband/uverbs1` 
+  `/dev/infiniband/uverbs2` 
+  `/dev/infiniband/uverbs3` 

 若要從提供給每個容器執行個體的 `resourceconfig.json` 檔案中取得主機名稱、對等主機名稱和網路介面 (適用於 MPI) 的相關資訊，請參閱[分散式訓練組態](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training)。您的容器會透過預設彈性網路介面 (ENI) 處理對等之間的一般 TCP 流量，同時透過 EFA 裝置處理 OFI (核心繞過) 流量。

## 確認已辨識您的 EFA 裝置
<a name="your-algorithms-training-efa-verify"></a>

  若要確認是否已識別 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 執行訓練工作
<a name="your-algorithms-training-efa-run"></a>

 建立啟用 EFA 的容器後，您可以使用 SageMaker AI 估算器透過 EFA 執行訓練任務，方法與處理任何其他 Docker 映像的方式相同。如需註冊容器並將其用於訓練的詳細資訊，請參閱[調整您自有的訓練容器](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html#byoc-training-step5)。