Esegui contenitori con accelerazione GPU (Windows su G-Series) EC2 - Amazon EKS

Aiutaci a migliorare questa pagina

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina nel riquadro destro di ogni pagina.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esegui contenitori con accelerazione GPU (Windows su G-Series) EC2

Importante

Il Kubernetes Device Plugin per DirectX by TensorWorks è uno strumento di terze parti che non è approvato, supportato o gestito da. AWS AWS non si assume alcuna responsabilità per la sicurezza, l'affidabilità o le prestazioni di questo plugin.

Scopri come eseguire carichi di lavoro di container Windows accelerati da GPU su Amazon EKS (Elastic Kubernetes Service) utilizzando NVIDIA GPUs con il Kubernetes Device Plugin per DirectX di. TensorWorks Per ulteriori informazioni, consulta Kubernetes Device Plugin per DirectX.

Esistono due approcci principali per configurare l'accelerazione GPU per i contenitori Windows:

  • Opzione 1: crea un'AMI EKS ottimizzata per Windows personalizzata con i driver GPU richiesti preinstallati.

    • Utilizza questo approccio quando hai bisogno di un ambiente coerente e preconfigurato pronto per eseguire contenitori Windows accelerati da GPU e sei in grado di investire gli sforzi aggiuntivi per creare e mantenere l'AMI personalizzata.

  • Opzione 2: installa i driver GPU necessari sui nodi di lavoro EKS dopo aver avviato l'istanza.

    • Utilizza questo approccio quando desideri un processo di configurazione più semplice e non preoccuparti di installare i driver GPU su ogni nuovo nodo di lavoro. Più adatto a un ambiente di sviluppo per la valutazione o la prototipazione di carichi di lavoro accelerati da GPU.

Entrambi gli approcci possono essere sfruttati utilizzando i passaggi descritti in questa guida.

Considerazioni

Questa guida fornisce i passaggi per installare e configurare l'accelerazione GPU per i contenitori Windows utilizzando NVIDIA GPUs, i driver NVIDIA GRID e il Kubernetes Device Plugin per DirectX by. TensorWorks I passaggi sono stati testati e verificati per fornire l'accelerazione GPU per i carichi di lavoro dei container Windows su Amazon EKS. Limiti notiPer ulteriori informazioni sui driver e sui plug-in dei dispositivi compatibili, consulta la pagina. Prima di procedere, tenete presente quanto segue:

  • Solo i tipi di istanze della famiglia G con driver NVIDIA GRID sono stati testati e verificati per funzionare con questa guida. Sebbene altri tipi di istanze e combinazioni di driver possano anche essere in grado di eseguire contenitori Windows con accelerazione GPU, potrebbero richiedere passaggi di configurazione aggiuntivi non descritti in questa guida.

  • Solo i carichi di lavoro basati su DirectX sono stati testati e verificati per funzionare con questa guida. Sebbene altre GPU APIs come OpenGL, Vulkan e OpenCL possano essere potenzialmente compatibili per l'esecuzione di contenitori Windows con accelerazione GPU, potrebbero richiedere passaggi di configurazione aggiuntivi non trattati in questa guida.

  • Esistono alcune limitazioni note di cui tenere conto prima di eseguire contenitori Windows con accelerazione GPU. Per ulteriori informazioni, consulta la Limiti noti sezione.

Prerequisiti

Per abilitare l'accelerazione GPU per i contenitori Windows su Amazon EKS, devi preparare i seguenti requisiti prima di procedere:

Installa il driver GPU su ogni nodo Windows Windows

Per installare i driver NVIDIA GRID sui nodi di lavoro EKS, segui i passaggi descritti nei driver NVIDIA per la tua istanza Amazon. EC2 Vai a Opzioni di installazione - Opzione 3: driver GRID e segui i passaggi di installazione.

Installa per Windows Server Core

Per Windows Server Core, che non offre un'esperienza desktop, installa i driver NVIDIA GRID in modo invisibile utilizzando i seguenti comandi:

