Module d'extension GPU NVIDIA

Lorsque vous activez l'extension de cluster de modules d'extension GPU NVIDIA, vous pouvez transmettre les paires clé/valeur suivantes en tant qu'arguments.

Notez que pour vous assurer que les charges de travail exécutées sur les noeuds de processus actif de GPU NVIDIA ne sont pas interrompues de manière inattendue, nous vous recommandons de choisir la version du module d'extension de GPU NVIDIA à déployer, plutôt que de spécifier que vous souhaitez qu'Oracle mette à jour le module automatiquement.

Arguments de configuration communs à la plupart des modules complémentaires de cluster
Clé (API et CLI) Nom d'affichage de la clé (console) Description Obligatoire/Facultatif Valeur par défaut Exemple de valeur
affinity affinité

Groupe de règles de programmation d'affinité.

Format JSON en texte brut ou encodé Base64.

Non utilisé par:
  • Opérateur GPU Nvidia
Equivalents possibles :
  • Repérage des fonctionnalités de noeud, utilisez master.affinity
  • Opérateur réseau NVIDIA, utilisez operator.affinity
  • Pilote CSI SMB, utilisez contoller.affinity
  • Opérateur de GPU AMD, utilisez controllerManager.affinity
Facultatif NULL NULL
nodeSelectors Sélecteurs de noeud

Vous pouvez utiliser des sélecteurs de noeud et des libellés de noeud pour contrôler les noeuds de processus actif sur lesquels les pods d'extension sont exécutés.

Pour qu'un pod s'exécute sur un noeud, le sélecteur de noeud du pod doit avoir la même clé/valeur que l'étiquette du noeud.

Définissez nodeSelectors sur une paire clé/valeur correspondant à la fois au sélecteur de noeud du pod et au libellé du noeud de processus actif.

Format JSON en texte brut ou encodé Base64.

Non utilisé par:
  • Opérateur GPU NVIDIA
  • Pilote CSI SMB
Equivalents possibles :
  • Repérage des fonctionnalités de noeud, utilisez worker.nodeSelector
  • Opérateur réseau NVIDIA, utilisez operator.nodeSelectors
  • Opérateur de GPU AMD, utilisez selector ou controllerManager.nodeSelector
Facultatif NULL {"foo":"bar", "foo2": "bar2"}

Le pod s'exécutera uniquement sur les noeuds possédant le libellé foo=bar ou foo2=bar2.

numOfReplicas numOfReplicas Nombre de répliques du déploiement de l'extension.
Non utilisé par:
  • Module d'extension GPU AMD
  • Opérateur GPU NVIDIA
  • Opérateur réseau NVIDIA
  • Pilote CSI SMB
Equivalents possibles :
  • CoreDNS, utilisez nodesPerReplica
  • Repérage des fonctionnalités de noeud, utilisez master.replicaCount
  • Opérateur de GPU AMD, utilisez controllerManager.replicas
Requis 1

Crée une réplique du déploiement d'extension par cluster.

2

Crée deux répliques du déploiement d'extension par cluster.

rollingUpdate rollingUpdate

Contrôle le comportement souhaité de la mise à jour non simultanée par maxSurge et maxUnavailable.

Format JSON en texte brut ou encodé Base64.

Non utilisé par:
  • Repérage des fonctionnalités du noeud
  • Opérateur réseau NVIDIA
  • Pilote CSI SMB
Equivalents possibles :
  • Opérateur de GPU NVIDIA, utilisez daemonsets.rollingUpdate.maxUnavailable
  • Opérateur de GPU AMD, utilisez upgradePolicy dans devicePlugin, metricsExporter, testRunner, configManager ou draDriver
Facultatif NULL NULL
tolerations tolérances

Vous pouvez utiliser des tolérances et des taches pour contrôler les noeuds de processus actif sur lesquels les pods d'extension s'exécutent.

Pour qu'un pod s'exécute sur un noeud présentant une entorse, le pod doit avoir une tolérance correspondante.

Définissez tolerations sur une paire clé/valeur correspondant à la fois à la tolérance du pod et à la tache du noeud de processus actif.

Format JSON en texte brut ou encodé Base64.

Equivalents possibles :
  • Repérage des fonctionnalités de noeud, utilisez master.tolerations et/ou worker.tolerations
  • Opérateur de GPU NVIDIA, utilisez daemonsets.tolerations
  • Opérateur réseau NVIDIA, utilisez operator.tolerations
  • Pilote CSI SMB, utilisez controller.tolerations
  • Opérateur GPU AMD, utilisez les tolérances dans devicePlugin, metricsExporter, testRunner, configManager, draDriver ou controllerManager
Facultatif NULL [{"key":"tolerationKeyFoo", "value":"tolerationValBar", "effect":"noSchedule", "operator":"exists"}]

Seuls les pods présentant cette tolérance peuvent être exécutés sur des noeuds de processus actif présentant la tache tolerationKeyFoo=tolerationValBar:noSchedule.

