Avec l'allocation dynamique des ressources, Kubernetes planifie les pods en fonction de la configuration de l'appareil référencé. Les opérateurs d'applications n'ont pas besoin de sélectionner des nœuds spécifiques dans leurs charges de travail ni de s'assurer que chaque pod demande exactement le nombre d'appareils connectés à ces nœuds. Ce processus est semblable à l'allocation de volumes pour le stockage.
Cette fonctionnalité vous aide à exécuter des charges de travail d'IA en allouant de manière dynamique et précise les ressources GPU dans vos clusters Bare Metal. Vous pouvez ainsi améliorer l'utilisation des ressources et les performances pour les charges de travail exigeantes.
Cette page est destinée aux administrateurs, aux architectes et aux opérateurs qui gèrent le cycle de vie de l'infrastructure technologique sous-jacente. Pour en savoir plus sur les rôles courants et les exemples de tâches que nous citons dans le contenu Google Cloud , consultez Rôles utilisateur et tâches courantes de GKE.
Avant de commencer
Avant de configurer vos charges de travail GPU pour qu'elles utilisent l'allocation dynamique de ressources, vérifiez que les conditions préalables suivantes sont remplies :
- Votre cluster Bare Metal est de version 1.33.0 ou ultérieure.
- Votre système d'exploitation est Ubuntu 22.04 ou Red Hat Enterprise Linux (RHEL) 9.4.
- Vous avez mis à jour votre cluster pour activer l'allocation dynamique des ressources, comme décrit dans Activer l'allocation dynamique des ressources.
- Vous disposez d'au moins une machine de nœud avec un GPU associé et le pilote de GPU NVIDIA installé. Pour en savoir plus, consultez Installer ou désinstaller l'opérateur GPU NVIDIA fourni.
- Si vous utilisez l'opérateur GPU NVIDIA fourni, la version 1.33.0 ou ultérieure active l'interface Container Device Interface (CDI) par défaut.
Si vous utilisez un opérateur GPU installé manuellement, assurez-vous que CDI est activé dans
ClusterPolicy. - Vous avez suivi les instructions de la section Pilote NVIDIA DRA pour les GPU afin d'installer le pilote NVIDIA DRA sur tous les nœuds associés à un GPU.
Créer des charges de travail GPU qui utilisent l'allocation dynamique des ressources
Pour que vos charges de travail GPU puissent profiter de l'allocation dynamique de ressources pour demander des GPU, elles doivent se trouver dans un espace de noms partagé avec un ResourceClaim qui décrit la demande d'allocation de périphériques GPU. Vos charges de travail doivent faire référence à ResourceClaim pour que Kubernetes attribue des ressources GPU.
Les étapes suivantes permettent de configurer un environnement dans lequel vos charges de travail utilisent l'allocation dynamique de ressources pour demander des ressources GPU :
Pour créer des ressources liées à l'allocation dynamique de ressources, créez un
Namespacedans votre cluster :cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Namespace metadata: name: NAMESPACE_NAME EOFRemplacez les éléments suivants :
CLUSTER_KUBECONFIG: chemin d'accès au fichier kubeconfig du cluster d'utilisateur.NAMESPACE_NAMEpar le nom de votre espace de noms d'allocation dynamique des ressources.
Créez un
ResourceClaimpour décrire la demande d'accès aux GPU :cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: resource.k8s.io/v1beta1 kind: ResourceClaim metadata: namespace: NAMESPACE_NAME name: RESOURCE_CLAIM_NAME spec: devices: requests: - name: gpu deviceClassName: gpu.nvidia.com EOFRemplacez
RESOURCE_CLAIM_NAMEpar le nom de votre revendication de ressources pour les demandes de GPU.Créez des charges de travail qui font référence à
ResourceClaimcréé à l'étape précédente.Les exemples de charge de travail suivants montrent comment référencer un
ResourceClaimnommégpu-claimdans l'espace de nomsdra-test. Les conteneurs du podpod1sont des exemples de l'architecture de calcul unifiée (CUDA) de NVIDIA, conçus pour exécuter des charges de travail CUDA sur les GPU. Lorsque le podpod1se termine correctement, cela indique que la fonctionnalité d'allocation dynamique des ressources fonctionne correctement et que l'allocation dynamique des ressources est prête à gérer les ressources GPU de votre cluster.Ubuntu
Exécutez la commande suivante pour appliquer le fichier manifeste à votre cluster :
cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Pod metadata: name: pod1 namespace: dra-test spec: restartPolicy: OnFailure resourceClaims: - name: gpu resourceClaimName: gpu-claim containers: - name: ctr0 image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0 resources: claims: - name: gpu - name: ctr1 image: nvcr.io/nvidia/k8s/cuda-sample:devicequery resources: claims: - name: gpu EOF
RHEL
Exécutez la commande suivante pour appliquer le fichier manifeste à votre cluster :
cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Pod metadata: name: pod1 namespace: dra-test spec: restartPolicy: OnFailure resourceClaims: - name: gpu resourceClaimName: gpu-claim containers: - name: ctr0 image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0 resources: claims: - name: gpu - name: ctr1 image: nvcr.io/nvidia/k8s/cuda-sample:devicequery resources: claims: - name: gpu EOF
Limites
Tenez compte des limitations suivantes lorsque vous utilisez l'allocation dynamique de ressources :
Lorsque vous utilisez RHEL OS avec une version compatible de l'opérateur de GPU NVIDIA, l'interface CDI (Container Device Interface) gère automatiquement l'injection d'appareils et l'étiquetage SELinux. Vous n'êtes pas obligé d'utiliser la configuration manuelle des règles SELinux ni de définir le pod
securityContext.Cette fonctionnalité utilise le groupe d'API
resource.k8s.io/v1beta1, qui diffère du groupe d'API Kubernetes Open Source pour cette fonctionnalité,resource.k8s.io/v1. Le groupe d'API Open Sourcev1offre plus de fonctionnalités et une meilleure stabilité que le groupe d'APIv1beta1.
Étapes suivantes
- Pour en savoir plus sur l'allocation dynamique des ressources, consultez la documentation Kubernetes.
- Découvrez comment diffuser des LLM tiers sur un serveur bare metal.