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. Puede usar NCCL junto con EFA, Libfabric y MPI para admitir diversas cargas de trabajo de machine learning. Para obtener más información, consulte el sitio web de NCCL.
Requisitos
-
Entre los tipos de instancias compatibles se incluyen las instancias de las series P y G compatibles con EFA. Para obtener más información, consulte instancia de computación acelerada de Amazon EC2.
-
AMI base compatibles: Amazon Linux 2023, Ubuntu 26.04, Ubuntu 24.04, Ubuntu 22.04, Debian 12 y RHEL 10.
-
EFA solo es compatible con 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.
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.
-
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.
-
Las reglas de entrada y salida con referencia a sí mismas (que permiten todo el tráfico hacia y desde el propio grupo de seguridad) son obligatorias para que EFA funcione. Sin estas reglas, se bloqueará el tráfico de EFA entre las instancias y fallará la comunicación de NCCL.
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 Creación de 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.
-
En la sección Tipo de instancia, seleccione un tipo de instancia compatible.
-
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.
Debe seleccionar una subred. 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, para cada interfaz de red adicional que necesite, elija Agregar interfaz de red; en Índice de tarjeta de red, seleccione el siguiente índice que no esté en uso 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.
Debe aprovisionar entre 10 y 20 GiB adicionales de almacenamiento para el kit de herramientas CUDA de NVIDIA. Si no aprovisiona suficiente almacenamiento, se producirá 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: Instale los controladores de GPU de NVIDIA, el kit de herramientas CUDA de NVIDIA y cuDNN
- Amazon Linux 2023
-
Para instalar los controladores de GPU de NVIDIA, el kit de herramientas CUDA de NVIDIA y cuDNN
-
Para asegurarse de que todos los paquetes de software están actualizados, realice una actualización rápida del software en la instancia.
$ sudo dnf upgrade -y && sudo reboot
Una vez que se haya reiniciado, vuelva a conectarse a la instancia.
-
Instale las utilidades necesarias para la instalación de los controladores de GPU de NVIDIA y el kit de herramientas CUDA de NVIDIA.
$ sudo dnf groupinstall 'Development Tools' -y && sudo dnf install -y dkms kernel-devel-$(uname -r) kernel-headers-$(uname -r)
-
Desactive los controladores de código abierto de nouveau.
-
Instale las utilidades y el paquete de encabezados del kernel necesarios para la versión del kernel que está ejecutando actualmente.
$ sudo yum install -y wget kernel-devel-$(uname -r) kernel-headers-$(uname -r)
-
Agregue nouveau al archivo de lista de denegación /etc/modprobe.d/blacklist.conf.
$ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
EOF
-
Añada GRUB_CMDLINE_LINUX="rdblacklist=nouveau" al archivo grub y vuelva a generar la configuración de GRUB.
$ echo 'GRUB_CMDLINE_LINUX="rdblacklist=nouveau"' | sudo tee -a /etc/default/grub \
&& sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
Reinicie la instancia y vuelva a conectarse a ella.
-
Agregue el repositorio de red de CUDA.
$ sudo yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
-
Descargue e instale el controlador de GPU de NVIDIA.
$ wget https://us.download.nvidia.com/tesla/580.167.08/NVIDIA-Linux-x86_64-580.167.08.run \
&& sudo sh NVIDIA-Linux-x86_64-580.167.08.run -m kernel-open --no-drm --disable-nouveau --dkms --silent
-
Instale el kit de herramientas CUDA de NVIDIA y cuDNN.
$ sudo dnf install -y cuda-toolkit-13-0 libcudnn9-cuda-13 libcudnn9-devel-cuda-13
-
Reinicie la instancia y vuelva a conectarse a ella.
-
(Instancias con NVSwitch, como las instancias multi-GPU de la serie P) Instale e inicie NVIDIA Fabric Manager. Las instancias de la serie G no utilizan NVSwitch y no requieren Fabric Manager.
$ sudo dnf install -y https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/nvidia-fabricmanager-580.167.08-1.el8.x86_64.rpm \
&& sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
-
Asegúrese de que las rutas CUDA se establecen cada vez que se inicia la instancia.
-
Para intérpretes de comandos bash, agregue las siguientes instrucciones a /home/username/.bashrc y /home/username/.bash_profile.
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
-
Para intérpretes de comandos tcsh, agregue las siguientes instrucciones a /home/username/.cshrc.
setenv PATH=/usr/local/cuda/bin:$PATH
setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
-
Para confirmar que los controladores de GPU de NVIDIA funcionan correctamente, ejecute el siguiente comando.
$ nvidia-smi -q | head
El comando debería devolver información sobre las GPU de NVIDIA, los controladores de GPU de NVIDIA y el kit de herramientas CUDA de NVIDIA.
- Ubuntu 26.04, Ubuntu 24.04, and Ubuntu 22.04
-
Para instalar los controladores de GPU de NVIDIA, el kit de herramientas CUDA de NVIDIA y cuDNN
-
Para asegurarse de que todos los paquetes de software están actualizados, realice una actualización rápida del software en la instancia.
$ sudo apt-get update && sudo apt-get upgrade -y
-
Instale las utilidades necesarias para la instalación de los controladores de GPU de NVIDIA y el kit de herramientas CUDA de NVIDIA.
$ sudo apt-get update && sudo apt-get install build-essential -y
-
Para utilizar el controlador de GPU de NVIDIA, primero debe deshabilitar los controladores de código abierto nouveau.
-
Instale las utilidades y el paquete de encabezados del kernel necesarios para la versión del kernel que está ejecutando actualmente.
$ sudo apt-get install -y gcc make linux-headers-$(uname -r)
-
Agregue nouveau al archivo de lista de denegación /etc/modprobe.d/blacklist.conf.
$ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
EOF
-
Abra /etc/default/grub con su editor de texto preferido y agregue lo siguiente.
GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
-
Vuelva a generar la configuración de GRUB.
$ sudo update-grub
-
Reinicie la instancia y vuelva a conectarse a ella.
-
Agregue el repositorio de CUDA e instale los controladores de GPU de NVIDIA, el kit de herramientas CUDA de NVIDIA y cuDNN.
-
Ubuntu 26.04
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2604/x86_64/cuda-keyring_1.1-1_all.deb \
&& sudo dpkg -i cuda-keyring_1.1-1_all.deb \
&& sudo add-apt-repository -y 'deb [trusted=yes] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2604/x86_64 /' \
&& sudo apt-get update
$ sudo apt-get install -y nvidia-open cuda-toolkit-13-3 libcudnn9-cuda-13 libcudnn9-dev-cuda-13
-
Ubuntu 24.04
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb \
&& sudo dpkg -i cuda-keyring_1.1-1_all.deb \
&& sudo add-apt-repository -y 'deb [trusted=yes] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64 /' \
&& sudo apt-get update
$ sudo apt-get install -y nvidia-open-580 cuda-toolkit-13-0 libcudnn9-cuda-13 libcudnn9-dev-cuda-13
-
Ubuntu 22.04
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb \
&& sudo dpkg -i cuda-keyring_1.1-1_all.deb \
&& sudo DEBIAN_FRONTEND=noninteractive add-apt-repository -y "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /" \
&& sudo apt-get update
$ sudo apt-get install -y nvidia-open-580 cuda-toolkit-13-0 libcudnn9-cuda-13 libcudnn9-dev-cuda-13
-
Reinicie la instancia y vuelva a conectarse a ella.
-
(Instancias con NVSwitch, como las instancias multi-GPU de la serie P) Instale e inicie NVIDIA Fabric Manager. Las instancias de la serie G no utilizan NVSwitch y no requieren Fabric Manager.
-
Ubuntu 26.04
$ sudo apt-get install -y nvidia-fabricmanager \
&& sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
-
Ubuntu 24.04 y Ubuntu 22.04
$ sudo apt-get install -y nvidia-fabricmanager-580 \
&& sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
-
Asegúrese de que las rutas CUDA se establecen cada vez que se inicia la instancia.
-
Para intérpretes de comandos bash, agregue las siguientes instrucciones a /home/username/.bashrc y /home/username/.bash_profile.
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
-
Para intérpretes de comandos tcsh, agregue las siguientes instrucciones a /home/username/.cshrc.
setenv PATH=/usr/local/cuda/bin:$PATH
setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
-
Para confirmar que los controladores de GPU de NVIDIA funcionan correctamente, ejecute el siguiente comando.
$ nvidia-smi -q | head
El comando debería devolver información sobre las GPU de NVIDIA, los controladores de GPU de NVIDIA y el kit de herramientas CUDA de NVIDIA.
- Debian 12
-
Para instalar los controladores de GPU de NVIDIA, el kit de herramientas CUDA de NVIDIA y cuDNN
-
Instale las utilidades necesarias para la instalación de los controladores de GPU de NVIDIA y el kit de herramientas CUDA de NVIDIA.
$ sudo apt-get install -y build-essential gcc make linux-headers-$(uname -r) dkms
-
Desactive los controladores de código abierto de nouveau.
$ sudo sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="rdblacklist=nouveau"/' /etc/default/grub && sudo update-grub
-
Reinicie la instancia y vuelva a conectarse a ella.
-
Agregue el repositorio de CUDA e instale los controladores de GPU de NVIDIA, el kit de herramientas CUDA de NVIDIA y cuDNN.
$ wget https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/cuda-keyring_1.1-1_all.deb \
&& sudo dpkg -i cuda-keyring_1.1-1_all.deb \
&& sudo DEBIAN_FRONTEND=noninteractive add-apt-repository -y "deb https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/ /" \
&& sudo apt-get update
$ sudo apt-get install -y nvidia-open cuda-toolkit-13-0 libcudnn9-cuda-13 libcudnn9-dev-cuda-13
-
Configure el módulo UVM del kernel de NVIDIA.
$ uvm_ko=$(find /lib/modules/$(uname -r) -name 'nvidia*uvm*.ko*' 2>/dev/null | head -1) && if [ -n "$uvm_ko" ]; then real=$(basename "$uvm_ko"); real=${real%.ko*}; echo "$real" | sudo tee /etc/modules-load.d/nvidia-uvm.conf; if [ "$real" != "nvidia-uvm" ]; then echo "alias nvidia-uvm $real" | sudo tee /etc/modprobe.d/nvidia-uvm.conf; fi; sudo modprobe "$real" || true; fi && sudo modprobe nvidia
-
Reinicie la instancia y vuelva a conectarse a ella.
-
(Instancias con NVSwitch, como las instancias multi-GPU de la serie P) Instale e inicie NVIDIA Fabric Manager. Las instancias de la serie G no utilizan NVSwitch y no requieren Fabric Manager.
-
Determine la versión del módulo del kernel de NVIDIA.
$ cat /proc/driver/nvidia/version | grep "Kernel Module"
A continuación, se muestra un ejemplo del resultado.
NVRM version: NVIDIA UNIX x86_64 Kernel Module 610.43.02 ...
En el ejemplo anterior, se instaló la versión principal 610 del módulo del kernel.
-
Instale NVIDIA Fabric Manager con la versión principal identificada en el paso anterior.
$ sudo apt-get install -y nvidia-fabricmanager-major_version_number \
&& sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
-
Asegúrese de que las rutas CUDA se establecen cada vez que se inicia la instancia.
-
Para intérpretes de comandos bash, agregue las siguientes instrucciones a /home/username/.bashrc y /home/username/.bash_profile.
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
-
Para intérpretes de comandos tcsh, agregue las siguientes instrucciones a /home/username/.cshrc.
setenv PATH=/usr/local/cuda/bin:$PATH
setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
-
Para confirmar que los controladores de GPU de NVIDIA funcionan correctamente, ejecute el siguiente comando.
$ nvidia-smi -q | head
El comando debería devolver información sobre las GPU de NVIDIA, los controladores de GPU de NVIDIA y el kit de herramientas CUDA de NVIDIA.
- RHEL 10
-
Para instalar los controladores de GPU de NVIDIA, el kit de herramientas CUDA de NVIDIA y cuDNN
-
Para asegurarse de que todos los paquetes de software están actualizados, realice una actualización rápida del software en la instancia.
$ sudo dnf upgrade -y && sudo reboot
Una vez que se haya reiniciado, vuelva a conectarse a la instancia.
-
Instale las utilidades necesarias para la instalación de los controladores de GPU de NVIDIA y el kit de herramientas CUDA de NVIDIA.
$ sudo dnf groupinstall 'Development Tools' -y \
&& sudo dnf install -y dkms kernel-devel-$(uname -r) \
&& sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
-
Desactive los controladores de código abierto de nouveau.
-
Agregue nouveau al archivo de lista de denegación /etc/modprobe.d/blacklist.conf.
$ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
EOF
-
Añada GRUB_CMDLINE_LINUX="rdblacklist=nouveau" al archivo grub y vuelva a generar la configuración de GRUB.
$ echo 'GRUB_CMDLINE_LINUX="rdblacklist=nouveau"' | sudo tee -a /etc/default/grub \
&& sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
Reinicie la instancia y vuelva a conectarse a ella.
-
Agregue el repositorio de CUDA e instale los controladores de GPU de NVIDIA, el kit de herramientas CUDA de NVIDIA y cuDNN.
$ sudo yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel10/x86_64/cuda-rhel10.repo \
&& sudo dnf install -y nvidia-open-580.167.08 cuda-toolkit-13-0 libcudnn9-cuda-13 libcudnn9-devel-cuda-13
-
Reinicie la instancia y vuelva a conectarse a ella.
-
(Instancias con NVSwitch, como las instancias multi-GPU de la serie P) Instale e inicie NVIDIA Fabric Manager. Las instancias de la serie G no utilizan NVSwitch y no requieren Fabric Manager.
$ sudo dnf install -y https://developer.download.nvidia.com/compute/cuda/repos/rhel10/x86_64/nvidia-fabricmanager-580.167.08-1.x86_64.rpm \
&& sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
-
Asegúrese de que las rutas CUDA se establecen cada vez que se inicia la instancia.
-
Para intérpretes de comandos bash, agregue las siguientes instrucciones a /home/username/.bashrc y /home/username/.bash_profile.
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
-
Para intérpretes de comandos tcsh, agregue las siguientes instrucciones a /home/username/.cshrc.
setenv PATH=/usr/local/cuda/bin:$PATH
setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
-
Para confirmar que los controladores de GPU de NVIDIA funcionan correctamente, ejecute el siguiente comando.
$ nvidia-smi -q | head
El comando debería devolver información sobre las GPU de NVIDIA, los controladores de GPU de NVIDIA y el kit de herramientas CUDA de NVIDIA.
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.
- Amazon Linux 2023
-
Para instalar GDRCopy
-
Instale las dependencias requeridas.
$ sudo yum -y install dkms rpm-build make check check-devel
-
Descargue y extraiga el paquete de GDRCopy.
$ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.5.2.tar.gz \
&& tar xf v2.5.2.tar.gz && cd gdrcopy-2.5.2/packages
-
Compile los paquetes RPM de GDRCopy.
$ CUDA=/usr/local/cuda ./build-rpm-packages.sh
-
Instale los paquetes RPM de GDRCopy.
$ sudo rpm -Uvh gdrcopy-kmod-2.5.2*dkms*.rpm \
&& sudo rpm -Uvh gdrcopy-2.5.2*.rpm \
&& sudo rpm -Uvh gdrcopy-devel-2.5.2*.rpm
- Ubuntu 26.04, Ubuntu 24.04, and Ubuntu 22.04
-
Para instalar GDRCopy
-
Instale las dependencias requeridas.
$ sudo apt-get install -y build-essential devscripts debhelper fakeroot pkg-config dkms
En Ubuntu 22.04, instale también las siguientes dependencias adicionales:
$ sudo apt-get install -y check libsubunit-dev
-
Descargue y extraiga el paquete de GDRCopy y compile los paquetes.
$ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.5.2.tar.gz \
&& tar xf v2.5.2.tar.gz \
&& cd gdrcopy-2.5.2/packages \
&& CUDA=/usr/local/cuda ./build-deb-packages.sh
-
Instale los paquetes DEB de GDRCopy.
$ sudo dpkg -i gdrdrv-dkms_2.5.2-1_amd64.*.deb \
&& sudo dpkg -i libgdrapi_2.5.2-1_amd64.*.deb \
&& sudo dpkg -i gdrcopy-tests_2.5.2-1_amd64.*.deb \
&& sudo dpkg -i gdrcopy_2.5.2-1_amd64.*.deb
- Debian 12
-
Para instalar GDRCopy
-
Instale las dependencias requeridas.
$ sudo apt-get install -y build-essential devscripts debhelper fakeroot pkg-config dkms
-
Descargue y extraiga el paquete de GDRCopy.
$ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.5.2.tar.gz \
&& tar xf v2.5.2.tar.gz && cd gdrcopy-2.5.2/packages
-
Aplique los parches de la versión de Debian y compile los paquetes.
$ sed -i 's/(2.5.2)/(2.5.2-1)/g' debian-lib/changelog \
&& sed -i 's/(2.5.2)/(2.5.2-1)/g' debian-tests/changelog \
&& sed -i 's/(2.5.2)/(2.5.2-1)/g' dkms/debian/changelog \
&& sed -i 's/(2.5.2)/(2.5.2-1)/g' debian-meta/changelog \
&& sed -i 's/FULL_VERSION="${VERSION}"/FULL_VERSION="${VERSION}-${DEBIAN_VERSION}"/g' build-deb-packages.sh
$ CUDA=/usr/local/cuda ./build-deb-packages.sh
-
Instale los paquetes DEB de GDRCopy.
$ sudo dpkg -i gdrdrv-dkms_2.5.2*.deb \
&& sudo dpkg -i libgdrapi_2.5.2*.deb \
&& sudo dpkg -i gdrcopy-tests_2.5.2*.deb \
&& sudo dpkg -i gdrcopy_2.5.2*.deb
- RHEL 10
-
Para instalar GDRCopy
-
Instale las dependencias requeridas.
$ sudo yum -y install dkms rpm-build make check check-devel
-
Descargue y extraiga el paquete de GDRCopy.
$ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.5.2.tar.gz \
&& tar xf v2.5.2.tar.gz && cd gdrcopy-2.5.2/packages
-
Compile los paquetes RPM de GDRCopy.
$ CUDA=/usr/local/cuda ./build-rpm-packages.sh
-
Instale los paquetes RPM de GDRCopy.
$ sudo rpm -Uvh gdrcopy-kmod-2.5.2*dkms*.rpm \
&& sudo rpm -Uvh gdrcopy-2.5.2*.rpm \
&& sudo rpm -Uvh gdrcopy-devel-2.5.2*.rpm
Paso 5: instalación del software EFA
Instale el kernel habilitado para EFA, los controladores de EFA, Libfabric, el complemento aws-ofi-nccl y la pila Open MPI necesarios para admitir EFA en la instancia.
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 del software se proporcionan 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.50.0.tar.gz
Tambié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.
-
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.key
El 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 --fingerprint key_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 Soporte.
-
Descargue el archivo de firma y verifique la firma del archivo tarball de EFA.
$ wget https://efa-installer.amazonaws.com/aws-efa-installer-1.50.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.50.0.tar.gz.sig
A 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 Soporte.
-
Extraiga los archivos desde el archivo .tar.gz comprimido y acceda al directorio extraído.
$ tar -xf aws-efa-installer-1.50.0.tar.gz && cd aws-efa-installer
(Opcional) Verifique las firmas de los paquetes individuales durante la instalación.
A partir del instalador EFA 1.48.0, el instalador incluye paquetes RPM y DEB individuales con firma GPG. Para verificar la autenticidad e integridad de cada paquete individual durante la instalación, use el indicador --check-signatures. Cuando se activa este indicador, el instalador verifica primero todas las firmas de los paquetes y solo continúa con la instalación si todos los paquetes pasan la verificación. Si algún paquete no pasa la verificación, el instalador se cierra inmediatamente sin instalar nada.
-
Descargue la clave GPG pública.
$ wget https://efa-installer.amazonaws.com/aws-efa-installer.key
-
Exporte la ruta clave. A continuación, en el siguiente paso, añada --check-signatures al comando de instalación y use sudo -E en lugar de sudo para conservar la variable de entorno.
$ export EFA_INSTALLER_KEY=$(pwd)/aws-efa-installer.key
En los sistemas basados en RPM (Amazon Linux 2023, RHEL, Rocky Linux y SUSE), el instalador verifica cada paquete RPM mediante rpm --checksig. En los sistemas basados en DEB (Ubuntu, Debian), el instalador usa la verificación de firmas GPG para verificar cada DEB. Si no se puede verificar alguno de los paquetes, la instalación se interrumpe inmediatamente.
La etiqueta --check-signatures es opcional. Sin el indicador, el instalador no realiza una verificación de las firmas individuales.
-
Ejecute el script de instalación de software de EFA.
Si completó el paso opcional anterior para configurar la verificación de la firma del paquete, añada --check-signatures al comando de instalación y use sudo -E en lugar de sudo. Por ejemplo: sudo -E ./efa_installer.sh -y --mpi=openmpi5 --check-signatures.
A partir de la versión 1.30.0 de EFA, tanto Open MPI 4.1 como Open MPI 5 se instalan de forma predeterminada. A menos que necesite Open MPI 4.1, instale únicamente Open MPI 5. El siguiente comando solo instala Open MPI 5. Si desea instalar Open MPI 4.1 y Open MPI 5, quite --mpi=openmpi5.
$ sudo ./efa_installer.sh -y --mpi=openmpi5
Libfabric está instalado en el directorio /opt/amazon/efa. El complemento aws-ofi-nccl está instalado en el directorio /opt/amazon/ofi-nccl. 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 el software de EFA se haya instalado correctamente.
$ fi_info -p efa -t FI_EP_RDM
El comando debe devolver información acerca de las interfaces de EFA de Libfabric.
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 -b v2.30.4-1 && 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-13
Paso 7: 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 2023
$ export LD_LIBRARY_PATH=/opt/amazon/efa/lib64:$LD_LIBRARY_PATH
-
Ubuntu y Debian
$ export LD_LIBRARY_PATH=/opt/amazon/efa/lib:$LD_LIBRARY_PATH
-
RHEL 10
$ export LD_LIBRARY_PATH=/opt/amazon/efa/lib64:$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-13
Paso 8: Probar 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.
- IMDSv2
-
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/local-ipv4 >> my-hosts
- IMDSv1
-
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-ipv4 >> my-hosts
-
Ejecute la prueba de NCCL. El siguiente comando supone que dispone de 8 GPU por instancia. Ajuste los valores -n y -N en función del tipo de instancia.
$ /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/amazon/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 9: 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 cómo instalar software en la instancia de Linux, consulte Administrar las actualizaciones del sistema operativo en la Guía del usuario de Amazon Linux 2023.
Consulte la documentación de su aplicación de machine learning para ver las instrucciones de instalación.
Paso 10: Crear una AMI habilitada para EFA y NCCL
Después de haber instalado los componentes de software requeridos, crea una AMI que puede reutilizar para lanzar 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.
-
Busque en la lista la AMI que creó. Espere a que el estado pase de pending a available antes de continuar con el paso siguiente.
Paso 11: Terminar la instancia temporal
En este punto, ya no necesita la instancia temporal que lanzó. Puede finalizar la instancia para dejar de incurrir en cargos debido a esta.
Para finalizar 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, Finalizar instancia.
-
Cuando se le indique que confirme, elija Terminate (Rescindir).
Paso 12: Lanzar instancias habilitadas para EFA en un grupo de colocación de clústeres
Lance las instancias habilitadas para EFA y NCCL en un grupo con ubicación en clúster utilizando la AMI habilitada para EFA y el grupo de seguridad habilitado para EFA que creó anteriormente.
-
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 Utilización de reservas de capacidad con grupos con ubicación.
- New console
-
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, elija Mi AMI y, a continuación, seleccione la AMI que creó en el paso anterior.
-
En la sección Tipo de instancia, seleccione p3dn.24xlarge o p4d.24xlarge.
-
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 o p5.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.
-
(Opcional) En la sección Storage (Almacenamiento), configure los volúmenes según sea necesario.
-
En la sección Detalles avanzados, para Nombre del grupo de ubicación, seleccione el grupo con ubicación en clúster en el que se iniciará la instancia. Si necesita crear un nuevo grupo con ubicación en clúster, elija Create new placement group (Crear nuevo grupo de ubicación).
-
En el panel Summary (Resumen) que se encuentra a la derecha, en Number of instances (Cantidad de instancias), ingrese la cantidad de instancias habilitadas para EFA que desea lanzar y, a continuación, elija Launch instance (Lanzar instancia).
- Old console
-
Para iniciar las instancias habilitadas para EFA y NCCL en un grupo con ubicación en clúster
Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.
-
Elija Iniciar instancia.
-
En la página Elegir una AMI, elija Mi AMI, encuentre la AMI que creó anteriormente y, a continuación, elija Seleccionar.
-
En la página Elegir un tipo de instancia, seleccione p3dn.24xlarge y, a continuación, elija Siguiente: Configurar detalles de instancia.
-
En la página Configurar detalles de instancia, haga lo siguiente:
-
En Número de instancias, ingrese el número de instancias habilitadas para EFA y NCCL que desea iniciar.
-
En Red y Subred, seleccione la VPC y la subred en la que iniciar las instancias.
-
En Grupo de ubicación, seleccione Añadir instancia a grupo de ubicación.
-
En Nombre de grupo de ubicación, seleccione Agregar a un nuevo grupo de ubicación y, a continuación, ingrese un nombre descriptivo para el grupo de ubicación. Luego, en Estrategia de grupo de ubicación, seleccione clúster.
-
En EFA, elija Habilitar.
-
En la sección Interfaces de red, para el dispositivo eth0, elija Nueva interfaz de red. Como opción, puede especificar una dirección IPv4 principal y una o varias direcciones IPv4 secundarias. Si está iniciando la instancia en una subred que tiene un bloque de CIDR de IPv6 asociado, como opción puede especificar una dirección IPv6 principal y una o varias direcciones IPv6 secundarias.
-
Elija Siguiente: Añadir almacenamiento.
-
En la página Agregar almacenamiento, especifique los volúmenes que desea adjuntar a las instancias además de los volúmenes especificados por la AMI (como el volumen de dispositivo raíz). A continuación, elija Siguiente: Agregar etiquetas.
-
En la página Añadir etiquetas, especifique etiquetas para las instancias, por ejemplo, un nombre fácil de recordar, y, a continuación, elija Siguiente: Configurar grupo de seguridad.
-
En la página Configurar grupo de seguridad, en Asignar un grupo de seguridad, seleccione Seleccionar un grupo de seguridad existente y, a continuación, seleccione el grupo de seguridad que creó anteriormente.
-
Elija Review and Launch (Revisar y lanzar).
-
En la página Review Instance Launch (Revisar lanzamiento de instancia), revise la configuración y, a continuación, elija Launch (Lanzar) para elegir un par de claves y lanzar las instancias.
Paso 13: Habilitar SSH sin contraseña
El usuario SSH predeterminado varía según el sistema operativo: ubuntu en Ubuntu, admin en Debian y ec2-user en Amazon Linux y RHEL.
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 habilite ForwardAgent 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_rsa
El 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.
$ ssh member_node_private_ip
Debe conectarse al nodo miembro sin que se le pida una clave o una contraseña.