topologySpreadConstraints topologySpreadConstraints

Comment répartir les pods correspondants entre la topologie donnée.

Format JSON en texte brut ou encodé Base64.

Non utilisé par:
  • Repérage des fonctionnalités du noeud
  • Opérateur GPU NVIDIA
  • Opérateur réseau NVIDIA
  • Pilote CSI SMB
  • Opérateur de GPU AMD
Facultatif NULL NULL
Arguments de configuration propres à ce module complémentaire de cluster
Clé (API et CLI) Nom d'affichage de la clé (console) Description Obligatoire/Facultatif Valeur par défaut Exemple de valeur
deviceIdStrategy Stratégie d'ID de périphérique

Stratégie à utiliser pour transmettre les ID de périphérique à l'exécution sous-jacente.

L'une des options suivantes :

  • uuid
  • index
Facultatif uuid
deviceListStrategy Stratégie de liste d'appareils

Stratégie à utiliser pour transmettre la liste des périphériques à l'exécution sous-jacente.

Valeurs prises en charge :

  • envvar
  • volume-mounts
  • cdi-annotations
  • cdi-cri

Plusieurs valeurs sont prises en charge, dans une liste séparée par des virgules.

Facultatif envvar
driverRoot Racine du pilote Chemin racine de l'installation du pilote NVIDIA. Facultatif /
failOnInitError FailOnInitError

Indique si le module d'extension doit échouer en cas d'erreur lors de l'initialisation.

Lorsqu'elle est définie sur false, le module d'extension est bloqué indéfiniment au lieu d'échouer.

Facultatif true
migStrategy Stratégie MIG

Stratégie à utiliser pour exposer les périphériques MIG (Multi-Instance GPU) sur les GPU qui les prennent en charge.

L'une des options suivantes :

  • none
  • single
  • mixed
Facultatif none
nvidia-gpu-device-plugin.ContainerResources ressources de conteneur nvidia-gpu-device-plugin

Vous pouvez spécifier les quantités de ressources demandées par les conteneurs d'extension et définir les limites d'utilisation des ressources que les conteneurs d'extension ne peuvent pas dépasser.

Format JSON en texte brut ou encodé Base64.

Facultatif NULL {"limits": {"cpu": "500m", "memory": "200Mi" }, "requests": {"cpu": "100m", "memory": "100Mi"}}

Créez des conteneurs d'extension qui demandent 100 milllicores de CPU et 100 mégaoctets de mémoire. Limitez les conteneurs d'extension à 500 milllicores de CPU et 200 mégaoctets de mémoire.

passDeviceSpecs Transmettre les spécifications d'appareil Indique si les chemins et les autorisations de noeud de périphérique souhaités doivent être transmis pour tous les périphériques NVIDIA alloués au conteneur. Facultatif false
useConfigFile Utiliser le fichier de configuration de ConfigMap

Indique si un fichier de configuration doit être utilisé pour configurer le module d'extension de périphérique Nvidia pour Kubernetes. Le fichier de configuration est dérivé d'un fichier ConfigMap.

Si la valeur est true, vous devez créer une valeur ConfigMap dans le cluster, nommer la valeur ConfigMap nvidia-device-plugin-config et indiquer des valeurs pour les arguments de configuration. Reportez-vous à l'Example.

Le paramètre ConfigMap est référencé par le jeu de démons nvidia-gpu-device-plugin.

Facultatif false

Exemple de nvidia-device-plugin-config ConfigMap :

apiVersion: v1
kind: ConfigMap
metadata: 
  name: nvidia-device-plugin-config 
  namespace: kube-system
data:
  config.yaml: |
    version: v1
    flags:
      migStrategy: "none"
      failOnInitError: true
      nvidiaDriverRoot: "/"
      plugin:
        passDeviceSpecs: false
        deviceListStrategy: envvar
        deviceIDStrategy: uuid
Considérations relatives aux clusters volumineux

Le tableau suivant décrit les considérations relatives à la configuration de ce module complémentaire de cluster dans les clusters volumineux.

Nom d'argument Nombre de noeuds de processus métier de rôles Description à mesure que la taille du cluster augmente Risques Recommandation
nvidia-gpu-device-plugin.ContainerResources Y (Oui)

Définit les demandes de CPU et de mémoire et les limites pour les pods de module d'extension de GPU NVIDIA.

Le module d'extension s'exécute sur chaque noeud de GPU en tant que DaemonSet, de sorte que l'utilisation totale des ressources augmente avec le nombre de noeuds de GPU.

Les noeuds GPU supplémentaires augmentent :

  • Surcharge de surveillance de l'état des GPU
  • Suivi de l'allocation des périphériques
  • Reporting des ressources au niveau du noeud

