Alibaba Cloud Container Compute Service (ACS) proporciona capacidad de cómputo serverless para contenedores. Cuando utiliza recursos de GPU, ACS le permite declarar los modelos de GPU y las versiones de controladores compatibles en los pods. Esta funcionalidad reduce significativamente los costos de gestión de infraestructura y de operación y mantenimiento. En este tema se describe cómo especificar un modelo de GPU y una versión de controlador al crear un pod.
Modelos de GPU
ACS es compatible con varios modelos de GPU. Puede utilizarlos con capacity reservations o solicitarlos bajo demanda cuando cree un pod. El método que utilice depende de la clase de cómputo.
-
GPU de alto rendimiento para redes
Solo puede solicitar reservas de nodos. Después de comprar las reservas, debe asociar cada una con su clúster. Cada reserva se ejecuta como un nodo virtual independiente dentro del clúster. Para obtener más información, consulte GPU-HPN Capacity Reservation.
-
Instancias de GPU
Puede usar los recursos de GPU bajo demanda o configurar reservas de capacidad. Una vez creado el pod, ACS descuenta automáticamente los recursos de GPU de su capacity reservation.
Para consultar la lista de modelos de GPU compatibles, envíe un ticket.
Especifique un modelo de GPU para un pod
Para GPU-HPN, solo puede solicitar reservas de nodos. Cada reserva se ejecuta como un nodo virtual en el clúster. La etiqueta del nodo virtual incluye el modelo de GPU. Utilice node affinity scheduling para programar los pods en ese nodo virtual. Para obtener más información, consulte Schedule pods to GPU-HPN virtual nodes with attribute labels.
En los pods acelerados por GPU, especifique explícitamente el modelo de GPU en los campos labels y nodeSelector del pod.
Clase de cómputo | Campo de protocolo | Ejemplo |
Tipos de instancia de GPU de red de alto rendimiento | spec.nodeSelector | |
Tipo de instancia de GPU | metadata.labels[ alibabacloud.com/gpu-model-series] | |
Versiones de controladores
Las aplicaciones de GPU suelen depender de Compute Unified Device Architecture (CUDA), una plataforma de cómputo paralelo y un modelo de programación que NVIDIA lanzó en 2007. A continuación se muestra la arquitectura de CUDA. La API de controlador y la API de tiempo de ejecución de la pila de software de CUDA presentan las siguientes diferencias.
API de controlador: ofrece toda la funcionalidad, pero su uso es complejo.
API de tiempo de ejecución: envuelve parte de la API de controlador y oculta algunos pasos de inicialización del controlador. Su uso resulta más sencillo.
La API de controlador de CUDA se incluye en el paquete del controlador de NVIDIA. La biblioteca de CUDA y el entorno de ejecución de CUDA se incluyen en el paquete de CUDA Toolkit.

