Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Configure the GPU selection policy for GPU sharing

Dernière mise à jour :Aug 11, 2026

Par défaut, l’ordonnanceur alloue les ressources GPU en remplissant un GPU sur un nœud avant de passer à un autre. Cette approche permet d’éviter la fragmentation de la mémoire GPU. Toutefois, dans certains scénarios, il peut être préférable de répartir les Pods sur plusieurs GPU afin de minimiser l’impact sur vos charges de travail en cas de défaillance d’un seul GPU. Cette rubrique explique comment configurer la politique de sélection des GPU pour le partage de GPU.

Prérequis

Fonctionnement

Lorsque vous utilisez le partage de GPU sur un nœud doté de plusieurs GPU, vous pouvez choisir entre deux politiques pour l’allocation des GPU aux Pods :

  • Binpack : (par défaut) L’ordonnanceur remplit un GPU sur un nœud avant d’allouer des ressources à partir d’un autre. Cette approche évite la fragmentation de la mémoire GPU.

  • Spread : L’ordonnanceur répartit les Pods de manière aussi uniforme que possible sur tous les GPU disponibles d’un nœud. Cette approche minimise le nombre de charges de travail affectées en cas de défaillance d’un seul GPU.

L’exemple suivant présente un nœud équipé de deux GPU, chacun disposant de 15 Go de mémoire GPU. Pod1 demande 2 Go de mémoire GPU et Pod2 en demande 3.

Procédure

Par défaut, la politique de sélection des GPU pour un nœud est Binpack. Pour utiliser la politique Spread pour le partage de GPU, suivez les étapes ci-dessous.

Étape 1 : Créer un pool de nœuds

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez Nodes > Node Pools.

  1. Sur la page Node Pools, cliquez sur Create Node Pool dans le coin supérieur droit.

  2. Sur la page Create Node Pool, définissez les paramètres et cliquez sur Confirm. Le tableau suivant décrit les principaux paramètres. Pour plus d’informations sur les autres paramètres, consultez la rubrique Création et gestion d’un pool de nœuds.

    Paramètre

    Description

    Type d’instance

    Pour Architecture, sélectionnez Instance accélérée par GPU et choisissez un type d’instance.

    La politique Spread n’est effective que sur les nœuds dotés de plusieurs GPU. Sélectionnez un type d’instance avec plusieurs GPU.

    Nombre de nœuds souhaité

    Spécifiez le nombre initial de nœuds dans le pool de nœuds. Définissez cette valeur sur 0 si vous ne souhaitez pas créer de nœuds immédiatement.

    Libellé de nœud

    Cliquez sur 1.jpg pour ajouter les deux libellés suivants :

    • Définissez Key sur ack.node.gpu.schedule et Value sur cgpu. Cela active le partage de GPU et l’isolation de la mémoire GPU.

    • Définissez Key sur ack.node.gpu.placement et Value sur spread. Cela active la politique Spread pour le nœud.

Étape 2 : Soumettre une tâche

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Workloads > Jobs.

  3. Dans le coin supérieur droit de la page, cliquez sur Create from YAML. Copiez le contenu YAML suivant dans l’éditeur Template, modifiez-le selon les instructions indiquées dans les commentaires, puis cliquez sur Create.

    Détails YAML

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: tensorflow-mnist-spread
    spec:
      parallelism: 3
      template:
        metadata:
          labels:
            app: tensorflow-mnist-spread
        spec:
          nodeSelector:
             kubernetes.io/hostname: <NODE_NAME> # Replace <NODE_NAME> with the name of a GPU node in your cluster to better observe the effect, for example, cn-shanghai.192.0.2.109.
          containers:
          - name: tensorflow-mnist-spread
            image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
            command:
            - python
            - tensorflow-sample-code/tfjob/docker/mnist/main.py
            - --max_steps=100000
            - --data_dir=tensorflow-sample-code/data
            resources:
              limits:
                aliyun.com/gpu-mem: 4 # Requests 4 GiB of gpu memory.
            workingDir: /root
          restartPolicy: Never

    Description du fichier YAML :

    • Ce fichier YAML définit une tâche qui utilise l’exemple TensorFlow MNIST. La tâche crée trois Pods, et chaque Pod demande 4 Go de mémoire GPU.

    • Un Pod demande 4 Go de mémoire GPU en définissant aliyun.com/gpu-mem: 4 dans la section resources.limits de la spécification du Pod.

    • Pour observer l’effet sur un seul nœud, le fichier YAML ajoute un nodeSelector, kubernetes.io/hostname: <NODE_NAME>, afin de planifier les Pods sur un nœud spécifique.

Étape 3 : Vérifier la politique Spread

Utilisez l’outil d’inspection GPU pour interroger l’allocation des ressources GPU sur le nœud :

kubectl inspect cgpu

NAME                   IPADDRESS      GPU0(Allocated/Total)  GPU1(Allocated/Total)  GPU2(Allocated/Total)  GPU3(Allocated/Total)  GPU Memory(GiB)
cn-shanghai.192.0.2.109  192.0.2.109  4/15                   4/15                   0/15                   4/15                   12/60
--------------------------------------------------------------------------------------
Allocated/Total GPU Memory In Cluster:
12/60 (20%)

La sortie indique que les trois Pods sont planifiés sur différents GPU du nœud. Cela confirme que la politique Spread est en vigueur.