Azure Kubernetes Service'te (AKS) işlem yoğunluklu iş yükleri için GPU'ları kullanma
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 Linux düğüm havuzlarını destekler.
Bu makale, yeni ve mevcut AKS kümelerinde zamanlanabilir GPU'larla düğümler sağlamanıza yardımcı olur.
Desteklenen GPU özellikli 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
- Azure Linux GPU özellikli bir düğüm havuzu kullanıyorsanız otomatik güvenlik düzeltme ekleri uygulanmaz. Düğüm işletim sistemi yükseltme kanalının varsayılan davranışı için geçerli AKS API sürümünüze bakın.
Not
AKS API sürüm 2023-06-01 veya üzeri için düğüm işletim sistemi yükseltmesi için varsayılan kanal NodeImage'dır. Önceki sürümler için varsayılan kanal Yok'dur. Daha fazla bilgi edinmek için bkz . otomatik yükseltme.
- NVadsA10 v5 serisi , GPU VHD için önerilen bir SKU değildir .
- Gpu eklemek için mevcut düğüm havuzunu güncelleştirme desteklenmez.
Not
AKS GPU görüntüsü (önizleme) 10 Ocak 2025 tarihinden itibaren kullanımdan kaldırılmıştır. Özel üst bilgi artık kullanılamaz, yani AKS GPU görüntüsünü kullanarak yeni GPU özellikli düğüm havuzları oluşturamazsınız. GPU görüntüsü artık desteklenmediğinden GPU görüntüsü yerine varsayılan GPU yapılandırmasına geçiş yapmanızı veya bu yapılandırmayı kullanmanızı öneririz. Daha fazla bilgi için AKS sürüm notları bölümüne bakın veya AKS genel yol haritamızda bu kullanımdan kaldırma duyurusunu görüntüleyin.
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 2.0.64 veya üzerinin yüklü ve yapılandırılmış olması gerekir. Sürümü bulmak için
az --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
NVIDIA GPU'larını kullanma seçenekleri
NVIDIA GPU'larının kullanılması Kubernetes için NVIDIA cihaz eklentisi, GPU sürücü yüklemesi ve daha fazlası gibi çeşitli NVIDIA yazılım bileşenlerinin yüklenmesini içerir.
Not
Varsayılan olarak, Microsoft düğüm görüntüsü dağıtımının bir parçası olarak NVidia sürücülerinin sürümünü otomatik olarak korur ve AKS bunu destekler ve yönetir . NVidia sürücüleri varsayılan olarak GPU özellikli düğümlere yüklenirken cihaz eklentisini yüklemeniz gerekir.
NVIDIA cihaz eklentisi yüklemesi
AKS'de GPU'lar kullanılırken NVIDIA cihaz eklentisi yüklemesi gereklidir. Bazı durumlarda yükleme, örneğin NVIDIA GPU operatörü kullanılırken otomatik olarak işlenir. Alternatif olarak, NVIDIA cihaz eklentisini el ile yükleyebilirsiniz.
NVIDIA 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 NVIDIA cihaz eklentisi için bir DaemonSet dağıtabilirsiniz. Bu, Azure Linux için GPU özellikli düğüm havuzları kullanılırken önerilen yaklaşımdır.
Varsayılan işletim sistemi SKU'su kullanmak için, bir işletim sistemi SKU'su belirtmeden düğüm havuzunu oluşturursunuz. Düğüm havuzu, kümenin Kubernetes sürümüne göre varsayılan işletim sistemi için yapılandırılır.
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 \ --node-vm-size Standard_NC6s_v3 \ --node-taints sku=gpu:NoSchedule \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3
Bu komut, myResourceGroup'taki myAKSCluster'a gpunp adlı bir düğüm havuzu ekler ve aşağıdaki düğüm havuzu ayarlarını yapılandırmak için parametreleri kullanır:
--node-vm-size
: Düğüm havuzundaki düğümün VM boyutunu Standard_NC6s_v3 olarak ayarlar.--node-taints
: Düğüm havuzundaki sku =gpu:NoSchedule renk tonunu belirtir.--enable-cluster-autoscaler
: Küme otomatik ölçeklendiricisini etkinleştirir.--min-count
: Küme otomatik ölçeklendiricisini düğüm havuzunda en az bir düğümü koruyacak şekilde yapılandırılır.--max-count
: Küme otomatik ölçeklendiricisini, düğüm havuzunda en fazla üç düğüm koruyacak şekilde yapılandırılır.
Not
Renk tonları ve VM boyutları yalnızca düğüm havuzu oluşturma sırasında düğüm havuzları için ayarlanabilir, ancak otomatik ölçeklendirici ayarlarını istediğiniz zaman güncelleştirebilirsiniz.
komutunu kullanarak
kubectl create namespace
bir ad alanı oluşturun.kubectl create namespace gpu-operator
nvidia-device-plugin-ds.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: kube-system spec: selector: matchLabels: name: nvidia-device-plugin-ds updateStrategy: type: RollingUpdate template: metadata: labels: name: nvidia-device-plugin-ds spec: tolerations: - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule" # 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. # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/ priorityClassName: "system-node-critical" containers: - image: nvcr.io/nvidia/k8s-device-plugin:v0.15.0 name: nvidia-device-plugin-ctr env: - name: FAIL_ON_INIT_ERROR value: "false" 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
NVIDIA cihaz eklentisini başarıyla yüklediğinize göre, GPU'larınızın zamanlanabilir olup olmadığını denetleyebilirsiniz ve bir GPU iş yükü çalıştırabilirsiniz.
GPU sürücüsü yüklemesini atlama (önizleme)
NVidia sürücülerinin yüklenmesini denetlemek veya NVIDIA GPU Operatörünü kullanmak istiyorsanız, varsayılan GPU sürücüsü yüklemesini atlayabilirsiniz. Microsoft , düğüm görüntüsü dağıtımının bir parçası olarak NVidia sürücülerinin bakım ve uyumluluğunu desteklemez veya yönetmez .
Ö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 \ --skip-gpu-driver-install \ --node-vm-size Standard_NC6s_v3 \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3
Düğüm havuzu oluşturma sırasında bayrağının
--skip-gpu-driver-install
eklenmesi, otomatik GPU sürücüsü yüklemesini atlar. Mevcut düğümler değiştirilmez. Değişikliğin etkili olması için düğüm havuzunu sıfıra ölçeklendirin ve sonra yedekleyin.
AKS ile NVIDIA GPU operatörü kullanma
NVIDIA GPU Operatörü, sürücü yüklemesi, Kubernetes için NVIDIA cihaz eklentisi, NVIDIA kapsayıcı çalışma zamanı ve daha fazlası dahil olmak üzere GPU sağlamak için gereken tüm NVIDIA yazılım bileşenlerinin yönetimini otomatikleştirir. GPU Operatörü bu bileşenleri işlediğinden NVIDIA cihaz eklentisini el ile yüklemeniz gerekmez. Bu, AKS'de otomatik GPU sürücüsü yüklemesinin artık gerekli olmadığı anlamına da gelir.
ile
--skip-gpu-driver-install
komutunu kullanarak bir düğüm havuzu oluşturarak otomatik GPU sürücüsü yüklemesiniaz aks nodepool add
atlayın. Düğüm havuzu oluşturma sırasında bayrağının--skip-gpu-driver-install
eklenmesi, otomatik GPU sürücüsü yüklemesini atlar. Mevcut düğümler değiştirilmez. Değişikliğin etkili olması için düğüm havuzunu sıfıra ölçeklendirin ve sonra yedekleyin.GPU operatörünü yüklemek için NVIDIA belgelerini izleyin.
GPU operatörünü başarıyla yüklediğinize göre GPU'larınızın zamanlanabilir olup olmadığını denetleyebilirsiniz ve bir GPU iş yükü çalıştırabilirsiniz.
Not
NVIDIA GPU operatörünü kullanırken ve SPOT örneklerine dağıtırken dikkat edilmesi gereken ek noktalar olabilir. Bkz. https://github.com/NVIDIA/gpu-operator/issues/577
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
nvidia.com/gpu: 1
listelenmelidir. Çıkışınız aşağıdaki daraltılmış örnek çıkışa benzer olmalıdır:Name: aks-gpunp-28993262-0 Roles: agent Labels: accelerator=nvidia [...] Capacity: [...] nvidia.com/gpu: 1 [...]
GPU özellikli iş yükü çalıştırma
GPU'yı iş başında görmek için uygun kaynak isteğiyle GPU özellikli bir iş yükü zamanlayabilirsiniz. Bu örnekte, MNIST veri kümesinde bir Tensorflow işi çalıştıracağız.
samples-tf-mnist-demo.yaml adlı bir dosya oluşturun ve kaynak sınırı içeren aşağıdaki YAML bildirimini
nvidia.com/gpu: 1
yapıştırın:Not
Sürücülere çağrı yaparken "CUDA sürücü sürümü CUDA çalışma zamanı sürümü için yetersiz" gibi bir sürüm uyuşmazlığı hatası alırsanız NVIDIA sürücü matrisi uyumluluk grafiğini gözden geçirin.
apiVersion: batch/v1 kind: Job metadata: labels: app: samples-tf-mnist-demo name: samples-tf-mnist-demo spec: template: metadata: labels: app: samples-tf-mnist-demo spec: containers: - name: samples-tf-mnist-demo image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu args: ["--max_steps", "500"] imagePullPolicy: IfNotPresent resources: limits: nvidia.com/gpu: 1 restartPolicy: OnFailure tolerations: - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule"
Bildirim dosyasını ayrıştıran ve tanımlı Kubernetes nesnelerini oluşturan komutunu kullanarak
kubectl apply
işi çalıştırın.kubectl apply -f samples-tf-mnist-demo.yaml
GPU özellikli iş yükünün durumunu görüntüleme
bayrağıyla komutunu kullanarak
kubectl get jobs
işin ilerleme durumunu--watch
izleyin. Önce görüntüyü çekmek ve veri kümesini işlemek birkaç dakika sürebilir.kubectl get jobs samples-tf-mnist-demo --watch
TAMAMLANMALAR sütununda 1/1 gösterildiğinde, aşağıdaki örnek çıktıda gösterildiği gibi iş başarıyla tamamlanmıştır:
NAME COMPLETIONS DURATION AGE samples-tf-mnist-demo 0/1 3m29s 3m29s samples-tf-mnist-demo 1/1 3m10s 3m36s
Ctrl-C ile işlemden
kubectl --watch
çıkın.komutunu kullanarak
kubectl get pods
podun adını alın.kubectl get pods --selector app=samples-tf-mnist-demo
komutunu kullanarak GPU özellikli iş yükünün çıkışını
kubectl logs
görüntüleyin.kubectl logs samples-tf-mnist-demo-smnr6
Pod günlüklerinin aşağıdaki daraltılmış örnek çıktısı,
Tesla K80
uygun GPU cihazının bulunduğunu onaylar:2019-05-16 16:08:31.258328: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA 2019-05-16 16:08:31.396846: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235 pciBusID: 2fd7:00:00.0 totalMemory: 11.17GiB freeMemory: 11.10GiB 2019-05-16 16:08:31.396886: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 2fd7:00:00.0, compute capability: 3.7) 2019-05-16 16:08:36.076962: I tensorflow/stream_executor/dso_loader.cc:139] successfully opened CUDA library libcupti.so.8.0 locally Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes. Extracting /tmp/tensorflow/input_data/train-images-idx3-ubyte.gz Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes. Extracting /tmp/tensorflow/input_data/train-labels-idx1-ubyte.gz Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes. Extracting /tmp/tensorflow/input_data/t10k-images-idx3-ubyte.gz Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes. Extracting /tmp/tensorflow/input_data/t10k-labels-idx1-ubyte.gz Accuracy at step 0: 0.1081 Accuracy at step 10: 0.7457 Accuracy at step 20: 0.8233 Accuracy at step 30: 0.8644 Accuracy at step 40: 0.8848 Accuracy at step 50: 0.8889 Accuracy at step 60: 0.8898 Accuracy at step 70: 0.8979 Accuracy at step 80: 0.9087 Accuracy at step 90: 0.9099 Adding run metadata for 99 Accuracy at step 100: 0.9125 Accuracy at step 110: 0.9184 Accuracy at step 120: 0.922 Accuracy at step 130: 0.9161 Accuracy at step 140: 0.9219 Accuracy at step 150: 0.9151 Accuracy at step 160: 0.9199 Accuracy at step 170: 0.9305 Accuracy at step 180: 0.9251 Accuracy at step 190: 0.9258 Adding run metadata for 199 [...] Adding run metadata for 499
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 tarafından kullanılabilen 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 samples-tf-mnist-demo
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