Contribuisci 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 container accelerati da GPU (Windows su EC2 G-Series)
Importante
Il Kubernetes Device Plugin per DirectX
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 for DirectX
Esistono due approcci principali per configurare l’accelerazione GPU per i container 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, pre-configurato e pronto per eseguire container Windows accelerati da GPU e quando sei in grado di investire le energie aggiuntive necessarie per creare e mantenere l’AMI personalizzata.
-
-
Opzione 2: installa i driver GPU necessari sui nodi worker EKS dopo aver avviato l’istanza.
-
Utilizza questo approccio quando desideri un processo di configurazione più semplice e puoi installare i driver GPU su ogni nuovo nodo worker. 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.
-
Solo i tipi di istanze della famiglia G con NVIDIA GRID drivers sono stati testati e verificati per funzionare con questa guida. Esistono sicuramente altri tipi di istanze e combinazioni di driver in grado di eseguire container Windows con accelerazione GPU, ma 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 il funzionamento 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 container Windows con accelerazione GPU. Consulta la sezione Limiti noti per ulteriori informazioni.
Prerequisiti
Per abilitare l’accelerazione GPU per i container Windows su Amazon EKS, devi preparare i seguenti requisiti prima di procedere:
-
Avvia un cluster Amazon EKS con Kubernetes v1.27 o successive.
-
Esegui il provisioning dei nodi Windows con Windows Server 2022 o versioni successive.
-
Esegui il provisioning dei nodi Windows nei tipi di istanze della famiglia G, come G4
o G5 . -
Esegui il provisioning dei nodi Windows con un runtime dei container con containerd
1.7.xo2.x.x. (Vedi Recupero delle informazioni sulla versione delle AMI Windows per verificare la versione del containerd nella tua AMI ottimizzata di Amazon EKS).
Installa il driver GPU su ogni nodo di Windows
Per installare i driver NVIDIA GRID sui nodi worker EKS, segui i passaggi descritti in NVIDIA drivers for your Amazon EC2 instance. Vai a Installation options - Option 3: GRID drivers e segui i passaggi per l’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 dell’installazione
Esegui il PowerShell comando seguente per visualizzare le informazioni di diagnostica relative GPUs all'istanza:
nvidia-smi
Questo comando mostra la versione del driver NVIDIA e le 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 container sui nodi Windows, è necessario un plug-in per il dispositivo. Implementa il DirectX Device
-
Implementare il plug-in del dispositivo nel namespace
kube-system. -
Imposta i 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.
Durante l’esecuzione di container accelerati da GPU, il plug-in del dispositivo supporta due modalità:
-
Modalità a tenancy singola: questa modalità dedica tutte le risorse GPU a un singolo container sull’istanza. Installa i plug-in del dispositivo con supporto della tenancy singola utilizzando il comando seguente: Per ulteriori informazioni, consulta il file README.md.
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ù container sull’istanza. Installa i plug-in del dispositivo con supporto della multi-tenancy utilizzando il comando seguente: Per ulteriori informazioni, consulta il file README.md.
kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/multitenancy-inline.yml"In alternativa, utilizzare ConfigMap a per specificare la multi-tenancy.
kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/multitenancy-configmap.yml"
Verifica dell’implementazione 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 container siano pronti per l’implementazione
Una volta che il plug-in del dispositivo DaemonSet è in esecuzione sui nodi di lavoro di Windows alimentati da GPU, usa 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 container Windows con accelerazione GPU
Prima di avviare i pod, specifica il nome della risorsa directx.microsoft.com/display in .spec.containers[].resources. Questo indicherà che i container richiedono funzionalità basate su GPU e kube-scheduler cercherà di posizionare i pod sul nodo Windows preconfigurato con le risorse GPU disponibili.
Vedi il comando di esempio riportato di seguito che avvia Job per eseguire una simulazione Monte Carlo e stimare il valore di pi. Questo esempio proviene dall'archivio Kubernetes Device Plugins for GitHub DirectX
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ù di uno 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 in modo esplicito 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 container Windows. È possibile tenere traccia dei progressi nella risoluzione di questo problema nel microsoft/Windows-Containers issue #333
Consideriamo uno scenario in cui esiste un singolo nodo Windows di tipo di istanza EC2g4dn.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 disponibili della GPU | Istanza totale GPUs |
|---|---|---|---|---|---|
|
Pod 1 |
1 GPU |
Tutte e 4 GPUs |
GPU con indice 0 |
0, 1, 2, 3 |
4 |
|
Pod 2 |
2 GPUs |
Tutti e 4 GPUs |
GPU con indice 0 |
0, 1, 2, 3 |
4 |
|
Pod 3 |
1 GPU |
Tutti e 4 GPUs |
GPU con indice 0 |
0, 1, 2, 3 |
4 |
Supporto per il plug-in dei dispositivi Kubernetes
L’implementazione ufficiale di NVIDIA del Kubernetes 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 GPU Amazon EC2 che puoi avviare. Se hai bisogno di capacità aggiuntiva, consulta Request a quota increase.
È necessario creare un’AMI ottimizzata per GPU Windows
Amazon EKS non fornisce alcuna AMI EKS ottimizzata per GPU Windows né un componente gestito da EC2 Image Builder. È necessario seguire i passaggi di questa guida per creare un’AMI EKS ottimizzata per Windows e personalizzata con i driver GPU richiesti preinstallati o installare i driver GPU necessari sui nodi worker EKS dopo l’avvio delle istanze.
Inferentia e Trainium non sono supportati
I carichi di lavoro basati su AWS
Inferentia