Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Allocate computing power by scheduling shared GPU

Última actualización: Sep 04, 2026

cGPU permite que varios pods compartan una sola GPU física en clústeres ACK Pro. Esto se logra al aislar tanto la memoria como la potencia de cómputo de la GPU a nivel de software, lo que permite que múltiples cargas de trabajo compartan de forma segura una misma GPU bajo límites estrictos de memoria y procesamiento.

Requisitos previos

Antes de empezar, asegúrese de cumplir con lo siguiente:

  • Un clúster ACK Pro que ejecute Kubernetes 1.20 o posterior. Para obtener más información, consulte Create an ACK managed cluster.

  • Una versión de kube-scheduler compatible con la versión de su clúster. Para consultar la lista completa de funciones admitidas por cada versión de kube-scheduler, revise kube-scheduler.

    ACK cluster version

    Scheduler version

    1.30 o posterior

    Se admiten todas las versiones del programador.

    1.28

    1.28.1-aliyun-5.6-998282b9 o posterior

    1.26

    v1.26.3-aliyun-4.1-a520c096 o posterior

    1.24

    1.24.3-ack-2.0 o posterior

    1.22

    1.22.15-ack-2.0 o posterior

    1.20

    1.20.4-ack-8.0 o posterior

  • El complemento para compartir GPU instalado con una versión de gráfico de Helm superior a la 1.2.0. Para más detalles, consulte Manage the GPU sharing component.

  • cGPU 1.0.5 o posterior instalado. Para más información, consulte Update the cGPU version on a node.

Límites

  • No se admite la mezcla de tipos de trabajos en el mismo nodo. El uso compartido de GPU admite dos tipos de tareas: aquellas que solo solicitan memoria de GPU y aquellas que requieren tanto memoria como potencia de cómputo.

  • Los valores de potencia de cómputo deben ser múltiplos de 5, con un mínimo de 5. La escala va de 0 a 100, donde 100 representa el 100 % de la potencia de cómputo de una GPU. Por ejemplo, un valor de 20 indica que el pod utiliza el 20 % de dicha capacidad. Si el valor especificado no es múltiplo de 5, no se podrá enviar el trabajo.

  • La asignación de potencia de cómputo no se admite mediante el etiquetado directo de nodos. Para habilitar el aislamiento de potencia de cómputo en nodos acelerados por GPU existentes, primero debe eliminarlos del clúster y luego agregarlos a un node pool que admita dicho aislamiento. Ejecutar kubectl label nodes <NODE_NAME> ack.node.gpu.schedule=core_mem directamente sobre los nodos actuales no funciona.

  • Disponibilidad limitada por región. La asignación de potencia de cómputo solo está disponible en las siguientes regiones. Asegúrese de que la región de su clúster coincida con alguna de ellas:

    Region

    Region ID

    China (Beijing)

    cn-beijing

    China (Shanghai)

    cn-shanghai

    China (Hangzhou)

    cn-hangzhou

    China (Zhangjiakou)

    cn-zhangjiakou

    China (Shenzhen)

    cn-shenzhen

    China (Chengdu)

    cn-chengdu

    China (Heyuan)

    cn-heyuan

    China (Hong Kong)

    cn-hongkong

    Indonesia (Jakarta)

    ap-southeast-5

    Singapore

    ap-southeast-1

    Thailand (Bangkok)

    ap-southeast-7

    US (Virginia)

    us-east-1

    US (Silicon Valley)

    us-west-1

    Japan (Tokyo)

    ap-northeast-1

    China East 2 Finance

    cn-shanghai-finance-1

  • Los clústeres creados antes del 1 de marzo de 2022 requieren una actualización manual del programador. Los clústeres creados a partir de esa fecha utilizan automáticamente la versión del programador que admite la asignación de potencia de cómputo. Para los clústeres anteriores, siga estos pasos:

    1. Submit a ticket para solicitar acceso a la vista previa privada de la programación de GPU compartida.

    2. Si el complemento instalado para compartir GPU solo admite el uso compartido de memoria (versión de gráfico de Helm 1.2.0 o anterior), desinstálelo:

      1. Inicie sesión en la ACK console. En el panel de navegación izquierdo, haga clic en Clusters.

      2. Haga clic en el nombre del clúster. En el panel de navegación izquierdo, elija Applications > Helm.

      3. En la página Helm, busque ack-ai-installer y haga clic en Delete dentro de la columna Actions. En el cuadro de diálogo Delete, haga clic en OK.

    3. Instale la versión más reciente del complemento para compartir GPU. Para más información, consulte Manage the GPU sharing component.

