Ayude a mejorar esta página
¿Quiere contribuir a esta guía del usuario? Desplácese hasta el final de esta página y seleccione Editar esta página en GitHub. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.
Formación en machine learning con Elastic Fabric Adapter
En este tema se describe cómo integrar Elastic Fabric Adapter (EFA) con los Pods implementados en el clúster de Amazon EKS. Elastic Fabric Adapter (EFA) es una interfaz de red para instancias de Amazon EC2 que le permite ejecutar aplicaciones que requieren altos niveles de comunicaciones entre nodos a escala en AWS. Su interfaz de hardware de bypass del sistema operativo diseñada a medida mejora el rendimiento de las comunicaciones entre instancias, lo que es fundamental para ajustar la escala de estas aplicaciones. Con EFA, las aplicaciones de High Performance Computing (HPC, informática de alto rendimiento) que utilizan la Message Passing Interface (MPI, interfaz de paso de mensajes) y las aplicaciones de Machine Learning (ML) que utilizan NVIDIA Collective Communications Library (NCCL, Biblioteca de comunicación colectiva de NVIDIA) pueden aumentar su escala a miles de CPU o GPU. Como resultado, obtiene el rendimiento de las aplicaciones de los clústeres HPC en las instalaciones con la elasticidad y flexibilidad bajo demanda de la nube de AWS. La integración de Elastic Fabric Adapter (EFA) con aplicaciones que se ejecutan en clústeres de Amazon EKS puede reducir el tiempo necesario para completar cargas de trabajo de formación distribuidas a gran escala sin tener que agregar instancias adicionales al clúster. Para obtener más información sobre EFA, consulte Elastic Fabric Adapter
El complemento de EFA descrito en este tema es totalmente compatible con las instancias de Amazon EC2 P4d
, que representan la tecnología de vanguardia en machine learning distribuido en la nube. Cada instancia p4d.24xlarge
tiene ocho GPU NVIDIA A100 y GPUDirectRDMA de 400 Gbps sobre EFA. GPUDirectRDMA le permite tener comunicación directa de GPU a GPU a través de nodos con bypass de CPU, lo que aumenta el ancho de banda de comunicación colectiva y reduce la latencia. La integración de Amazon EKS y EFA con instancias P4d
proporciona un método perfecto para aprovechar la instancia informática de Amazon EC2 de mayor rendimiento para la formación de machine learning distribuido.
Requisitos previos
-
Un clúster existente de Amazon EKS. Si no dispone de un clúster existente, utilice una de nuestras guías Introducción a Amazon EKS para crear uno. El clúster debe implementarse en una VPC que tenga al menos una subred privada con suficientes direcciones IP disponibles para implementar nodos en ella. La subred privada debe tener acceso a Internet saliente proporcionado por un dispositivo externo, como una puerta de enlace NAT.
Si planea usar
eksctl
para crear su grupo de nodos,eksctl
también puede crear un clúster por usted. -
La versión
2.12.3
o posterior, o bien, la versión1.27.160
o posterior de la AWS Command Line Interface (AWS CLI) instalada y configurada en su dispositivo o AWS CloudShell. Para comprobar su versión actual, utilice
. Los administradores de paquetes tales comoaws --version | cut -d / -f2 | cut -d ' ' -f1
yum
,apt-get
o Homebrew para macOS suelen estar atrasados varias versiones respecto de la versión de la AWS CLI más reciente. Para instalar la versión más reciente, consulte Instalar, actualizar y desinstalar la AWS CLI y Configuración rápida con aws configure en la Guía del usuario de AWS Command Line Interface. La versión de AWS CLI instalada en AWS CloudShell también puede estar atrasada varias versiones respecto de la versión más reciente. Para actualizarla, consulte Instalación de la AWS CLI en el directorio de inicio en la Guía del usuario de AWS CloudShell. -
La herramienta de línea de comandos de
kubectl
está instalada en su dispositivo o AWS CloudShell. La versión puede ser la misma o hasta una versión secundaria anterior o posterior a la versión de Kubernetes de su clúster. Por ejemplo, si la versión del clúster es1.29
, puede usar la versión1.28
,1.29
o1.30
dekubectl
con él. Para instalar o actualizarkubectl
, consulte Instalación o actualización del kubectl. -
Debe tener instalada la versión Amazon VPC CNI plugin for Kubernetes
1.7.10
o posterior antes de lanzar nodos de trabajo que admitan varios Elastic Fabric Adapters, como lap4d.24xlarge
. Para obtener más información sobre cómo actualizar Amazon VPC CNI plugin for Kubernetes, consulte Trabajar con el complemento Amazon VPC CNI plugin for Kubernetes de Amazon EKS.
Crear un grupo de nodos
El procedimiento siguiente ayuda a crear un grupo de nodos con un grupo de nodos con respaldo de p4d.24xlarge
con interfaces EFA y RDMA GPUDirect. También lo ayuda a ejecutar una prueba de ejemplo de NVIDIA Collective Communications Library (NCCL) para descubrir el rendimiento NCCL de varios nodos mediante el uso de EFA. El ejemplo se puede utilizar en una plantilla para la formación de aprendizaje profundo distribuida en Amazon EKS mediante EFA.
-
Determine qué tipos de instancias de Amazon EC2 compatibles con EFA están disponibles en la Región de AWS en la que desea implementar los nodos. Reemplace
por la Región de AWS en la que desea implementar su grupo de nodos.region-code
aws ec2 describe-instance-types --region
region-code
--filters Name=network-info.efa-supported,Values=true \ --query "InstanceTypes[*].[InstanceType]" --output textAl implementar nodos, el tipo de instancia que desea implementar debe estar disponible en la Región de AWS en el que está su clúster.
-
Determine en qué zonas de disponibilidad está disponible el tipo de instancia que desea implementar. En este tutorial, el tipo de instancia
p4d.24xlarge
se utiliza el tipo de instancia y se debe devolver en la salida de la Región de AWS que especificó en el paso anterior. Cuando implemente nodos en un clúster de producción, sustituya
con cualquier tipo de instancia que se devolvió en el paso anterior.p4d.24xlarge
aws ec2 describe-instance-type-offerings --region
region-code
--location-type availability-zone --filters Name=instance-type,Values=p4d.24xlarge
\ --query 'InstanceTypeOfferings[*].Location' --output textUn ejemplo de salida sería el siguiente.
us-west-2a
us-west-2c
us-west-2b
Tenga en cuenta las zonas de disponibilidad devueltas para su uso en pasos posteriores. Al implementar nodos en un clúster, la VPC debe tener subredes con direcciones IP disponibles en una de las zonas de disponibilidad que se muestran en el resultado.
-
Cree un grupo de nodos mediante
eksctl
o la AWS CLI y AWS CloudFormation. -
Implemente el complemento de EFA del dispositivo de Kubernetes.
El complemento de EFA del dispositivo de Kubernetes detecta y anuncia interfaces de EFA como recursos asignables a Kubernetes. Una aplicación puede consumir el tipo de recurso ampliado
vpc.amazonaws.com/efa
en una especificación de solicitud de Pod al igual que la CPU y la memoria. Para obtener más información, consulte Consumir recursos ampliadosen la documentación de Kubernetes. Una vez solicitado, el complemento asigna automáticamente una interfaz de EFA al Pod y la monta en él. El uso del complemento del dispositivo simplifica la configuración de EFA y no requiere que un Pod se ejecute en modo privilegiado. helm repo add eks https://aws.github.io/eks-chart helm install aws-efa-k8s-device-plugin --namespace kube-system eks/aws-efa-k8s-device-plugin
(Opcional) Implementar una aplicación de ejemplo compatible con EFA
Implementar el operador MPI de Kubeflow
Para las pruebas NCCL puede aplicar el operador MPI de Kubeflow. El operador Message Passing Interface (MPI, interfaz de paso de mensajes) facilita la ejecución de la formación distribuida de estilo AllReduce en Kubernetes. Para obtener más información, consulte Operador de MPI
kubectl apply -f https://raw.githubusercontent.com/kubeflow/mpi-operator/master/deploy/v2beta1/mpi-operator.yaml
Ejecutar la prueba de rendimiento NCCL de varios nodos para verificar GPUDirectRDMA/EFA
Para verificar el rendimiento de NCCL con GPUDirectRDMA sobre EFA, ejecute la prueba de rendimiento de NCCL estándar. Para obtener más información, consulte el repositorio oficial Pruebas de NCCL11.2
y la última versión de EFA.
Como alternativa, puede descargar una imagen de Docker de AWS disponible desde un repositorio de Amazon ECR
importante
Una consideración importante que se requiere para adoptar EFA con Kubernetes es configurar y administrar Huge Pages como un recurso en el clúster. Para obtener más información, consulte Administración de Huge Pages
Complete los pasos que se indican a continuación para ejecutar una prueba de rendimiento de NCCL de dos nodos. En el trabajo de prueba NCCL de ejemplo, cada trabajo solicita ocho GPU, 5210 MiB de HugePages de 2 Mi, cuatro EFA y 8000 MiB de memoria, lo que significa que cada trabajo consume todos los recursos de una instancia p4d.24xlarge
.
-
Cree el trabajo de pruebas NCCL.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/aws-efa-eks/main/examples/simple/nccl-efa-tests.yaml
Un ejemplo de salida sería el siguiente.
mpijob.kubeflow.org/nccl-tests-efa creado
-
Consulte su ejecución Pods.
kubectl get pods
Un ejemplo de salida sería el siguiente.
NAME READY STATUS RESTARTS AGE nccl-tests-efa-launcher-
nbql9
0/1 Init:0/1 0 2m49s nccl-tests-efa-worker-0 1/1 Running 0 2m49s nccl-tests-efa-worker-1 1/1 Running 0 2m49sEl operador MPI crea un Pod de lanzamiento y dos Pods de trabajo (uno en cada nodo).
-
Consulte el registro del Pod de
efa-launcher
. Sustituya
con el valor de su salida.wzr8j
kubectl logs -f nccl-tests-efa-launcher-
nbql9
Para obtener más ejemplos, consulte Muestras de EFA