Las cargas de trabajo de GPU en varios nodos exigen un throughput y una latencia de red que TCP/IP no proporciona de forma confiable a gran escala. ACS (Alibaba Cloud Container Compute Service) ofrece una red de alto rendimiento compatible con RDMA que reduce la sobrecarga de comunicación en el entrenamiento distribuido y la inference. Agregue una sola etiqueta al pod para habilitar RDMA, configure las variables de entorno de NCCL según su modelo de GPU y el pod quedará listo.
Cómo funciona
TCP/IP introduce una sobrecarga que aumenta conforme crece la cantidad de GPU: copia de datos entre el espacio del kernel y el espacio de usuario, procesamiento complejo de la pila de protocolos, algoritmos de control de flujo y cambios frecuentes de contexto.
RDMA (Remote Direct Memory Access) evita estos costos mediante transferencias sin copia (zero-copy) y omisión del kernel. Como resultado, se obtiene menor latencia, mayor throughput y menor uso de CPU. Estos beneficios son más notables en las operaciones colectivas de GPU en varios nodos.
Para habilitar RDMA en un pod de ACS, agregue la etiqueta alibabacloud.com/hpn-type: "rdma" a la especificación del pod. ACS asocia automáticamente una tarjeta de interfaz de red (NIC) RDMA al contenedor. Configure las variables de entorno de NCCL según su modelo de GPU y el pod quedará listo para el entrenamiento distribuido o la inference.
Modelos de GPU que admiten RDMA
ACS admite varios GPU models. A continuación se muestran los modelos compatibles con RDMA y sus restricciones.
|
Modelo de GPU |
compute-class |
Restricción de RDMA |
Tipo de NIC RDMA |
|
GU8TF |
gpu |
Solo pods de 8 tarjetas |
Tipo 1 |
|
GU8TEF |
gpu |
Solo pods de 8 tarjetas |
Tipo 1 |
|
GX8SF |
gpu |
Solo pods de 8 tarjetas |
Tipo 1 |
|
P16EN |
gpu |
Solo pods de 16 tarjetas |
Tipo 2 |
|
gpu-hpn |
— |
Pods de 1, 2, 4, 8 y 16 tarjetas |
— |
El tipo de NIC RDMA determina qué variables de entorno de NCCL debe configurar.
Configuración de NCCL
Las GPU de ACS usan dos tipos de NIC RDMA, cada uno con ajustes distintos de NCCL.
NIC tipo 1 (GU8TF, GU8TEF, GX8SF)
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_HCA=mlx5
export NCCL_DEBUG=INFO
NIC tipo 2 (P16EN)
export NCCL_IB_DISABLE=1
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_HCA=
export NCCL_DEBUG=INFO
Variables de entorno
|
Variable |
Descripción |
|
|
Puerto que usa NCCL para establecer conexiones. En ACS, use |
|
|
Indica qué interfaces de Host Channel Adapter (HCA) se utilizan para la comunicación RDMA. Establezca |
|
|
Define si se deshabilitan las redes IB/RoCE para usar sockets IP en su lugar. El valor |
|
|
Controla el nivel de salida de los registros de depuración de NCCL. |
Para conocer otras variables de entorno de NCCL, consulte la documentación de NCCL.
Despliegue de un pod de GPU con RDMA
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Un clúster de ACS con un modelo de GPU que admita RDMA (consulte Modelos de GPU que admiten RDMA)
kubectlconfigurado para conectarse a su clúster
Despliegue del pod
-
Cree un archivo llamado
dep-demo-hpn-gpu.yamlcon el siguiente contenido. Este ejemplo utiliza GU8TF (NIC tipo 1). Ajustealibabacloud.com/gpu-model-seriesy las variables de NCCL según su modelo de GPU.apiVersion: apps/v1 kind: Deployment metadata: name: dep-demo-hpn-gpu labels: app: demo-hpn-gpu spec: replicas: 1 selector: matchLabels: app: demo-hpn-gpu template: metadata: labels: app: demo-hpn-gpu alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default # Specify the GPU model. Change this value as needed. alibabacloud.com/gpu-model-series: "GU8TF" alibabacloud.com/hpn-type: "rdma" spec: containers: - name: demo image: registry-cn-wulanchabu.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "1000h" env: - name: NCCL_SOCKET_IFNAME value: "eth0" - name: NCCL_IB_HCA value: "mlx5" - name: NCCL_DEBUG value: "INFO" resources: requests: cpu: 128 memory: 512Gi nvidia.com/gpu: 8 limits: cpu: 128 memory: 512Gi nvidia.com/gpu: 8 -
Aplique el manifiesto.
kubectl apply -f dep-demo-hpn-gpu.yaml -
Espere a que el pod alcance el estado
Running.kubectl get pod | grep dep-demo-hpn-gpuEl pod está listo cuando la salida muestra
1/1 Running:dep-demo-hpn-gpu-5d9xxxxxb6-xxxxx 1/1 Running 0 25m16s
Comprobar que RDMA está activo
Compruebe que la NIC RDMA se haya asociado al contenedor:
kubectl exec -it deploy/dep-demo-hpn-gpu -- ifconfig | grep hpn -A 8
La salida muestra la interfaz hpn0 con UP BROADCAST RUNNING MULTICAST, lo cual confirma que la NIC RDMA está activa:
hpn0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet6 addr: xxxx::x:xxxx:xxxx:xxx/xx Scope:Link
inet6 addr: xxxx:xxx:xxx:x:x:xxxx:x:xxx/xxx Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:xxxx Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:xx errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:x (892.0 B)
Si hpn0 no aparece, compruebe que alibabacloud.com/hpn-type: "rdma" esté presente en las etiquetas del pod. Compruebe también que el modelo de GPU admita RDMA con la cantidad de tarjetas solicitada.