Cuando ejecute aplicaciones de GPU en un clúster de ACS, tenga en cuenta lo siguiente:
Utilice las imágenes base de CUDA proporcionadas por NVIDIA para instalar CUDA Toolkit en su imagen de contenedor. Estas imágenes base ya incluyen CUDA Toolkit. A partir de ahí, construya su imagen de aplicación directamente sobre una imagen base que coincida con la versión específica de CUDA Toolkit que requiere su aplicación.
Para especificar una versión de controlador al crear un pod, consulte Specify a driver version for a pod.
Para conocer la compatibilidad entre CUDA Toolkit y los controladores de NVIDIA, consulte el documento oficial de NVIDIA CUDA Toolkit Release Notes.
La versión de la API de tiempo de ejecución de CUDA que utiliza su aplicación debe coincidir con la versión de la imagen base de CUDA empleada para construir su imagen de contenedor. Por ejemplo, si su imagen de contenedor se construyó a partir de la imagen base de CUDA NVIDIA/CUDA:12.2.0-base-Ubuntu20.04, su aplicación usa la versión 12.2.0 de la API de tiempo de ejecución de CUDA.
Especifique una versión de controlador para un pod
ACS le permite especificar una versión de controlador mediante etiquetas de pod cuando su aplicación usa recursos de GPU. Utilice el formato que se muestra en la siguiente tabla.
Clase de cómputo | Campo de protocolo | Ejemplo |
Instancias de GPU | metadata.labels[alibabacloud.com/gpu-driver-version] | |
Instancia de GPU con redes de alto rendimiento | |
Versiones de controladores de GPU
Asegúrese de que la versión del controlador que especifique sea compatible con ACS. Para obtener más información, consulte Supported GPU driver versions.
Versión predeterminada del controlador de GPU para pods
ACS le permite configurar atributos específicos de los pods mediante reglas. Si la versión predeterminada del controlador no satisface sus necesidades, agregue la siguiente configuración al ConfigMap kube-system/acs-profile para asignar distintas versiones de controladores de GPU a tipos específicos de pods con GPU. Para obtener más información, consulte Configure selectors.
La siguiente configuración establece la versión del controlador en 1.5.0 para todos los pods GPU-HPN del clúster.
apiVersion: v1
kind: ConfigMap
metadata:
name: acs-profile
namespace: kube-system
data:
# Keep other system configurations unchanged.
selectors: |
[
{
"name": "gpu-hpn-driver",
"objectSelector": {
"matchLabels": {
"alibabacloud.com/compute-class": "gpu-hpn"
}
},
"effect": {
"labels": {
"alibabacloud.com/gpu-driver-version": "1.5.0"
}
}
}
]
Ejemplo
-
Cree un archivo llamado
gpu-pod-with-model-and-driver.yamly agregue el siguiente contenido YAML. Este archivo define un pod con la clase de cómputogpu. El pod solicita una GPU con el modeloexample-modely la versión de controlador535.161.08.apiVersion: v1 kind: Pod metadata: name: gpu-pod-with-model-and-driver labels: # Set the compute class to gpu. alibabacloud.com/compute-class: "gpu" # Set the GPU model to example-model, such as T4. alibabacloud.com/gpu-model-series: "example-model" # Set the driver version to 535.161.08. alibabacloud.com/gpu-driver-version: "535.161.08" spec: containers: - image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5 name: tensorflow-mnist command: - sleep - infinity resources: requests: cpu: 1 memory: 1Gi nvidia.com/gpu: 1 limits: cpu: 1 memory: 1Gi nvidia.com/gpu: 1 -
Ejecute el siguiente comando para desplegar
gpu-pod-with-model-and-driver.yamlen su clúster.kubectl apply -f gpu-pod-with-model-and-driver.yaml -
Ejecute el siguiente comando para comprobar el estado del pod.
kubectl get podResultado esperado:
NAME READY STATUS RESTARTS AGE gpu-pod-with-model-and-driver 1/1 Running 0 87s -
Ejecute el siguiente comando para consultar la información de la GPU en el pod.
NotaEl comando
/usr/bin/nvidia-smidel ejemplo viene preconfigurado en la imagen de contenedor de muestra.kubectl exec -it gpu-pod-with-model-and-driver -- /usr/bin/nvidia-smiResultado esperado:
+---------------------------------------------------------------------------------------+ | NVIDIA-SMI xxx.xxx.xx Driver Version: 535.161.08 CUDA Version: xx.x | |-----------------------------------------+----------------------+----------------------+ ... |=========================================+======================+======================| | x NVIDIA example-model xx | xxxxxxxx:xx:xx.x xxx | x | | xxx xxx xx xxx / xxxx | xxxx / xxx| x% xxxxxxxx| | | | xxx | +-----------------------------------------+----------------------+----------------------+El resultado muestra el modelo de GPU
example-modely la versión del controlador535.161.08, que coinciden con las etiquetas de la definición del pod.ImportanteEl resultado mostrado es solo de referencia. Los resultados reales pueden variar según su entorno.