$nvidiaInstallerFilePath = nvidia-driver-installer.exe # Replace with path to installer $installerArguments = "-s -clean -noreboot -noeula" Start-Process -FilePath $nvidiaInstallerFilePath -ArgumentList $installerArguments -Wait -NoNewWindow -PassThru

Verifica l'installazione

Eseguite il PowerShell comando seguente per visualizzare le informazioni di diagnostica GPUs relative all'istanza:

nvidia-smi

Questo comando visualizza la versione del driver NVIDIA e informazioni sull'hardware della GPU. Assicurati che l'output di questo comando corrisponda alla versione del driver NVIDIA GRID che prevedi di installare.

Implementa il plug-in del dispositivo GPU su ogni nodo

Per consentire il rilevamento e l'esposizione delle risorse della GPU ai contenitori sui nodi Windows, è necessario un plug-in per il dispositivo. Distribuisci il DirectX Device Plugin di Tensorworks su ogni nodo di lavoro eseguendolo come DaemonSet nel tuo cluster EKS. Segui la guida all'installazione specificata nel README.md, che comporterà i seguenti passaggi. Si consiglia di:

  • Implementa il plug-in del dispositivo nello kube-system spazio dei nomi.

  • Imposta limiti di risorse appropriati DaemonSet per assicurarti che non consumi risorse eccessive sui tuoi nodi.

Nota

Il plug-in del dispositivo DaemonSet verrà eseguito su ogni nodo come contenitore di processi host con privilegi elevati. Si consiglia di implementare i controlli RBAC per limitare l'accesso a questo in DaemonSet modo che solo gli utenti autorizzati possano eseguire comandi privilegiati.

Quando si eseguono contenitori accelerati da GPU, il plug-in del dispositivo supporta due modalità:

  • Modalità single-tenancy: questa modalità dedica tutte le risorse GPU a un singolo contenitore sull'istanza. Installa i plugin del dispositivo con supporto single-tenancy utilizzando il comando seguente. Vedi README.md per ulteriori informazioni.

    kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/default-daemonsets.yml"
  • Modalità multi-tenancy: questa modalità consente di condividere le risorse GPU tra più contenitori sull'istanza. Installa i plugin del dispositivo con supporto multi-tenancy utilizzando il seguente comando. Vedi README.md per ulteriori informazioni.

    kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/multitenancy-inline.yml"

    In alternativa, utilizzate ConfigMap a per specificare la multi-tenancy.

    kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/multitenancy-configmap.yml"

Verifica della distribuzione del plug-in del dispositivo

Dopo aver distribuito il plug-in del dispositivo, sostituisci <namespace> ed esegui il comando seguente per verificare che il plug-in del dispositivo DirectX funzioni correttamente su tutti i nodi Windows.

kubectl get ds device-plugin-wddm -n <namespace>

Verifica che i contenitori siano pronti per la distribuzione

Una volta che il plug-in del dispositivo DaemonSet è in esecuzione sui nodi di lavoro di Windows basati su GPU, utilizza il comando seguente per verificare che ogni nodo sia allocabile. GPUs Il numero corrispondente deve corrispondere al numero di dispositivi DirectX su ciascun nodo.

kubectl get nodes "-o=custom-columns=NAME:.metadata.name,DirectX:.status.allocatable.directx\.microsoft\.com/display"

Esecuzione di contenitori Windows con accelerazione GPU

Prima di avviare i pod, specifica il nome della risorsa in. directx.microsoft.com/display .spec.containers[].resources Ciò indicherà che i contenitori richiedono funzionalità basate su GPU e kube-scheduler cercheranno di posizionare i pod sul nodo Windows preconfigurato con le risorse GPU disponibili.

Ad esempio, vedi il comando di esempio riportato di seguito che avvia una simulazione Monte Carlo Job per stimare il valore di pi. Questo esempio proviene dall'archivio Kubernetes Device Plugins for GitHub DirectX, che offre diversi esempi tra cui scegliere che puoi eseguire per testare le funzionalità della GPU dei nodi Windows.

