L'allocation dynamique des ressources est une API Kubernetes qui vous permet de demander et de partager des ressources, telles que des GPU, entre les pods et les conteneurs de vos clusters Google Distributed Cloud Bare Metal. Des pilotes tiers gèrent ces appareils, et Kubernetes les alloue de manière dynamique, un peu comme des volumes de stockage. Vos charges de travail d'IA n'ont pas besoin de cibler des nœuds spécifiques ni de demander le nombre exact d'appareils associés. Ce document explique comment configurer vos charges de travail GPU pour qu'elles utilisent l'allocation dynamique des ressources.
Avant de commencer
Avant de configurer vos charges de travail GPU pour qu'elles utilisent l'allocation dynamique des ressources, vérifiez que les conditions préalables suivantes sont remplies :
- Votre cluster Bare Metal est à la 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 à laquelle un GPU est associé et sur laquelle le pilote de GPU NVIDIA est installé. Pour en savoir plus, consultez Installer ou désinstaller l'opérateur GPU NVIDIA groupé.
- Si vous utilisez l'opérateur GPU NVIDIA groupé, la version 1.33.0 ou ultérieure active Container Device Interface (CDI) par défaut.
Si vous utilisez un opérateur GPU installé manuellement, assurez-vous que CDI est activé dans le
ClusterPolicy. - Vous avez suivi les instructions de la page Pilote NVIDIA DRA pour les GPU pour 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 des 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 d'appareils GPU. Vos charges de travail doivent référencer le ResourceClaim pour que Kubernetes puisse attribuer 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 des 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 fichier
ResourceClaimpour décrire la demande d'accès au 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 ressource pour les requêtes de GPU.Créez des charges de travail qui font référence au
ResourceClaimcréé à l'étape précédente.Les exemples de charges de travail suivants montrent comment référencer un
ResourceClaimnommégpu-claimdans l'espace de nomsdra-test. Les conteneurs du podpod1sont des exemples d'architecture CUDA (Compute Unified Device Architecture) 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 dans 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 limites suivantes lorsque vous utilisez l'allocation dynamique des ressources :
Lorsque vous utilisez l'OS RHEL avec une version compatible de l'opérateur GPU NVIDIA, la spécification Container Device Interface (CDI) gère automatiquement l'injection d'appareils et l'étiquetage SELinux. Vous n'êtes pas obligé d'utiliser la configuration manuelle de la règle SELinux ni de définir le
securityContextdu pod.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 Bare Metal.