

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# EFA로 훈련 실행하기
<a name="your-algorithms-training-efa"></a>

 SageMaker AI는 고성능 컴퓨팅(HPC) 및 기계 학습 애플리케이션 속도를 높이기 위해 [EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html)와의 통합을 제공합니다. 이러한 통합을 통해 분산형 훈련 작업을 실행할 때 EFA 장치를 활용할 수 있습니다. SageMaker AI로 가져온 기존 Docker 컨테이너에 EFA 통합을 추가할 수 있습니다. 다음 정보는 분산형 훈련 작업에 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, MPI, OFI, NCCL 및 NCCL-TEST를 설치하도록 EFA 지원 컨테이너의 Dockerfile을 수정하는 방법을 보여줍니다.

**참고**  
컨테이너에서 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 지원 컨테이너를 만든 후에는 다른 Docker 이미지와 동일한 방식으로 SageMaker AI 예측기를 사용하여 EFA로 훈련 작업을 실행할 수 있습니다. 컨테이너를 등록하고 이를 훈련에 사용하는 방법에 대한 자세한 내용은 [나만의 훈련 컨테이너 조정하기](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html#byoc-training-step5)를 참조하세요.