cat <<EOF | kubectl apply -f - apiVersion: batch/v1 kind: Job metadata: name: example-cuda-montecarlo-wddm spec: template: spec: containers: - name: example-cuda-montecarlo-wddm image: "index.docker.io/tensorworks/example-cuda-montecarlo:0.0.1" resources: limits: directx.microsoft.com/display: 1 nodeSelector: "kubernetes.io/os": windows restartPolicy: Never backoffLimit: 0 EOF

Limiti noti

Sono tutti utilizzabili GPUs

Tutto GPUs sull'istanza sarà utilizzabile da ogni contenitore in esecuzione sull'host, anche quando si richiede un numero specifico di GPUs per un determinato contenitore. Inoltre, il comportamento predefinito prevede che tutti i contenitori in esecuzione sull'host utilizzeranno la GPU con indice 0, anche se ce ne sono più GPUs disponibili sul nodo. Pertanto, affinché le attività con più GPU funzionino correttamente, è necessario designare esplicitamente il dispositivo GPU specifico da utilizzare all'interno del codice dell'applicazione.

L'implementazione esatta per allocare un dispositivo da utilizzare per l'applicazione dipenderà dal linguaggio di programmazione o dal framework in uso. Ad esempio, se utilizzi la programmazione CUDA, per selezionare una GPU specifica, puoi specificare esplicitamente il dispositivo da utilizzare nel codice dell'applicazione utilizzando la funzione (). cudaSetDevice

La necessità di specificare in modo esplicito il dispositivo è dovuta a un problema noto che interessa i contenitori Windows. È possibile tenere traccia dei progressi nella risoluzione di questo problema nel numero #333 di Microsoft/Windows-Containers. La tabella seguente rappresenta una rappresentazione visiva e un esempio pratico di questo comportamento di allocazione delle GPU.

Consideriamo uno scenario in cui esiste un singolo nodo Windows di tipo di EC2 istanzag4dn.12xlarge, che ne include quattro. GPUs Consideriamo uno scenario in cui vengono lanciati tre pod su questa istanza. La tabella mostra che, indipendentemente dal numero di GPUs richieste da ciascun contenitore, tutti e tre i pod hanno accesso a tutti e quattro GPUs sull'istanza e, per impostazione predefinita, utilizzeranno la GPU con indice di dispositivo 0.

Pod Richiesto GPUs Accesso effettivo alla GPU Utilizzo predefinito della GPU Indici GPU disponibili Istanza totale GPUs

Pod 1

1 GPU

Tutti e 4 GPUs

GPU con indice 0

0, 1, 2, 3

4

Cialda 2

2 GPUs

Tutti e 4 GPUs

GPU con indice 0

0, 1, 2, 3

4

Cialda 3

1 GPU

Tutti e 4 GPUs

GPU con indice 0

0, 1, 2, 3

4

Supporto per plug-in per dispositivi Kubernetes

L'implementazione ufficiale di NVIDIA del plug-in per dispositivi Kubernetes non supporta Windows. Puoi tenere traccia dei progressi nell'aggiunta del supporto ufficiale per Windows nel numero #419 di NVIDIA/K8. s-device-plugin

Limitazioni delle istanze di calcolo GPU

A seconda della configurazione del tuo AWS account, potresti avere dei limiti di servizio sul numero e sui tipi di istanze di calcolo Amazon EC2 GPU che puoi avviare. Se hai bisogno di capacità aggiuntiva, puoi richiedere un aumento della quota.

È necessario creare un'AMI ottimizzata per GPU Windows

Amazon EKS non offre AMI EKS Windows GPU Optimized o componenti gestiti da EC2 Image Builder. È necessario seguire i passaggi di questa guida per creare un'AMI EKS ottimizzata per Windows personalizzata con i driver GPU richiesti preinstallati o installare i driver GPU necessari sui nodi di lavoro EKS dopo l'avvio delle istanze.

Inferentia e Trainium non sono supportati

AWS I carichi di lavoro basati su Inferentia e AWS Trainium non sono supportati su Windows.