

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Esecuzione di un addestramento con EFA
<a name="your-algorithms-training-efa"></a>

 SageMaker L'intelligenza artificiale fornisce l'integrazione con i dispositivi [EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) per accelerare le applicazioni di High Performance Computing (HPC) e machine learning. Questa integrazione consente di sfruttare un dispositivo EFA per eseguire processi di addestramento distribuiti. Puoi aggiungere l'integrazione EFA a un contenitore Docker esistente da aggiungere all'IA. SageMaker Le seguenti informazioni descrivono come configurare il proprio container per utilizzare un dispositivo EFA per i processi di addestramento distribuiti. 

## Prerequisiti
<a name="your-algorithms-training-efa-prereq"></a>

 Il contenitore deve soddisfare le specifiche del [contenitore SageMaker di formazione](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-dockerfile.html).  

## Installazione dei pacchetti EFA richiesti
<a name="your-algorithms-training-efa-install"></a>

Il container deve scaricare e installare il [ software EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html). Ciò consente al container di riconoscere il dispositivo EFA e fornisce versioni compatibili di Libfabric e Open MPI. 

Tutti gli strumenti come MPI e NCCL devono essere installati e gestiti all'interno del container per essere utilizzati come parte del processo di addestramento abilitato EFA. Per un elenco di tutte le versioni EFA disponibili, consulta [Verifica del programma di installazione EFA utilizzando un checksum](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-verify.html). L'esempio seguente mostra come modificare il file Docker del container abilitato EFA per installare EFA, MPI, OFI, NCCL e NCCL-TEST.

**Nota**  
Quando si utilizza PyTorch con EFA sul contenitore, la versione NCCL del contenitore deve corrispondere alla versione NCCL dell'installazione. PyTorch Per verificare la versione PyTorch NCCL, usa il seguente comando:  

```
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
```

## Considerazioni sulla creazione di un container
<a name="your-algorithms-training-efa-considerations"></a>

Il dispositivo EFA è montato sul container come indicato `/dev/infiniband/uverbs0` nell'elenco dei dispositivi accessibili al container. Nelle istanze P4d, il container ha accesso a 4 dispositivi EFA. I dispositivi EFA sono riportati nell'elenco dei dispositivi accessibili al container come: 
+  `/dev/infiniband/uverbs0` 
+  `/dev/infiniband/uverbs1` 
+  `/dev/infiniband/uverbs2` 
+  `/dev/infiniband/uverbs3` 

 Per ottenere informazioni sul nome host, sui nomi host dei peer e sull'interfaccia di rete (per MPI) dal file `resourceconfig.json` fornito a ciascuna istanza di container, consulta [Distributed Training Configuration](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training). Il container gestisce il normale traffico TCP tra peer tramite le interfacce di rete elastiche (ENI) predefinite, mentre gestisce il traffico OFI (bypassando il kernel) attraverso il dispositivo EFA. 

## Verifica che il tuo dispositivo EFA sia riconosciuto
<a name="your-algorithms-training-efa-verify"></a>

  Per verificare che il tuo dispositivo EFA sia riconosciuto, esegui il comando seguente dall'interno del container. 

```
/opt/amazon/efa/bin/fi_info -p efa
```

L'aspetto dell'output sarà simile al seguente.

```
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
```

## Esecuzione di un processo di addestramento con EFA
<a name="your-algorithms-training-efa-run"></a>

 Dopo aver creato un contenitore compatibile con EFA, puoi eseguire un processo di formazione con EFA utilizzando un SageMaker AI Estimator nello stesso modo in cui faresti con qualsiasi altra immagine Docker. Per ulteriori informazioni sulla registrazione del container e sul suo utilizzo per l’addestramento, consulta [Adapting your own training container](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html#byoc-training-step5).