Paso 1: Crear un node pool con asignación de potencia de cómputo

  1. Inicie sesión en la ACK console. En el panel de navegación izquierdo, haga clic en Clusters.

  2. Haga clic en el nombre del clúster. En el panel de navegación izquierdo, elija Nodes > Node Pools.

  3. En la página Node Pools, haga clic en Create Node Pool.

  4. Configure el node pool con los siguientes parámetros. Para el resto de las opciones, consulte Create and manage a node pool. En la sección Node Labels, agregue estas dos etiquetas:

    Parameter

    Description

    Node Pool Name

    Nombre del node pool. Este tema utiliza gpu-core como ejemplo.

    Expected Nodes

    Número inicial de nodos. Establezca este valor en 0 si no desea crear nodos de inmediato.

    Node Labels

    Etiquetas que se añadirán a los nodos. Configure las dos etiquetas siguientes. Para más información, consulte Labels for enabling GPU scheduling policies.

    Key

    Value

    Purpose

    ack.node.gpu.schedule

    core_mem

    Habilita tanto el aislamiento de memoria como el de potencia de cómputo de la GPU en el nodo.

    ack.node.gpu.placement

    binpack

    Utiliza el algoritmo binpack para consolidar los pods en la menor cantidad de GPUs posible, maximizando así su utilización.

Paso 2: Comprobar que los nodos del node pool tienen habilitada la asignación de potencia de cómputo

Ejecute el siguiente comando para verificar si la asignación de potencia de cómputo está habilitada en un nodo:

kubectl get nodes <NODE_NAME> -o yaml

Busque el campo aliyun.com/gpu-core.percentage en las secciones allocatable y capacity de la salida. Su presencia confirma que la asignación de potencia de cómputo se encuentra activa.

Salida esperada para un nodo con 4 GPUs (cada una con 15 GiB de memoria):

# Irrelevant fields are omitted.
status:
  allocatable:
    # 4 GPUs x 100% = 400 total computing power units
    aliyun.com/gpu-core.percentage: "400"
    aliyun.com/gpu-count: "4"
    # 4 GPUs x 15 GiB = 60 GiB total GPU memory
    aliyun.com/gpu-mem: "60"
  capacity:
    aliyun.com/gpu-core.percentage: "400"
    aliyun.com/gpu-count: "4"
    aliyun.com/gpu-mem: "60"

Paso 3: Desplegar una carga de trabajo con límites de potencia de cómputo

Sin la asignación de potencia de cómputo, un pod puede utilizar el 100 % de la capacidad de procesamiento de una GPU y todos sus 15 GiB de memoria. Al habilitar esta función, usted establece límites explícitos para ambos recursos.

