Esecuzione delle applicazioni sui nodi basati su GPU

Scopri come eseguire le applicazioni sui nodi di lavoro basati su GPU nei cluster creati utilizzando Kubernetes Engine (OKE).

Per eseguire le applicazioni sui nodi di lavoro basati su GPU, selezionare una forma GPU e un'immagine GPU compatibile per i nodi gestiti in un pool di nodi gestiti o per i nodi autogestiti.

La forma determina il numero di CPU e la quantità di memoria allocata a ciascun nodo. Tra le forme che è possibile selezionare ci sono le forme GPU (Graphics Processing Unit), con le GPU stesse sulle schede grafiche NVIDIA. Originariamente destinate alla manipolazione di immagini e grafica, le GPU sono molto efficienti nell'elaborazione di grandi blocchi di dati in parallelo. Questa funzionalità rende le GPU una buona opzione quando si distribuiscono applicazioni a uso intensivo di dati. Per ulteriori informazioni sulle forme GPU da selezionare per i nodi di lavoro, vedere Forme GPU supportate da Kubernetes Engine (OKE).

La massiccia funzionalità di elaborazione parallela delle GPU NVIDIA è accessibile utilizzando le librerie CUDA (Compute Unified Device Architecture). GPU diverse (ad esempio NVIDIA® Tesla VoltaTM, NVIDIA® Tesla PascalTM) richiedono versioni specifiche delle librerie CUDA. Quando si seleziona una forma GPU per un pool di nodi gestiti o un nodo autogestito, è necessario selezionare anche un'immagine GPU Oracle Linux compatibile con le librerie CUDA preinstallate. I nomi delle immagini compatibili includono 'GPU'.

È possibile selezionare una forma GPU e un'immagine compatibile per i nodi di lavoro in un cluster nei modi riportati di seguito.

  • Nodi gestiti: utilizzando Kubernetes Engine per creare un pool di nodi gestiti e selezionando una forma GPU (e un'immagine compatibile) per il pool di nodi. Tutti i nodi di lavoro nel pool di nodi gestiti hanno la forma GPU. Per ulteriori informazioni, vedere Creazione di un pool di nodi gestiti.
  • Nodi autogestiti: utilizzando il servizio di computazione per creare un'istanza di computazione (o un pool di istanze) per ospitare un nodo autogestito, selezionando una forma GPU (e un'immagine compatibile) per l'istanza e specificando il cluster Kubernetes a cui aggiungere l'istanza. È possibile aggiungere solo nodi autogestiti ai cluster avanzati. Per ulteriori informazioni, vedere Utilizzo dei nodi gestiti automaticamente.

Quando distribuisci un'applicazione su un cluster creato con Kubernetes Engine, devi specificare nella specifica pod il numero di risorse GPU necessarie. Per distribuire l'applicazione, il kube-scheduler determina quale nodo dispone delle risorse necessarie. Quando un pod dell'applicazione deve essere eseguito su un nodo con una forma GPU, nel pod vengono attivati i seguenti elementi:

  • il numero richiesto di dispositivi GPU
  • la libreria CUDA del nodo

L'applicazione è effettivamente isolata dai diversi tipi di GPU. Di conseguenza, le librerie CUDA per diverse GPU non devono essere incluse nel contenitore dell'applicazione, garantendo che il contenitore rimanga portatile.

Tenere presente quanto riportato di seguito.

  • È possibile specificare forme GPU per i pool di nodi gestiti nei cluster su cui è in esecuzione Kubernetes versione 1.19.7 o successiva. Non specificare una forma GPU per i pool di nodi gestiti nei cluster che eseguono versioni precedenti di Kubernetes.
  • Puoi utilizzare la console, l'API o l'interfaccia CLI per specificare un'immagine GPU da utilizzare in una forma GPU. Puoi anche utilizzare l'API o l'interfaccia CLI per specificare un'immagine non GPU da utilizzare in una forma GPU.
  • Dopo aver creato un pool di nodi gestiti con una forma GPU, non è possibile modificare il pool di nodi in modo che abbia una forma non GPU. Allo stesso modo, non è possibile modificare un pool di nodi gestito con una forma non GPU per avere una forma GPU.
  • Le forme GPU non sono necessariamente disponibili in ogni dominio di disponibilità.
  • Puoi specificare le forme GPU per i pool di nodi gestiti nei cluster che sono nativi VCN (ovvero i cluster che hanno endpoint API Kubernetes ospitati in una subnet della tua VCN). Non specificare una forma GPU per i pool di nodi gestiti in un cluster se l'endpoint API Kubernetes del cluster non è integrato nella VCN. Vedere Migrazione a cluster nativi VCN.
  • È possibile eseguire le applicazioni sui nodi di lavoro GPU nei pool di nodi gestiti, ma non nei pool di nodi virtuali.

Definizione di un pod da eseguire solo sui nodi che dispongono di una GPU

Il seguente file di configurazione definisce un pod da eseguire su qualsiasi nodo del cluster che dispone di una risorsa GPU disponibile (indipendentemente dal tipo di 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

Definizione di un pod da eseguire solo su nodi che non dispongono di una GPU

Il seguente file di configurazione definisce un pod da eseguire solo sui nodi del cluster che non dispongono di una 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"

Forme GPU supportate da Kubernetes Engine (OKE)

Il motore Kubernetes supporta forme GPU diverse per pool di nodi e nodi gestiti e per i nodi autogestiti.

A causa dei limiti del servizio e delle quote del compartimento, alcune forme GPU supportate potrebbero non essere disponibili nella tenancy specifica.

Forme GPU supportate per pool di nodi gestiti e nodi gestiti

Per i pool di nodi gestiti e i nodi gestiti, Kubernetes Engine supporta le seguenti forme GPU:

  • Forme GPU Virtual Machine (VM) supportate dal motore Kubernetes per pool di nodi gestiti e nodi gestiti:

    • 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
  • Forme GPU Bare Metal (BM) supportate da Kubernetes Engine per pool di nodi gestiti e nodi gestiti:

    • 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

A causa dei limiti del servizio e delle quote del compartimento, alcune forme GPU supportate potrebbero non essere disponibili nella tenancy specifica.

Forme GPU supportate per nodi autogestiti

Per i nodi autogestiti, Kubernetes Engine supporta le forme GPU disponibili per l'immagine OKE Oracle Linux 7 (OL7) o Oracle Linux 8 (OL8) selezionata quando si crea l'istanza di computazione per ospitare il nodo autogestito.

A causa dei limiti del servizio e delle quote del compartimento, alcune forme GPU supportate potrebbero non essere disponibili nella tenancy specifica.