Introducción a EFA y NCCL para cargas de trabajo de ML en Amazon EC2
La Biblioteca de comunicación colectiva de NVIDIA (NCCL) es una biblioteca de rutinas de comunicación colectiva estándar para múltiples GPU en un solo nodo o múltiples nodos. NCCL se puede usar junto con EFA, Libfabric y MPI para admitir varias cargas de trabajo de machine learning. Para obtener más información, consulte el sitio web de NCCL
Los siguientes pasos le ayudarán a empezar a utilizar Elastic Fabric Adapter con una AMI para uno de los sistemas operativos base compatibles.
nota
-
Solo se admiten los tipos de instancia
p3dn.24xlarge
,p4d.24xlarge
yp5.48xlarge
. -
Solo se admiten las AMI básicas de Amazon Linux 2 y Ubuntu 20.04/22.04.
-
Con EFA solo se admite NCCL 2.4.2 y versiones posteriores.
Para obtener más información sobre cómo ejecutar cargas de trabajo de machine learning con EFA y NCCL mediante un AWS Deep Learning AMIs, consulte Uso de EFA en la DLAMI en la Guía para desarrolladores AWS Deep Learning AMIs.
Pasos
- Paso 1: preparar un grupo de seguridad habilitado para EFA
- Paso 2: iniciar una instancia temporal
- Paso 3: instalar los controladores de GPU Nvidia, el kit de herramientas Nvidia CUDA y la cuDNN
- Paso 4: instalación de GDRCopy
- Paso 5: instalación del software EFA
- Paso 6: instalar NCCL
- Paso 7: instalar el complemento aws-ofi-nccl
- Paso 8: instalar las pruebas de NCCL
- Paso 9: prueba de la configuración de EFA y NCCL
- Paso 10: instalar las aplicaciones de machine learning
- Paso 11: creación de una AMI habilitada para EFA y NCCL
- Paso 12: terminar la instancia temporal
- Paso 13: inicialización de instancias habilitadas para EFA en un grupo con ubicación en clúster
- Paso 14: habilitar SSH sin contraseña
Paso 1: preparar un grupo de seguridad habilitado para EFA
Un EFA requiere un grupo de seguridad que permita todo el tráfico entrante y saliente hacia y desde el propio grupo de seguridad. En el siguiente procedimiento, se crea un grupo de seguridad que permite todo el tráfico entrante y saliente de sí mismo, y que permite el tráfico SSH entrante desde cualquier dirección IPv4 para la conectividad SSH.
importante
Este grupo de seguridad está pensado solo con fines de prueba. Para sus entornos de producción, le recomendamos que cree una regla SSH entrante que permita el tráfico únicamente desde la dirección IP desde la que se conecta, como la dirección IP de su equipo o un rango de direcciones IP en la red local.
Para ver otros escenarios, consulte Reglas de grupo de seguridad para diferentes casos de uso.
Para crear un grupo de seguridad habilitado para EFA
Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/
. -
En el panel de navegación, elija Grupos de seguridad y, a continuación, elija Crear grupo de seguridad.
-
En la ventana Crear grupo de seguridad, haga lo siguiente:
-
En Nombre del grupo de seguridad, ingrese un nombre descriptivo para el grupo de seguridad, como, por ejemplo,
EFA-enabled security group
. -
(Opcional) En Descripción, ingrese una breve descripción del grupo de seguridad.
-
En VPC, seleccione la VPC en la que desea iniciar sus instancias habilitadas para EFA.
-
Elija Crear grupo de seguridad.
-
-
Seleccione el grupo de seguridad que creó y, en la pestaña Detalles, copie el ID del grupo de seguridad.
-
Con el grupo de seguridad todavía seleccionado, elija Acciones, Editar reglas de entrada y, luego, haga lo siguiente:
-
Seleccione Agregar regla.
-
En Tipo, seleccione Todo el tráfico.
-
En Tipo de origen, elija Personalizar y pegue el ID del grupo de seguridad que copió en el campo.
-
Seleccione Agregar regla.
-
En Tipo, seleccione SSH.
-
En Tipo de origen, elija Cualquiera de IPv4.
-
Seleccione Guardar reglas.
-
-
Con el grupo de seguridad todavía seleccionado, elija Acciones, Editar reglas de salida y, luego, haga lo siguiente:
-
Seleccione Agregar regla.
-
En Tipo, seleccione Todo el tráfico.
-
En Tipo de destino, elija Personalizar y pegue el ID del grupo de seguridad que copió en el campo.
-
Seleccione Guardar reglas.
-
Paso 2: iniciar una instancia temporal
Lance una instancia temporal que puede utilizar para instalar y configurar los componentes de software de EFA. Puede utilizar esta instancia para crear una AMI habilitada para EFA desde la que puede iniciar sus instancias habilitadas para EFA.
Para iniciar una instancia temporal
Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/
. -
En el panel de navegación, elija Instancias y, a continuación, Iniciar instancias para abrir el nuevo asistente de inicialización de instancias.
-
(Opcional) En la sección Nombre y etiquetas, proporcione un nombre para la instancia, como
EFA-instance
. El nombre se asigna a la instancia como etiqueta de recurso (Name=
).EFA-instance
-
En la sección Imágenes de aplicaciones y sistema operativo, seleccione una AMI para uno de los sistemas operativos compatibles. Solo se admiten Amazon Linux 2, Ubuntu 20.04 y Ubuntu 22.04.
-
En la sección Tipo de instancia, seleccione
p3dn.24xlarge
,p4d.24xlarge
op5.48xlarge
. -
En la sección Par de claves, seleccione el par de claves que desea utilizar en la instancia.
-
En la sección Configuración de red, elija Editar y realice lo siguiente:
-
En Subred, elija la subred en la que desea iniciar la instancia. Si no selecciona una subred, no puede habilitar la instancia para EFA.
-
En Firewall (grupos de seguridad), elija Seleccionar grupo de seguridad existente y, a continuación, seleccione el grupo de seguridad que creó en el paso anterior.
-
Amplíe la sección Configuración de red avanzada.
Para la interfaz de red 1, seleccione Índice de tarjeta de red = 0, Índice de dispositivo = 0 y Tipo de interfaz = EFA con ENA.
(Opcional) Si utiliza un tipo de instancia con varias tarjetas, por ejemplo,
p4d.24xlarge
op5.48xlarge
, para cada interfaz de red adicional necesaria, elija Agregar interfaz de red; en Índice de tarjetas de red, seleccione el siguiente índice no utilizado y, a continuación, seleccione Índice de dispositivo = 1 y Tipo de interfaz = EFA con ENA o solo EFA.
-
-
En la sección Storage (Almacenamiento), configure los volúmenes según sea necesario.
nota
Debe aprovisionar 10 a 20 GiB adicionales de almacenamiento para el conjunto de herramientas CUDA de Nvidia. Si no aprovisiona suficiente almacenamiento, recibirá un error de
insufficient disk space
cuando intente instalar los controladores de Nvidia y el kit de herramientas CUDA. -
En el panel Resumen que se encuentra a la derecha, elija Iniciar instancia.
Paso 3: instalar los controladores de GPU Nvidia, el kit de herramientas Nvidia CUDA y la cuDNN
Paso 4: instalación de GDRCopy
Instale GDRCopy para mejorar el rendimiento de Libfabric. Para obtener más información sobre GDRCopy, consulte el repositorio de GDRCopy
Paso 5: instalación del software EFA
Instale el kernel habilitado para EFA, los controladores de EFA, Libfabric y la pila Open MPI necesarios para admitir EFA en su instancia temporal.
Para instalar el software EFA
-
Conéctese a la instancia que lanzó. Para obtener más información, consulte Conexión a la instancia de Linux con SSH.
-
Descargue los archivos de instalación de software de EFA. Los archivos de instalación de software están empaquetados en un archivo tarball comprimido (
.tar.gz
). Para descargar la última versión estable, utilice el comando siguiente.$
curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.35.0.tar.gzTambién puede obtener la última versión reemplazando el número de versión por
latest
en el comando anterior. (Opcional) Verifique la autenticidad y la integridad del archivo tarball (
.tar.gz
) de EFA.Le recomendamos que lo haga para verificar la identidad del editor de software y para verificar que el archivo no se haya modificado ni dañado desde que se publicó. Si no desea verificar el archivo tarball, omita este paso.
nota
De forma alternativa, si prefiere verificar el archivo tarball con una suma de comprobación MD5 o SHA256, consulte Verificar el instalador de EFA mediante una suma de comprobación.
-
Descargue la clave pública de GPG e impórtela a su conjunto de claves.
$
wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.keyEl comando debe devolver un valor de clave. Anote el valor de clave, ya que lo necesitará en el siguiente paso.
-
Verifique la huella digital de la clave de GPG. Ejecute el siguiente comando y especifique el valor de clave del paso anterior.
$
gpg --fingerprintkey_value
El comando debe devolver una huella digital idéntica a
4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC
. Si la huella digital no coincide, no ejecute el script de instalación de EFA y contáctese con AWS Support. -
Descargue el archivo de firma y verifique la firma del archivo tarball de EFA.
$
wget https://efa-installer.amazonaws.com/aws-efa-installer-1.35.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.35.0.tar.gz.sigA continuación se muestra un ejemplo de salida.
gpg: Signature made Wed 29 Jul 2020 12:50:13 AM UTC using RSA key ID DD2D3CCC gpg: Good signature from "Amazon EC2 EFA <ec2-efa-maintainers@amazon.com>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC
Si el resultado incluye
Good signature
y la huella digital coincide con la huella digital del paso anterior, avance al siguiente paso. Si no es así, no ejecute el script de instalación de EFA y contáctese con AWS Support.
-
-
Extraiga los archivos desde el archivo
.tar.gz
comprimido y acceda al directorio extraído.$
tar -xf aws-efa-installer-1.35.0.tar.gz && cd aws-efa-installer -
Ejecute el script de instalación de software de EFA.
nota
A partir de la versión 1.30.0 de EFA, tanto Open MPI 4 como Open MPI 5 se instalan de forma predeterminada. A menos que necesite Open MPI 5, le recomendamos que instale únicamente Open MPI 4. El siguiente comando solo instala Open MPI 4. Si desea instalar Open MPI 4 y Open MPI 5, quite
--mpi=openmpi4
.$
sudo ./efa_installer.sh -y --mpi=openmpi4Libfabric está instalado en el directorio
/opt/amazon/efa
, mientras que Open MPI está instalado en el directorio/opt/amazon/openmpi
. -
Si el instalador de EFA le pide que reinicie la instancia, hágalo y vuelva a conectarse a la instancia. De lo contrario, cierre la sesión de la instancia y vuelva a iniciar sesión para completar la instalación.
-
Confirme que los componentes de software de EFA se han instalado correctamente.
$
fi_info -p efa -t FI_EP_RDMEl comando debe devolver información acerca de las interfaces de EFA de Libfabric. En el siguiente ejemplo, se muestra el comando de salida.
-
p3dn.24xlarge
con interfaz de red únicaprovider: efa fabric: EFA-fe80::94:3dff:fe89:1b70 domain: efa_0-rdm version: 2.0 type: FI_EP_RDM protocol: FI_PROTO_EFA
-
p4d.24xlarge
yp5.48xlarge
con múltiples interfaces de redprovider: efa fabric: EFA-fe80::c6e:8fff:fef6:e7ff domain: efa_0-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::c34:3eff:feb2:3c35 domain: efa_1-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::c0f:7bff:fe68:a775 domain: efa_2-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::ca7:b0ff:fea6:5e99 domain: efa_3-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA
-
Paso 6: instalar NCCL
Instale NCCL. Para obtener más información sobre NCCL, consulte el repositorio de NCCL
Para instalar NCCL
-
Vaya al directorio
/opt
.$
cd /opt -
Clone el repositorio oficial de NCCL en la instancia y vaya al repositorio clonado local.
$
sudo git clone https://github.com/NVIDIA/nccl.git && cd nccl -
Cree e instale NCCL y especifique el directorio de instalación de CUDA.
$
sudo make -j src.build CUDA_HOME=/usr/local/cuda
Paso 7: instalar el complemento aws-ofi-nccl
El complemento aws-ofi-nccl asigna las API de transporte orientadas a la conexión de NCCL a la interfaz de confianza sin conexión de libfabric. Esto le permite utilizar Libfabric como proveedor de red mientras ejecuta aplicaciones basadas en NCCL. Para obtener más información sobre el complemento aws-ofi-nccl, consulte el repositorio de aws-ofi-nccl
Para instalar el complemento aws-ofi-nccl
-
Vaya al directorio de inicio.
$
cd $HOME -
Instalar las herramientas necesarias.
-
Amazon Linux 2
$
sudo yum install hwloc-devel -
Ubuntu
$
sudo apt-get install libhwloc-dev
-
-
Descargue los archivos del complemento aws-ofi-nccl. Los archivos están empaquetados en un archivo tarball comprimido (
.tar.gz
).$
wget https://github.com/aws/aws-ofi-nccl/releases/download/v1.11.0-aws/aws-ofi-nccl-1.11.0-aws.tar.gz -
Extraiga los archivos desde el archivo .tar.gz comprimido y acceda al directorio extraído.
$
tar -xf aws-ofi-nccl-1.11.0-aws.tar.gz && cd aws-ofi-nccl-1.11.0-aws -
Para generar los archivos make, ejecute el script
configure
y especifique los directorios de instalación de MPI, Libfabric, NCCL y CUDA.$
./configure --prefix=/opt/aws-ofi-nccl --with-mpi=/opt/amazon/openmpi \ --with-libfabric=/opt/amazon/efa \ --with-cuda=/usr/local/cuda \ --enable-platform-aws -
Agregue el directorio Open MPI a la variable
PATH
.$
export PATH=/opt/amazon/openmpi/bin/:$PATH -
Instale el complemento aws-ofi-nccl.
$
make && sudo make install
Paso 8: instalar las pruebas de NCCL
Instale las pruebas de NCCL. Las pruebas de NCCL le permiten confirmar que NCCL está instalado correctamente y que está funcionando como se esperaba. Para obtener más información sobre las pruebas de NCCL, consulte el repositorio nccl-tests
Para instalar las pruebas de NCCL
-
Vaya al directorio de inicio.
$
cd $HOME -
Clone el repositorio oficial nccl-tests en la instancia y vaya al repositorio clonado local.
$
git clone https://github.com/NVIDIA/nccl-tests.git && cd nccl-tests -
Añada el directorio Libfabric a la variable
LD_LIBRARY_PATH
.-
Amazon Linux 2
$
export LD_LIBRARY_PATH=/opt/amazon/efa/lib64
:$LD_LIBRARY_PATH -
Ubuntu
$
export LD_LIBRARY_PATH=/opt/amazon/efa/lib
:$LD_LIBRARY_PATH
-
-
Instale las pruebas NCCL y especifique los directorios de instalación MPI, NCCL y CUDA.
$
make MPI=1 MPI_HOME=/opt/amazon/openmpi
NCCL_HOME=/opt/nccl/build
CUDA_HOME=/usr/local/cuda
Paso 9: prueba de la configuración de EFA y NCCL
Ejecute una prueba para asegurarse de que su instancia temporal esté configurada correctamente para EFA y NCCL.
Para probar la configuración de EFA y NCCL
-
Cree un archivo de hosts que especifique los hosts en los que desea ejecutar las pruebas. El siguiente comando crea un archivo de hosts con el nombre
my-hosts
que incluye una referencia a la propia instancia. -
Ejecute la prueba y especifique el archivo de hosts (
--hostfile
) y el número de GPUs que desea usar (-n
). El siguiente comando ejecuta la pruebaall_reduce_perf
en 8 GPUs de la propia instancia y especifica las siguientes variables de entorno.-
FI_EFA_USE_DEVICE_RDMA=1
: (solop4d.24xlarge
) utiliza la funcionalidad de RDMA del dispositivo para la transferencia de un solo lado y de dos lados. -
NCCL_DEBUG=INFO
: habilita la salida de depuración detallada. También puede especificarVERSION
para imprimir solo la versión de NCCL al inicio de la prueba oWARN
para recibir solo mensajes de error.
Para obtener más información sobre los argumentos de prueba de NCCL, consulte el archivo README de pruebas de NCCL
en el reposorio nccl-tests oficial. -
p3dn.24xlarge
$
/opt/amazon/openmpi/bin/mpirun \ -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/aws-ofi-nccl/lib:$LD_LIBRARY_PATH \ -x NCCL_DEBUG=INFO \ --hostfile my-hosts -n 8 -N 8 \ --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \ $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100 -
p4d.24xlarge
yp5.48xlarge
$
/opt/amazon/openmpi/bin/mpirun \ -x FI_EFA_USE_DEVICE_RDMA=1 \ -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/aws-ofi-nccl/lib:$LD_LIBRARY_PATH \ -x NCCL_DEBUG=INFO \ --hostfile my-hosts -n 8 -N 8 \ --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \ $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100
-
-
Puede confirmar que EFA está activo como proveedor subyacente de NCCL cuando se imprime el registro
NCCL_DEBUG
.ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Selected Provider is efa*
La siguiente información adicional se muestra cuando se utiliza una instancia
p4d.24xlarge
.ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Running on P4d platform, Setting NCCL_TOPO_FILE environment variable to /home/ec2-user/install/plugin/share/aws-ofi-nccl/xml/p4d-24xl-topo.xml
Paso 10: instalar las aplicaciones de machine learning
Instale la aplicación de machine learning en la instancia temporal. El procedimiento de instalación varía en función de la aplicación de machine learning específica. Para obtener más información sobre la instalación de software en la instancia de Linux, consulte Manage software on your Amazon Linux 2 instance.
nota
Consulte la documentación de su aplicación de machine learning para ver las instrucciones de instalación.
Paso 11: creación de una AMI habilitada para EFA y NCCL
Después de haber instalado los componentes de software requeridos, crea una AMI que puede reutilizar para iniciar las instancias habilitadas para EFA.
Para crear una AMI desde la instancia temporal
Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/
. -
En el panel de navegación, seleccione Instances (Instancias).
-
Seleccione la instancia temporal que creó y elija Acciones, Imagen, Crear imagen.
-
En Crear imagen, realice lo siguiente:
-
En Nombre de imagen, ingrese un nombre descriptivo para la AMI.
-
(Opcional) En Descripción de imagen, ingrese una breve descripción del propósito la AMI.
-
Elija Crear imagen.
-
-
En el panel de navegación, elija AMI.
-
Localice la AMI que creó en la lista. Espere a que el estado pase de
pending
aavailable
antes de continuar con el paso siguiente.
Paso 12: terminar la instancia temporal
En este punto, ya no necesita la instancia temporal que lanzó. Puede terminar la instancia para dejar de incurrir en cargos debido a esta.
Para terminar la instancia temporal
Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/
. -
En el panel de navegación, seleccione Instances (Instancias).
-
Seleccione la instancia temporal que creó y, a continuación, elija Acciones, Estado de instancia, Terminar instancia.
-
Cuando se le indique que confirme, elija Terminar.
Paso 13: inicialización de instancias habilitadas para EFA en un grupo con ubicación en clúster
Lance las instancias habilitadas para EFA y NCCL en un grupo de ubicación en clúster utilizando la AMI habilitada para EFA y el grupo de seguridad habilitado para EFA que creó anteriormente.
nota
-
No es un requisito absoluto lanzar las instancias habilitadas con un EFA a un grupo de colocación de clústeres. Sin embargo, le recomendamos ejecutar sus instancias habilitadas para EFA en un grupo con ubicación en clúster a medida que inicia las instancias en un grupo de baja latencia en una única zona de disponibilidad.
-
Para garantizar que la capacidad esté disponible a medida que escala las instancias del clúster, puede crear una reserva de capacidad para su grupo con ubicación en clúster. Para obtener más información, consulte Crear las reservas de capacidad en grupos con ubicación en clúster.
Paso 14: habilitar SSH sin contraseña
Para permitir que las aplicaciones se ejecuten en todas las instancias del clúster, debe habilitar el acceso mediante SSH sin contraseña desde el nodo principal hasta los nodos miembro. El nodo principal es la instancia desde la que se ejecutan las aplicaciones. Las instancias restantes del clúster son los nodos miembros.
Para habilitar SSH sin contraseña entre las instancias del clúster
-
Seleccione una instancia del clúster como nodo principal y conéctese a ella.
-
Desactive
strictHostKeyChecking
y habiliteForwardAgent
en el nodo principal. Abra~/.ssh/config
con su editor de texto preferido y agregue lo siguiente.Host * ForwardAgent yes Host * StrictHostKeyChecking no
-
Genere un par de claves de RSA.
$
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsaEl par de claves se crea en el directorio
$HOME/.ssh/
. -
Cambie los permisos de la clave privada en el nodo principal.
$
chmod 600 ~/.ssh/id_rsa chmod 600 ~/.ssh/config -
Abra
~/.ssh/id_rsa.pub
con su editor de texto preferido y copie la clave. -
Para cada nodo miembro del clúster, realice lo siguiente:
-
Conéctese a la instancia.
-
Abra
~/.ssh/authorized_keys
con su editor de texto preferido y agregue la clave pública que copió anteriormente.
-
-
Para probar que SSH sin contraseña funciona como se esperaba, conecte al nodo principal y ejecute el siguiente comando.
$
sshmember_node_private_ip
Debe conectarse al nodo miembro sin que se le pida una clave o una contraseña.