Azure Kubernetes Service'te (AKS) yoğun işlem yoğunluklu iş yükleri için Windows GPU'larını kullanma (önizleme)
Grafik işleme birimleri (GPU' lar) genellikle grafikler ve görselleştirme iş yükleri gibi yoğun işlem gücü kullanan iş yükleri için kullanılır. AKS, yoğun işlem gücü kullanan Kubernetes iş yüklerini çalıştırmak için GPU özellikli Windows ve Linux düğüm havuzlarını destekler.
Bu makale, Windows düğümlerini yeni ve mevcut AKS kümelerinde zamanlanabilir GPU'larla (önizleme) hazırlamanıza yardımcı olur.
Desteklenen GPU özellikli sanal makineler (VM'ler)
Desteklenen GPU özellikli VM'leri görüntülemek için bkz . Azure'da GPU için iyileştirilmiş VM boyutları. AKS düğüm havuzları için en düşük Standard_NC6s_v3 boyutu önerilir. NVv4 serisi (AMD GPU'ları temel alınarak) AKS'de desteklenmez.
Not
GPU özellikli VM'ler, daha yüksek fiyatlandırma ve bölge kullanılabilirliğine tabi özel donanımlar içerir. Daha fazla bilgi için bkz . fiyatlandırma aracı ve bölge kullanılabilirliği.
Sınırlamalar
- GPU eklemek için mevcut bir Windows düğüm havuzunu güncelleştirme desteklenmez.
- Kubernetes sürüm 1.28 ve altında desteklenmez.
Başlamadan önce
- Bu makalede, mevcut bir AKS kümeniz olduğu varsayılır. Kümeniz yoksa Azure CLI, Azure PowerShell veya Azure portalını kullanarak bir küme oluşturun.
- Azure CLI sürüm 1.0.0b2 veya sonraki bir sürümün yüklenmiş ve bu alanı komutuyla
az aks nodepool add
kullanacak--skip-gpu-driver-install
şekilde yapılandırılmış olması gerekir. Sürümü bulmak içinaz --version
komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme. - Azure CLI sürüm 9.0.0b5 veya sonraki bir sürümün yüklü olması ve alanı komutuyla kullanmak
--driver-type
üzere yapılandırılmasıaz aks nodepool add
gerekir. Sürümü bulmak içinaz --version
komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
Kümenizin kimlik bilgilerini alma
komutunu kullanarak
az aks get-credentials
AKS kümenizin kimlik bilgilerini alın. Aşağıdaki örnek komut, myResourceGroup kaynak grubundaki myAKSCluster için kimlik bilgilerini alır:az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Otomatik sürücü yüklemesiyle Windows GPU kullanma
NVIDIA GPU'larının kullanılması Kubernetes için DirectX cihaz eklentisi, GPU sürücü yüklemesi ve daha fazlası gibi çeşitli NVIDIA yazılım bileşenlerinin yüklenmesini içerir. Desteklenen GPU özellikli vm ile bir Windows düğüm havuzu oluşturduğunuzda, bu bileşenler ve uygun NVIDIA CUDA veya GRID sürücüleri yüklenir. NC ve ND serisi VM boyutları için CUDA sürücüsü yüklenir. NV serisi VM boyutları için GRID sürücüsü yüklenir.
Önemli
AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "kullanılabilir" olarak sağlanır ve hizmet düzeyi sözleşmelerinin ve sınırlı garantinin dışında tutulur. AKS önizlemeleri, müşteri desteği tarafından kısmen en iyi çaba temelinde ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:
Azure CLI uzantısını aks-preview
yükleme
veya komutunu kullanarak aks-preview uzantısını kaydedin veya
az extension update
güncelleştirinaz extension add
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Özellik bayrağını WindowsGPUPreview
kaydetme
WindowsGPUPreview
komutunu kullanarak özellik bayrağınıaz feature register
kaydedin.az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
Durumun Kayıtlı olarak gösterilmesi birkaç dakika sürer.
komutunu kullanarak
az feature show
kayıt durumunu doğrulayın.az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
Durum Kayıtlı olarak yansıtıldığında, komutunu kullanarak Microsoft.ContainerService kaynak sağlayıcısının kaydını yenileyin
az provider register
.az provider register --namespace Microsoft.ContainerService
Windows GPU özellikli düğüm havuzu oluşturma (önizleme)
Windows GPU özellikli bir düğüm havuzu oluşturmak için desteklenen bir GPU özellikli VM boyutu kullanmanız ve olarak Windows
belirtmeniz os-type
gerekir. Varsayılan Windows os-sku
şeklindedir Windows2022
, ancak tüm Windows os-sku
seçenekleri desteklenir.
komutunu kullanarak
az aks nodepool add
Windows GPU özellikli bir düğüm havuzu oluşturun.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --os-type Windows \ --kubernetes-version 1.29.0 \ --node-vm-size Standard_NC6s_v3
GPU'larınızın zamanlanabilir olup olmadığını denetleyin.
GPU'larınızın zamanlanabilir olduğunu onayladıktan sonra GPU iş yükünüzü çalıştırabilirsiniz.
GPU Sürücü Türünü Belirtme (önizleme)
Varsayılan olarak AKS, desteklenen gpu özellikli her VM için varsayılan bir GPU sürücü türü belirtir. İş yükü ve sürücü uyumluluğu GPU iş yüklerinin çalışması için önemli olduğundan, Windows GPU düğümünüzün sürücü türünü belirtebilirsiniz. Bu özellik Linux GPU düğüm havuzları için desteklenmez.
GPU desteğine sahip bir Windows aracı havuzu oluştururken, bayrağını kullanarak --driver-type
GPU sürücüsünün türünü belirtme seçeneğiniz vardır.
Sunduğumuz seçenekler şunlardır:
- GRID: Sanallaştırma desteği gerektiren uygulamalar için.
- CUDA: Bilimsel bilgi işlem ve yoğun veri kullanımı gerektiren uygulamalarda hesaplama görevleri için iyileştirilmiştir.
Not
Bayrağı ayarladığınızda --driver-type
, seçilen sürücü türünün düğüm havuzunuzun belirli VM boyutu ve yapılandırmasıyla uyumlu olduğundan emin olunmasının sorumluluğunu üstlenirsiniz. AKS uyumluluğu doğrulamaya çalışırken, düğüm havuzu oluşturma işleminin belirtilen sürücü türüyle temel alınan VM veya donanım arasındaki uyumsuzluklar nedeniyle başarısız olabileceği senaryolar vardır.
Belirli bir GPU Sürücüsü türüyle Windows GPU özellikli bir düğüm havuzu oluşturmak için komutunu kullanın az aks nodepool add
.
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name gpunp \
--node-count 1 \
--os-type Windows \
--kubernetes-version 1.29.0 \
--node-vm-size Standard_NC6s_v3 \
--driver-type GRID
Örneğin, yukarıdaki komut GPU sürücü türünü kullanarak GRID
GPU özellikli bir düğüm havuzu oluşturur. Bu sürücü türünün seçilmesi, NC serisi VM sku'ları için varsayılan CUDA
sürücü türünü geçersiz kılar.
Windows GPU'larını el ile sürücü yükleme ile kullanma
AKS'de N serisi (NVIDIA GPU) VM boyutlarına sahip bir Windows düğüm havuzu oluştururken, GPU sürücüsü ve Kubernetes DirectX cihaz eklentisi otomatik olarak yüklenir. Bu otomatik yüklemeyi atlamak için aşağıdaki adımları kullanın:
- kullanarak
--skip-gpu-driver-install
GPU sürücüsü yüklemesini (önizleme) atlayın. - Kubernetes DirectX cihaz eklentisinin el ile yüklenmesi.
GPU sürücüsü yüklemesini atlama (önizleme)
AKS'de varsayılan olarak otomatik GPU sürücüsü yüklemesi etkindir. Kendi sürücülerinizi yükleme gibi bazı durumlarda GPU sürücüsü yüklemesini atlamak isteyebilirsiniz.
Önemli
AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "kullanılabilir" olarak sağlanır ve hizmet düzeyi sözleşmelerinin ve sınırlı garantinin dışında tutulur. AKS önizlemeleri, müşteri desteği tarafından kısmen en iyi çaba temelinde ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:
veya komutunu kullanarak aks-preview uzantısını kaydedin veya
az extension update
güncelleştirinaz extension add
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Otomatik GPU sürücüsü yüklemesini
az aks nodepool add
atlamak için bayrağıyla--skip-gpu-driver-install
komutunu kullanarak bir düğüm havuzu oluşturun.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --os-type windows \ --os-sku windows2022 \ --skip-gpu-driver-install
Not
--node-vm-size
Kullandığınız değer HENÜZ AKS'ye eklenmemişse GPU'ları kullanamazsınız ve --skip-gpu-driver-install
çalışmaz.
Kubernetes DirectX cihaz eklentisini el ile yükleme
GPU'lar için gerekli sürücüleri sağlamak üzere her düğümde bir pod çalıştıran Kubernetes DirectX cihaz eklentisi için bir DaemonSet dağıtabilirsiniz.
komutunu kullanarak
az aks nodepool add
kümenize bir düğüm havuzu ekleyin.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --os-type windows \ --os-sku windows2022
Ad alanı oluşturma ve Kubernetes DirectX cihaz eklentisini dağıtma
komutunu kullanarak
kubectl create namespace
bir ad alanı oluşturun.kubectl create namespace gpu-resources
k8s-directx-device-plugin.yaml adlı bir dosya oluşturun ve Kubernetes için NVIDIA cihaz eklentisi projesi kapsamında sağlanan aşağıdaki YAML bildirimini yapıştırın:
apiVersion: apps/v1 kind: DaemonSet metadata: name: nvidia-device-plugin-daemonset namespace: gpu-resources spec: selector: matchLabels: name: nvidia-device-plugin-ds updateStrategy: type: RollingUpdate template: metadata: # Mark this pod as a critical add-on; when enabled, the critical add-on scheduler # reserves resources for critical add-on pods so that they can be rescheduled after # a failure. This annotation works in tandem with the toleration below. annotations: scheduler.alpha.kubernetes.io/critical-pod: "" labels: name: nvidia-device-plugin-ds spec: tolerations: # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode. # This, along with the annotation above marks this pod as a critical add-on. - key: CriticalAddonsOnly operator: Exists - key: nvidia.com/gpu operator: Exists effect: NoSchedule - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule" containers: - image: mcr.microsoft.com/oss/nvidia/k8s-device-plugin:v0.14.1 name: nvidia-device-plugin-ctr securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] volumeMounts: - name: device-plugin mountPath: /var/lib/kubelet/device-plugins volumes: - name: device-plugin hostPath: path: /var/lib/kubelet/device-plugins
DaemonSet'i oluşturun ve komutunu kullanarak NVIDIA cihaz eklentisinin başarıyla oluşturulduğunu
kubectl apply
onaylayın.kubectl apply -f nvidia-device-plugin-ds.yaml
Artık NVIDIA cihaz eklentisini başarıyla yüklediğinize göre GPU'larınızın zamanlanabilir olup olmadığını kontrol edebilirsiniz.
GPU'ların zamanlanabilir olduğunu onaylayın
Kümenizi oluşturduktan sonra GPU'ların Kubernetes'te zamanlanabilir olduğunu onaylayın.
komutunu kullanarak kümenizdeki düğümleri listeleyin
kubectl get nodes
.kubectl get nodes
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
NAME STATUS ROLES AGE VERSION aks-gpunp-28993262-0 Ready agent 13m v1.20.7
komutunu kullanarak
kubectl describe node
GPU'ların zamanlanabilir olduğunu onaylayın.kubectl describe node aks-gpunp-28993262-0
Kapasite bölümünün altında GPU olarak
microsoft.com/directx: 1
listelenmelidir. Çıkışınız aşağıdaki daraltılmış örnek çıkışa benzer olmalıdır:Capacity: [...] microsoft.com.directx/gpu: 1 [...]
GPU kullanımını izlemek için Container Insights'ı kullanma
AKS ile Container Insights aşağıdaki GPU kullanım ölçümlerini izler:
Ölçüm adı | Ölçüm boyutu (etiketler) | Açıklama |
---|---|---|
containerGpuDutyCycle | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , , gpuId , gpuModel , gpuVendor |
GPU'nun bir kapsayıcı için meşgul/etkin olarak işlendiği geçmiş örnek dönemi (60 saniye) içindeki zaman yüzdesi. Görev döngüsü 1 ile 100 arasında bir sayıdır. |
containerGpuLimits | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName |
Her kapsayıcı sınırları bir veya daha fazla GPU olarak belirtebilir. GPU'nun bir bölümünü istemek veya sınırlamak mümkün değildir. |
containerGpuRequests | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName |
Her kapsayıcı bir veya daha fazla GPU isteyebilir. GPU'nun bir bölümünü istemek veya sınırlamak mümkün değildir. |
containerGpumemoryTotalBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , , gpuId , gpuModel , gpuVendor |
Belirli bir kapsayıcı için kullanılabilen bayt cinsinden GPU Belleği miktarı. |
containerGpumemoryUsedBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , , gpuId , gpuModel , gpuVendor |
Belirli bir kapsayıcı tarafından kullanılan bayt cinsinden GPU Belleği miktarı. |
nodeGpuAllocatable | container.azm.ms/clusterId , container.azm.ms/clusterName , gpuVendor |
Kubernetes'in kullanabileceği düğümdeki GPU sayısı. |
nodeGpuCapacity | container.azm.ms/clusterId , container.azm.ms/clusterName , gpuVendor |
Bir düğümdeki TOPLAM GPU sayısı. |
Kaynakları temizleme
komutunu kullanarak
kubectl delete job
bu makalede oluşturduğunuz ilişkili Kubernetes nesnelerini kaldırın.kubectl delete jobs windows-gpu-workload
Sonraki adımlar
- Apache Spark işlerini çalıştırmak için bkz . AKS üzerinde Apache Spark işleri çalıştırma.
- Kubernetes zamanlayıcısının özellikleri hakkında daha fazla bilgi için bkz . AKS'de gelişmiş zamanlayıcı özellikleri için en iyi yöntemler.
- Azure Kubernetes Service ve Azure Machine Learning hakkında daha fazla bilgi için bkz:
- ML modeli eğitimi veya dağıtımı için bir Kubernetes kümesi yapılandırın.
- Çevrimiçi uç nokta ile model dağıtma.
- Triton Çıkarım Sunucusu ile yüksek performanslı hizmet.
- Kubernetes ve Kubeflow için laboratuvarlar.
Azure Kubernetes Service