Exécution d'applications sur des noeuds basés sur un GPU
Découvrez comment exécuter des applications sur des noeuds de travail basés sur GPU dans des grappes créées à l'aide de Kubernetes Engine (OKE).
Pour exécuter des applications sur des noeuds de travail basés sur GPU, vous sélectionnez une forme GPU et une image GPU compatible pour les noeuds gérés d'un groupe de noeuds géré ou pour les noeuds autogérés.
La forme détermine le nombre d'UC et la quantité de mémoire affectés à chaque noeud. Parmi les formes que vous pouvez sélectionner figurent les formes GPU (Graphics Processing Unit), avec les GPU eux-mêmes sur les cartes graphiques NVIDIA. Destinés à l'origine à la manipulation d'images et de graphiques, les GPU sont très efficaces pour traiter de grands blocs de données en parallèle. Grâce à cette fonctionnalité, les GPU sont une bonne option lors du déploiement d'applications gourmandes en données. Pour plus d'informations sur les formes GPU à sélectionner pour les noeuds de travail, voir Formes GPU prises en charge par Kubernetes Engine (OKE).
La fonctionnalité massive de calcul parallèle des GPU NVIDIA est accessible à l'aide des bibliothèques CUDA (Compute Unified Device Architecture). Différents processeurs graphiques (par exemple, NVIDIA® Tesla VoltaTM, NVIDIA® Tesla PascalTM) nécessitent des versions spécifiques des bibliothèques CUDA. Lorsque vous sélectionnez une forme GPU pour un groupe de noeuds gérés ou un noeud autogéré, vous devez également sélectionner une image GPU Oracle Linux compatible avec laquelle les bibliothèques CUDA sont préinstallées. Les noms des images compatibles incluent " GPU ".
Vous pouvez sélectionner une forme GPU et une image compatible pour les noeuds de travail d'une grappe des façons suivantes :
- Noeuds gérés : À l'aide de Kubernetes Engine, créez un groupe de noeuds gérés et sélectionnez une forme de processeur graphique (et une image compatible) pour le groupe de noeuds. Tous les noeuds de travail du groupe de noeuds gérés ont la forme GPU. Pour plus d'informations, voir Création d'un groupe de noeuds gérés.
- Noeuds autogérés : En utilisant le service de calcul pour créer une instance de calcul (ou un groupe d'instances) pour héberger un noeud autogéré, en sélectionnant une forme de processeur graphique (et une image compatible) pour l'instance et en spécifiant la grappe Kubernetes à laquelle ajouter l'instance. Vous ne pouvez ajouter des noeuds autogérés qu'aux grappes améliorées. Pour plus d'informations, voir Utilisation de noeuds autogérés.
Lorsque vous déployez une application sur une grappe que vous avez créée avec Kubernetes Engine, vous devez spécifier dans la spécification de pod le nombre de ressources GPU requises. Pour déployer l'application, le kube-scheduler détermine quel noeud dispose des ressources nécessaires. Lorsqu'un pod d'application doit être exécuté sur un noeud avec une forme GPU, les éléments suivants sont montés dans le pod :
- le nombre demandé de dispositifs GPU
- la bibliothèque CUDA du noeud
L'application est effectivement isolée des différents types de GPU. Par conséquent, les bibliothèques CUDA pour différents GPU n'ont pas besoin d'être incluses dans le conteneur d'application, ce qui garantit que le conteneur reste portable.
Notez ce qui suit :
- Vous pouvez spécifier des formes GPU pour les groupes de noeuds gérés dans des grappes exécutant Kubernetes version 1.19.7 ou ultérieure. Ne spécifiez pas de forme GPU pour les groupes de noeuds gérés dans les grappes exécutant des versions antérieures de Kubernetes.
- Vous pouvez utiliser la console, l'API ou l'interface de ligne de commande pour spécifier une image GPU à utiliser sur une forme GPU. Vous pouvez également utiliser l'API ou l'interface de ligne de commande pour spécifier une image non GPU à utiliser sur une forme GPU.
- Après avoir créé un groupe de noeuds gérés avec une forme GPU, vous ne pouvez pas modifier le groupe de noeuds pour qu'il ait une forme autre que GPU. De même, vous ne pouvez pas modifier un groupe de noeuds gérés avec une forme non GPU pour qu'il ait une forme GPU.
- Les formes GPU ne sont pas nécessairement disponibles dans tous les domaines de disponibilité.
- Vous pouvez spécifier des formes GPU pour les groupes de noeuds gérés dans des grappes natives du VCN (c'est-à-dire des grappes qui ont des points d'extrémité d'API Kubernetes hébergés dans un sous-réseau de votre VCN). Ne spécifiez pas de forme de processeur graphique pour les groupes de noeuds gérés dans une grappe si le point d'extrémité d'API Kubernetes de la grappe n'est pas intégré à votre VCN. Voir Migration vers des grappes natives de VCN.
- Vous pouvez exécuter des applications sur des noeuds de travail GPU dans des groupes de noeuds gérés, mais pas dans des groupes de noeuds virtuels.
Définition d'un pod à exécuter uniquement sur les noeuds ayant un GPU
Le fichier de configuration suivant définit un pod à exécuter sur n'importe quel noeud de la grappe qui a une ressource GPU disponible (quel que soit le type de GPU) :
apiVersion: v1
kind: Pod
metadata:
name: test-with-gpu-workload
spec:
restartPolicy: OnFailure
containers:
- name: cuda-vector-add
image: k8s.gcr.io/cuda-vector-add:v0.1
resources:
limits:
nvidia.com/gpu: 1
Définition d'un pod à exécuter uniquement sur les noeuds qui n'ont pas de processeur graphique
Le fichier de configuration suivant définit un pod à exécuter uniquement sur les noeuds de la grappe qui n'ont pas de processeur graphique :
apiVersion: v1
kind: Pod
metadata:
name: test-with-non-gpu-workload
spec:
restartPolicy: OnFailure
containers:
- name: test-with-non-gpu-workload
image: "oraclelinux:8"
Formes GPU prises en charge par le moteur Kubernetes (OKE)
Le moteur Kubernetes prend en charge différentes formes GPU pour les groupes et les noeuds de noeuds gérés, ainsi que pour les noeuds autogérés.
Notez qu'en raison des limites de service et des quotas de compartiment, certaines formes GPU prises en charge peuvent ne pas être disponibles dans votre location particulière.
Formes GPU prises en charge pour les groupes de noeuds gérés et les noeuds gérés
Pour les groupes de noeuds gérés et les noeuds gérés, Kubernetes Engine prend en charge les formes GPU suivantes :
-
Formes GPU de machine virtuelle prises en charge par Kubernetes Engine pour les groupes de noeuds gérés et les noeuds gérés :
- VM.GPU.A10.1, VM.GPU.A10.2
- VM.GPU.A100.40G.1, VM.GPU.A100.40G.2, VM.GPU.A100.40G.4, VM.GPU.A100.40G.8
- VM.GPU.A100.80G.1, VM.GPU.A100.80G.2, VM.GPU.A100.80G.4, VM.GPU.A100.80G.8
- VM.GPU.A100. B40G.1, VM.GPU.A100. B40G.2, VM.GPU.A100. B40G.4
- VM.GPU.GU1.1, VM.GPU.GU1.2,
- VM.GPU.L40S.1, VM.GPU.L40S.2
- VM.GPU2.1
- VM.GPU3.1, VM.GPU3.2, VM.GPU3.4
-
Formes GPU sans système d'exploitation (BM) prises en charge par Kubernetes Engine pour les groupes de noeuds gérés et les noeuds gérés :
- MODÈLE:BM.GPU.A10.4
- BM.GPU.A100-v2.8
- MODÈLE:BM.GPU.B4.8
- BM.GPU.GM4.8
- BM.GPU.GU1.4
- MODÈLE:BM.GPU.H100.8
- BM.GPU.L40S.4
- MODÈLE:BM.GPU.T1.2
- BM.GPU.T1-2.4
- BM.GPU2.2
- BM.GPU3.8
- BM.GPU4.8
Notez qu'en raison des limites de service et des quotas de compartiment, certaines formes GPU prises en charge peuvent ne pas être disponibles dans votre location particulière.
Formes GPU prises en charge pour les noeuds autogérés
Pour les noeuds autogérés, Kubernetes Engine prend en charge les formes GPU disponibles pour l'image OKE Oracle Linux 7 (OL7) ou Oracle Linux 8 (OL8) que vous sélectionnez lors de la création de l'instance de calcul pour héberger le noeud autogéré.
Notez qu'en raison des limites de service et des quotas de compartiment, certaines formes GPU prises en charge peuvent ne pas être disponibles dans votre location particulière.