Container Service for Kubernetes (ACK) admite la programación y operación de GPU. Su modo de uso predeterminado se alinea con el patrón de la comunidad upstream de Kubernetes. Este tema explica cómo desplegar una carga de trabajo de TensorFlow de ejemplo para validar la programación de GPU.
Requisitos previos
Asegúrese de contar con lo siguiente:
Un clúster de ACK con como mínimo un nodo GPU
kubectl configurado para conectarse al clúster
Acceso a la consola de ACK
Evite omitir las solicitudes estándar de recursos de GPU
En los nodos GPU administrados por ACK, solicite recursos de GPU únicamente mediante el mecanismo estándar de recursos extendidos de Kubernetes (nvidia.com/gpu en resources.limits). Las siguientes acciones omiten este mecanismo y representan riesgos de seguridad:
Ejecutar aplicaciones GPU directamente en los nodos
Usar
docker,podmanonerdctlpara crear contenedores o solicitar recursos de GPU (por ejemplo,docker run --gpus allodocker run -e NVIDIA_VISIBLE_DEVICES=all)Agregar
NVIDIA_VISIBLE_DEVICES=alloNVIDIA_VISIBLE_DEVICES=<GPU ID>a la secciónenvdel archivo YAML de un podUsar la variable de entorno
NVIDIA_VISIBLE_DEVICESpara solicitar recursos de GPU para un podEstablecer
NVIDIA_VISIBLE_DEVICEScomoallde forma predeterminada en una imagen de contenedor cuando no se define en el YAML del podConfigurar
privileged: trueen elsecurityContextdel pod y ejecutar un programa de GPU
Por qué es importante: Las solicitudes de GPU no estándar son invisibles para el seguimiento de recursos del programador. Esta discrepancia puede provocar que el programador asigne más GPU de las disponibles en un nodo, lo que genera que varios pods compitan por la misma tarjeta GPU (por ejemplo, compitiendo por memoria GPU) y causa fallos en la carga de trabajo. Estos métodos también pueden desencadenar errores conocidos reportados por la comunidad de NVIDIA.
Compruebe la disponibilidad de GPU
Antes de desplegar una carga de trabajo, confirme que su nodo GPU expone la capacidad de GPU al programador de Kubernetes.
-
Liste los nodos del clúster:
kubectl get nodes -
Describa un nodo GPU para comprobar su capacidad:
kubectl describe node <gpu-node-name>En la sección Capacity,
nvidia.com/gpudebe mostrar un valor distinto de cero:Capacity: nvidia.com/gpu: 1Si
nvidia.com/gpuno aparece o muestra0, es posible que el plugin de dispositivo NVIDIA no se esté ejecutando en el nodo. Compruebe el despliegue del DaemonSet del plugin, los controladores de GPU y la configuración del nodo antes de continuar.
Despliegue una aplicación GPU
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el clúster destino. En el panel de navegación izquierdo, elija Workloads > Deployments.
-
En la página Deployments, haga clic en Create from YAML y pegue este manifiesto:
apiVersion: v1 kind: Pod metadata: name: tensorflow-mnist namespace: default spec: containers: - image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5 name: tensorflow-mnist command: - python - tensorflow-sample-code/tfjob/docker/mnist/main.py - --max_steps=100000 - --data_dir=tensorflow-sample-code/data resources: limits: nvidia.com/gpu: 1 # Request one GPU card for this container. workingDir: /root restartPolicy: AlwaysLos recursos extendidos de GPU requieren únicamente
limits, norequests. Kubernetes no permiterequestssin un valor coincidente enlimitspara recursos extendidos. El programador utiliza el valor delimitscomo la solicitud efectiva. En el panel de navegación izquierdo, elija Workloads > Pods. Busque el pod y haga clic en él.
-
Haga clic en la pestaña Logs. La descarga de la imagen y el inicio del pod pueden tardar unos minutos. Una vez en ejecución, la salida del registro confirma que la programación de GPU funciona correctamente.

Siguientes pasos
Para dirigir cargas a tipos específicos de GPU en un clúster heterogéneo, utilice etiquetas y selectores de nodo. Etiquete los nodos GPU según el tipo de acelerador (por ejemplo,
kubectl label nodes <node-name> accelerator=<gpu-model>) y luego agregue unnodeSelectora la especificación de su pod.Para opciones avanzadas de programación de GPU, como el uso compartido y el aislamiento de GPU, consulte la documentación de programación de GPU de ACK.