Exécution d'applications sur des noeuds basés sur GPU
Découvrez comment exécuter des applications sur des noeuds de processus actif basés sur GPU dans des clusters créés à l'aide de Kubernetes Engine (OKE).
Pour exécuter des applications sur des noeuds de processus actif basés sur un GPU, vous sélectionnez une forme de GPU et une image de GPU compatible soit pour les noeuds gérés dans un pool de noeuds gérés, soit pour les noeuds autogérés.
La forme détermine le nombre d'UC et la quantité de mémoire alloué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. Initialement destinés à la manipulation d'images et de graphiques, les GPU sont très efficaces pour traiter de grands blocs de données en parallèle. Cette fonctionnalité fait des GPU 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 processus actif, reportez-vous à Formes GPU prises en charge par Kubernetes Engine (OKE).
La fonctionnalité de calcul parallèle massive des GPU NVIDIA est accessible à l'aide des bibliothèques CUDA (Compute Unified Device Architecture). Différents GPU (par exemple, NVIDIA® Tesla VoltaTM, NVIDIA® Tesla PascalTM) nécessitent des versions spécifiques des bibliothèques CUDA. Lorsque vous sélectionnez une forme de GPU pour un pool de noeuds gérés ou un noeud autogéré, vous devez également sélectionner une image de GPU Oracle Linux compatible dont les bibliothèques CUDA sont préinstallées. Les noms des images compatibles incluent 'GPU'.
Vous pouvez sélectionner une forme de GPU et une image compatible pour les noeuds de processus actif d'un cluster de l'une des manières suivantes :
- Noeuds gérés : utilisez Kubernetes Engine pour créer un pool de noeuds gérés et sélectionnez une forme de GPU (et une image compatible) pour le pool de noeuds. Tous les noeuds de processus actif du pool de noeuds gérés ont la forme GPU. Pour plus d'informations, reportez-vous à Création d'un pool de noeuds gérés.
- Noeuds autogérés : utilisez le service Compute pour créer une instance de calcul (ou un pool d'instances) afin d'héberger un noeud autogéré, sélectionnez une forme de GPU (et une image compatible) pour l'instance et indiquez le cluster Kubernetes auquel ajouter l'instance. Vous pouvez uniquement ajouter des noeuds autogérés à des clusters améliorés. Pour plus d'informations, reportez-vous à Utilisation des noeuds autogérés.
Lorsque vous déployez une application sur un cluster que vous avez créé avec Kubernetes Engine, vous devez indiquer dans la spécification de pod le nombre de ressources GPU requises. Pour déployer l'application, le planificateur de kube détermine quel noeud dispose des ressources nécessaires. Lorsqu'un pod d'application doit être exécuté sur un noeud avec une forme de GPU, les éléments suivants sont montés dans le pod :
- le nombre demandé de périphériques 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.
Tenez compte des éléments suivants :
- Vous pouvez indiquer des formes GPU pour les pools de noeuds gérés dans les clusters exécutant Kubernetes version 1.19.7 ou ultérieure. N'indiquez pas de forme GPU pour les pools de noeuds gérés dans les clusters exécutant des versions antérieures de Kubernetes.
- Vous pouvez utiliser la console, l'API ou l'interface de ligne de commande pour indiquer une image de GPU à utiliser sur une forme de GPU. Vous pouvez également utiliser l'API ou l'interface de ligne de commande pour indiquer une image non GPU à utiliser sur une forme de GPU.
- Après avoir créé un pool de noeuds gérés avec une forme GPU, vous ne pouvez pas modifier le pool de noeuds pour qu'il ait une forme non GPU. De même, vous ne pouvez pas modifier un pool de noeuds gérés avec une forme non GPU pour avoir 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 pools de noeuds gérés dans des clusters natifs VCN (c'est-à-dire des clusters dont les adresses d'API Kubernetes sont hébergées dans un sous-réseau de votre VCN). Ne spécifiez pas de forme GPU pour les pools de noeuds gérés dans un cluster si l'adresse d'API Kubernetes du cluster n'est pas intégrée à votre VCN. Reportez-vous à Migration vers des clusters natifs VCN.
- Vous pouvez exécuter des applications sur des noeuds de processus actif GPU dans des pools de noeuds gérés, mais pas dans des pools de noeuds virtuels.
Définition d'un pod à exécuter uniquement sur les noeuds disposant d'un GPU
Le fichier de configuration suivant définit un pod à exécuter sur n'importe quel noeud du cluster disposant d'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 des noeuds qui n'ont pas de GPU
Le fichier de configuration suivant définit un pod à exécuter uniquement sur les noeuds du cluster qui n'ont pas de GPU :
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 Kubernetes Engine (OKE)
Kubernetes Engine prend en charge différentes formes de GPU pour les noeuds et les pools de noeuds gérés, ainsi que pour les noeuds autogérés.
En raison des limites de service et des quotas de compartiment, certaines formes de GPU prises en charge peuvent ne pas être disponibles dans votre location particulière.
Formes GPU prises en charge pour les pools de noeuds gérés et les noeuds gérés
Pour les pools de noeuds gérés et les noeuds gérés, Kubernetes Engine prend en charge les formes de GPU suivantes :
-
Formes de GPU de machine virtuelle prises en charge par le moteur Kubernetes pour les pools 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 Bare Metal (BM) prises en charge par Kubernetes Engine pour les pools de noeuds gérés et les noeuds gérés :
- MODÈLE:BM.GPU.A10.4
- BM.GPU.A100-v2.8
- BM.GPU.B4.8
- BM.GPU.GM4.8
- BM.GPU.GU1.4
- BM.GPU.H100.8
- BM.GPU.L40S.4
- BM.GPU.T1.2
- BM.GPU.T1-2.4
- BM.GPU2.2
- BM.GPU3.8
- BM.GPU4.8
En raison des limites de service et des quotas de compartiment, certaines formes de 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 lorsque vous créez l'instance de calcul pour héberger le noeud autogéré.
En raison des limites de service et des quotas de compartiment, certaines formes de GPU prises en charge peuvent ne pas être disponibles dans votre location particulière.