El siguiente ejemplo despliega un trabajo que solicita 2 GiB de memoria de GPU y el 30 % de su potencia de cómputo.

  1. Cree un archivo llamado cuda-sample.yaml con el siguiente contenido:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: cuda-sample
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: cuda-sample
        spec:
          containers:
          - name: cuda-sample
            image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3
            command:
            - bash
            - run.sh
            - --num_batches=500000000
            - --batch_size=8
            resources:
              limits:
                aliyun.com/gpu-mem: 2                 # GPU memory in GiB
                aliyun.com/gpu-core.percentage: 30    # Percentage of GPU computing power; must be a multiple of 5
            workingDir: /root
          restartPolicy: Never

    Parámetros clave de recursos:

    Parameter

    Value

    Description

    aliyun.com/gpu-mem

    2

    Memoria de GPU en GiB. El pod puede usar hasta 2 GiB.

    aliyun.com/gpu-core.percentage

    30

    Porcentaje de potencia de cómputo de la GPU. Debe ser múltiplo de 5; 30 equivale al 30 %.

  2. Despliegue el trabajo:

    kubectl apply -f /tmp/cuda-sample.yaml
    La imagen es grande, por lo que la descarga inicial puede tardar varios minutos.
  3. Compruebe que el trabajo se esté ejecutando:

    kubectl get po -l app=cuda-sample

    Salida esperada:

    NAME                READY   STATUS    RESTARTS   AGE
    cuda-sample-m****   1/1     Running   0          15s

    El estado Running en la columna STATUS confirma que el pod está activo.

  4. Revise la memoria de GPU y la potencia de cómputo que utiliza el pod:

    kubectl exec -ti cuda-sample-m**** -- nvidia-smi

    Salida esperada:

    Fri May 23 07:23:13 2025
    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.161.07             Driver Version: 535.161.07   CUDA Version: 12.2     |
    |-----------------------------------------+----------------------+----------------------+
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  Tesla T4                       On  | 00000000:00:08.0 Off |                    0 |
    | N/A   50C    P0              36W /  70W |   2038MiB /  2048MiB |     30%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------+
                                                                                             
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    +---------------------------------------------------------------------------------------+

    La salida confirma que se aplica el aislamiento:

    • Memoria de GPU: El pod tiene un límite de 2,048 MiB (aproximadamente 2 GiB), en lugar de los 15 GiB completos disponibles antes de habilitar la función. El uso actual es de 2,038 MiB.

    • Potencia de cómputo: El pod está limitado al 30 % (GPU-Util: 30%), en lugar del 100 %.

    nvidia-smi reporta la utilización de potencia de cómputo por GPU, no por pod. Si n pods solicitan cada uno un 30 % y n no es mayor que 3, todos los pods se programarán en la misma GPU y la salida mostrará una utilización de n x 30 %.
  5. Revise los registros del pod para observar el comportamiento de limitación:

    kubectl logs cuda-sample-m**** -f

    Salida esperada:

    Generating training model
    Initializing graph
    Running warm up
    Done warm up
    Time    Step    Img/sec total_loss
    2025-05-23 07:17        1       images/sec: 16.9 +/- 0.0 (jitter = 0.0) 7.670
    2025-05-23 07:17        10      images/sec: 17.0 +/- 0.2 (jitter = 0.5) 7.947
    2025-05-23 07:17        20      images/sec: 17.1 +/- 0.1 (jitter = 0.4) 8.113
    2025-05-23 07:17        30      images/sec: 17.1 +/- 0.1 (jitter = 0.6) 7.214
    2025-05-23 07:18        40      images/sec: 17.1 +/- 0.1 (jitter = 0.7) 7.878
    2025-05-23 07:18        50      images/sec: 17.2 +/- 0.1 (jitter = 0.7) 8.056
    2025-05-23 07:18        60      images/sec: 17.2 +/- 0.1 (jitter = 0.7) 7.990
    2025-05-23 07:18        70      images/sec: 17.2 +/- 0.1 (jitter = 0.7) 7.892
    2025-05-23 07:18        80      images/sec: 17.2 +/- 0.1 (jitter = 0.7) 7.133
    2025-05-23 07:18        90      images/sec: 17.2 +/- 0.1 (jitter = 0.6) 7.789

    Las entradas del registro aparecen a una tasa menor que en un pod sin restricciones de potencia de cómputo. Esto confirma que el límite del 30 % está vigente (limitado aproximadamente al 30 % de la capacidad de la GPU).

  6. (Opcional) Elimine el trabajo después de la verificación:

    kubectl delete job cuda-sample

Pasos siguientes