Cette page explique comment configurer vos charges de travail GPU pour utiliser l'allocation dynamique des ressources dans vos clusters Google Distributed Cloud Bare Metal. L'allocation dynamique de ressources est une API Kubernetes qui vous permet de demander et de partager des ressources génériques, telles que des GPU, entre les pods et les conteneurs. Ces ressources sont gérées par des pilotes tiers.
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 Enterprise.
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.
- 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
Namespace
dans votre cluster :cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Namespace metadata: name: NAMESPACE_NAME EOF
Remplacez les éléments suivants :
CLUSTER_KUBECONFIG
: chemin d'accès au fichier kubeconfig du cluster d'utilisateur.NAMESPACE_NAME
par le nom de votre espace de noms d'allocation dynamique des ressources.
Créez un
ResourceClaim
pour 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 EOF
Remplacez
RESOURCE_CLAIM_NAME
par le nom de votre revendication de ressources pour les demandes de GPU.Créez des charges de travail qui font référence à
ResourceClaim
créé à l'étape précédente.Les exemples de charge de travail suivants montrent comment référencer un
ResourceClaim
nommégpu-claim
dans l'espace de nomsdra-test
. Les conteneurs du podpod1
sont des exemples d'architecture de périphérique de calcul unifié (CUDA) NVIDIA conçus pour exécuter des charges de travail CUDA sur les GPU. Lorsque le podpod1
se 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
Téléchargez et installez le module de règles SELinux
nvidia_container_t
, qui est requis pour accéder aux GPU.Pour en savoir plus, consultez le dépôt NVIDIA dgx-selinux.
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 securityContext: seLinuxOptions: type: nvidia_container_t 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 l'OS RHEL, la règle SELinux peut interférer avec les conteneurs qui tentent d'accéder aux GPU. Pour en savoir plus, consultez Utiliser des GPU dans des conteneurs sur RHEL 8 bare metal.
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 Sourcev1
offre 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.