Si les ressources sont sous-dimensionnées :

  • Le module d'extension peut devenir instable sur les noeuds.
  • Les ressources GPU peuvent ne pas être publiées correctement.
  • La programmation des pods peut échouer sur les noeuds GPU.
  • La disponibilité des GPU peut être incohérente entre les noeuds.
  • Allouez suffisamment de mémoire sur chaque noeud de GPU.
  • Ajustez les ressources en fonction du nombre de GPU sur chaque noeud et de l'intensité des charges de travail de GPU.
affinity / nodeSelectors / tolerations Y (Oui)

Contrôlez les noeuds sur lesquels les pods de module d'extension GPU NVIDIA s'exécutent.

  • Garantit que le module d'extension s'exécute uniquement sur les noeuds GPU.
  • Empêche tout déploiement inutile sur les noeuds de CPU uniquement.
  • Evite de gaspiller des ressources sur des noeuds qui ne contiennent pas de GPU.

Si ces arguments sont mal configurés :

  • Le module d'extension peut s'exécuter sur des noeuds de CPU uniquement et sur des ressources perdues.
  • Le module d'extension peut ne pas s'exécuter sur les noeuds GPU, ce qui rend les GPU inutilisables par les charges globales Kubernetes.
  • Utilisez des sélecteurs de noeuds qui correspondent aux libellés appliqués aux noeuds GPU.
  • Configurer les tolérances lorsque les noeuds GPU sont endommagés.
topologySpreadConstraints N

Contrôle la distribution des pods de module d'extension de GPU NVIDIA entre les noeuds et les domaines de disponibilité.

Les contraintes de répartition de topologie permettent de maintenir une répartition uniforme dans les clusters et clusters multidomaines avec des pools de noeuds GPU hétérogènes.

Si les contraintes de répartition de topologie ne sont pas configurées :

  • Les pods de plug-in peuvent être distribués de manière inégale.
  • La résilience lors des pannes de noeud ou de domaine de disponibilité peut être réduite.

Utilisez des contraintes de répartition de topologie pour les clusters de GPU volumineux qui couvrent plusieurs domaines de disponibilité ou contiennent des pools de noeuds de GPU hétérogènes.

numOfReplicas N

Contrôle le nombre de répliques pour les composants qui prennent en charge le redimensionnement basé sur les répliques.

Le module d'extension GPU NVIDIA s'exécute en tant que DaemonSet avec un pod sur chaque noeud GPU éligible. Il n'est pas mis à l'échelle en modifiant le nombre de répliques.

Non applicable Non applicable
rollingUpdate N

Contrôle la façon dont les pods de plug-in de GPU NVIDIA sont mis à jour.

Dans les clusters de grande taille, une mise à jour peut affecter de nombreux noeuds GPU et réduire temporairement la disponibilité des GPU.

  • Les charges de travail GPU peuvent être interrompues.
  • Les GPU peuvent être temporairement indisponibles lorsque les pods de module d'extension sont mis à jour.
  • Utiliser une stratégie de mise à jour non simultanée contrôlée.
  • Evitez de mettre à jour un grand nombre de noeuds GPU simultanément.
failOnInitError Y (Oui)

Contrôle le comportement du plug-in en cas d'échec de l'initialisation.

Les échecs d'initialisation sont plus susceptibles de se produire quelque part dans le cluster à mesure que le nombre de noeuds GPU augmente.

  • Si la valeur est true , le module d'extension peut se terminer et le GPU sur le noeud affecté devient indisponible.
  • Si la valeur est false , le module d'extension peut rester en cours d'exécution sans être opérationnel, ce qui rend l'échec moins visible.
  • Conservez la valeur true pour que les échecs d'initialisation restent visibles.
  • Surveiller les échecs d'initialisation de module d'extension sur les noeuds GPU.
deviceListStrategy / deviceIdStrategy N

Contrôlez comment les périphériques GPU sont identifiés et exposés aux conteneurs.

Les stratégies sélectionnées affectent l'intégration de l'exécution des conteneurs et l'efficacité de l'allocation de GPU sur les noeuds GPU.

Si la configuration est incorrecte, les périphériques GPU peuvent ne pas être identifiés ou injectés de manière cohérente dans les conteneurs. Cela peut entraîner des échecs de charge globale de GPU, des affectations de périphériques incorrectes ou des problèmes de planification sur les noeuds GPU.

Configurez deviceListStrategy et deviceIdStrategy pour qu'ils correspondent à votre environnement d'exécution de conteneur et de GPU, et utilisez la stratégie d'identification de périphérique uuid par défaut, sauf si un cas d'utilisation validé en requiert un autre.
migStrategy N

Contrôle la façon dont les ressources GPU multi-instances NVIDIA sont exposées à Kubernetes.

Le GPU multi-instance peut améliorer le partage et l'utilisation des GPU à mesure que le nombre de charges de travail de GPU augmente.

Si cet argument est mal configuré :

  • Les ressources GPU peuvent être fragmentées.
  • La planification de la charge de travail peut devenir plus complexe.

Utilisez le GPU multi-instance uniquement lorsque le partitionnement GPU est requis.