

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ejecutar entrenamiento con EFA
<a name="your-algorithms-training-efa"></a>

 SageMaker La IA proporciona integración con los dispositivos [EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) para acelerar las aplicaciones de computación de alto rendimiento (HPC) y aprendizaje automático. Esta integración le permite aprovechar un dispositivo EFA al ejecutar sus tareas de entrenamiento distribuidas. Puede añadir la integración de EFA a un contenedor Docker existente que incorpore a AI. SageMaker La siguiente información describe cómo configurar su propio contenedor para utilizar un dispositivo EFA en sus trabajos de entrenamiento distribuidos. 

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

 El contenedor debe cumplir con la especificación del [contenedor SageMaker de formación](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-dockerfile.html).  

## Instale EFA y los paquetes obligatorios.
<a name="your-algorithms-training-efa-install"></a>

Su contenedor debe descargar e instalar el [software EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html). Esto permite que el contenedor reconozca el dispositivo EFA y proporciona versiones compatibles de Libfabric y Open MPI. 

Todas las herramientas, como MPI y NCCL, deben instalarse y gestionarse dentro del contenedor para poder utilizarlas como parte de su trabajo de entrenamiento en materia de EFA. Para obtener una lista de todas las versiones de EFA disponibles, consulte [Verificar el instalador de EFA mediante una suma de comprobación](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-verify.html). En el siguiente ejemplo se muestra cómo modificar el Dockerfile de un contenedor compatible con EFA para instalar EFA, MPI, OFI, NCCL y NCCL-TEST.

**nota**  
Si lo usa PyTorch con EFA en su contenedor, la versión NCCL del contenedor debe coincidir con la versión NCCL de su instalación. PyTorch Para comprobar la versión de la PyTorch NCCL, utilice el siguiente 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
```

## Consideraciones al crear el contenedor
<a name="your-algorithms-training-efa-considerations"></a>

El dispositivo EFA se monta en el contenedor como `/dev/infiniband/uverbs0` según se indica en la lista de dispositivos accesibles al contenedor. En las instancias P4d, el contenedor tiene acceso a 4 dispositivos EFA. Los dispositivos EFA se encuentran en la lista de dispositivos a los que puede acceder el contenedor de la siguiente manera: 
+  `/dev/infiniband/uverbs0` 
+  `/dev/infiniband/uverbs1` 
+  `/dev/infiniband/uverbs2` 
+  `/dev/infiniband/uverbs3` 

 Para obtener información sobre el nombre de host, los nombres de host del mismo nivel y la interfaz de red (para MPI) en el archivo `resourceconfig.json` que se proporciona a cada instancia de contenedor, consulte [Configuración de entrenamiento distribuido](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training). El contenedor gestiona el tráfico TCP normal entre pares a través de las interfaces de red elásticas (ENI) predeterminadas, mientras que gestiona el tráfico OFI (derivación del núcleo) a través del dispositivo EFA. 

## Comprobar que el dispositivo EFA sea reconocido
<a name="your-algorithms-training-efa-verify"></a>

  Para comprobar que se reconozca el dispositivo EFA, ejecute el siguiente comando desde su contenedor. 

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

El resultado debería tener un aspecto similar al siguiente.

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

## Ejecutar un trabajo de entrenamiento con EFA
<a name="your-algorithms-training-efa-run"></a>

 Una vez que haya creado un contenedor compatible con la EFA, puede realizar un trabajo de formación con la EFA utilizando un estimador de SageMaker IA del mismo modo que lo haría con cualquier otra imagen de Docker. Para obtener más información sobre cómo registrar su contenedor y usarlo para el entrenamiento, consulte [Adaptación de un contenedor de entrenamiento propio](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html#byoc-training-step5).