Bagikan melalui


Menggunakan GPU untuk beban kerja intensif komputasi

Berlaku untuk: AKS di Azure Stack HCI 22H2, AKS di Windows Server

Unit Pemrosesan Grafis (GPU) digunakan untuk beban kerja intensif komputasi seperti pembelajaran mesin, pembelajaran mendalam, dan banyak lagi. Artikel ini menjelaskan cara menggunakan GPU untuk beban kerja intensif komputasi di AKS yang diaktifkan oleh Azure Arc.

Sebelum Anda mulai

Jika Anda memperbarui AKS dari versi pratinjau yang lebih lama dari Oktober 2022 yang menjalankan kumpulan simpul berkemampuan GPU, pastikan Anda menghapus semua kluster beban kerja yang menjalankan GPU sebelum memulai. Ikuti langkah-langkah di bagian ini.

Langkah 1: Hapus instalan driver host Nvidia

Pada setiap komputer host, navigasikan ke Panel Kontrol > Tambahkan atau Hapus program, hapus instalan driver host NVIDIA, lalu boot ulang komputer. Setelah mesin di-boot ulang, konfirmasikan bahwa driver berhasil dihapus instalannya. Buka terminal PowerShell yang ditingkatkan dan jalankan perintah berikut:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"3d video" 

Anda akan melihat perangkat GPU muncul dalam status kesalahan seperti yang ditunjukkan dalam contoh output ini:

Error       3D Video Controller                   PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
Error       3D Video Controller                   PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000 

Langkah 2: Lepaskan driver host dari host

Saat Anda menghapus instalasi driver host, GPU fisik masuk ke status kesalahan. Anda harus melepas semua perangkat GPU dari host.

Untuk setiap perangkat GPU (Pengontrol Video 3D), jalankan perintah berikut di PowerShell. Salin ID instans; misalnya, PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 dari output perintah sebelumnya:

$id1 = "<Copy and paste GPU instance id into this string>"
$lp1 = (Get-PnpDeviceProperty -KeyName DEVPKEY_Device_LocationPaths -InstanceId $id1).Data[0]
Disable-PnpDevice -InstanceId $id1 -Confirm:$false
Dismount-VMHostAssignableDevice -LocationPath $lp1 -Force

Untuk mengonfirmasi bahwa GPU dilepas dengan benar dari host, jalankan perintah berikut. Anda harus menempatkan GPU dalam status Unknown :

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"3d video"
Unknown       3D Video Controller               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
Unknown       3D Video Controller               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000 

Langkah 3: Unduh dan instal driver mitigasi NVIDIA

Perangkat lunak ini mungkin termasuk komponen yang dikembangkan dan dimiliki oleh NVIDIA Corporation atau pemberi lisensinya. Penggunaan komponen ini diatur oleh perjanjian lisensi pengguna akhir NVIDIA.

Lihat dokumentasi pusat data NVIDIA untuk mengunduh driver mitigasi NVIDIA. Setelah mengunduh driver, perluas arsip dan instal driver mitigasi pada setiap komputer host.

Invoke-WebRequest -Uri "https://docs.nvidia.com/datacenter/tesla/gpu-passthrough/nvidia_azure_stack_inf_v2022.10.13_public.zip" -OutFile "nvidia_azure_stack_inf_v2022.10.13_public.zip"
mkdir nvidia-mitigation-driver
Expand-Archive .\nvidia_azure_stack_inf_v2022.10.13_public.zip .\nvidia-mitigation-driver\

Untuk menginstal driver mitigasi, navigasikan ke folder yang berisi file yang diekstrak, klik kanan file nvidia_azure_stack_T4_base.inf , dan pilih Instal. Periksa apakah Anda memiliki driver yang benar; AKS saat ini hanya mendukung GPU NVIDIA Tesla T4.

Anda juga dapat menginstal menggunakan baris perintah dengan menavigasi ke folder dan menjalankan perintah berikut untuk menginstal driver mitigasi:

pnputil /add-driver nvidia_azure_stack_T4_base.inf /install 
pnputil /scan-devices 

Setelah Anda menginstal driver mitigasi, GPU tercantum dalam status OK di bawah Nvidia T4_base - Dilepas:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"nvidia"
OK       Nvidia T4_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
OK       Nvidia T4_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000

Langkah 4: Ulangi langkah 1 hingga 3

Ulangi langkah 1 hingga 3 untuk setiap simpul di kluster failover Anda.

Penting

Komputer virtual berkemampuan GPU tidak ditambahkan ke pengklusteran failover di Windows Server 2019, Windows Server 2022, atau Azure Stack HCI.

Menginstal atau memperbarui AKS

Lihat mulai cepat AKS menggunakan PowerShell atau menggunakan Windows Admin Center untuk menginstal atau memperbarui AKS yang diaktifkan oleh Arc.

Create kluster beban kerja baru dengan kumpulan simpul yang mendukung GPU

Saat ini, penggunaan kumpulan node yang mendukung GPU hanya tersedia untuk kumpulan node Linux.

New-AksHciCluster -Name "gpucluster" -nodePoolName "gpunodepool" -nodeCount 2 -osType linux -nodeVmSize Standard_NK6 

Setelah menginstal kluster beban kerja, jalankan perintah berikut untuk mendapatkan Kubeconfig Anda:

Get-AksHciCredential -Name gpucluster

Konfirmasikan bahwa Anda dapat menjadwalkan GPU

Dengan kumpulan simpul GPU yang dibuat, konfirmasikan bahwa Anda dapat menjadwalkan GPU di Kubernetes. Pertama, daftar node di klaster Anda dengan perintah kubectl get nodes:

kubectl get nodes
NAME             STATUS  ROLES                 AGE   VERSION
moc-l9qz36vtxzj  Ready   control-plane,master  6m14s  v1.22.6
moc-lhbkqoncefu  Ready   <none>                3m19s  v1.22.6
moc-li87udi8l9s  Ready   <none>                3m5s  v1.22.6

Sekarang gunakan perintah kubectl describe node untuk mengonfirmasi bahwa GPU dapat dijadwalkan. Di bawah bagian Kapasitas , GPU akan muncul sebagai nvidia.com/gpu: 1.

kubectl describe <node> | findstr "gpu" 

Output harus menampilkan GPU dari simpul pekerja dan terlihat seperti ini:

         nvidia.com/gpu.compute.major=7
         nvidia.com/gpu.compute.minor=5
         nvidia.com/gpu.count=1
         nvidia.com/gpu.family=turing
         nvidia.com/gpu.machine=Virtual-Machine
         nvidia.com/gpu.memory=16384
         nvidia.com/gpu.product=Tesla-T4
Annotations:    cluster.x-k8s.io/cluster-name: gpucluster
                cluster.x-k8s.io/machine: gpunodepool-md-58d9b96dd9-vsdbl
                cluster.x-k8s.io/owner-name: gpunodepool-md-58d9b96dd9
         nvidia.com/gpu:   1
         nvidia.com/gpu:   1
ProviderID:         moc://gpunodepool-97d9f5667-49lt4
kube-system         gpu-feature-discovery-gd62h       0 (0%)    0 (0%)   0 (0%)      0 (0%)     7m1s
         nvidia.com/gpu   0     0

Jalankan beban kerja yang mendukung GPU

Setelah Anda menyelesaikan langkah-langkah sebelumnya, buat file YAML baru untuk pengujian; misalnya, gpupod.yaml. Salin dan tempel YAML berikut ke dalam file baru bernama gpupod.yaml, lalu simpan:

apiVersion: v1
kind: Pod
metadata:
  name: cuda-vector-add
spec:
  restartPolicy: OnFailure
  containers:
  - name: cuda-vector-add
    image: "k8s.gcr.io/cuda-vector-add:v0.1"
    resources:
      limits:
        nvidia.com/gpu: 1

Jalankan perintah berikut untuk menyebarkan aplikasi sampel:

kubectl apply -f gpupod.yaml

Verifikasi bahwa pod dimulai, selesai berjalan, dan GPU ditetapkan:

kubectl describe pod cuda-vector-add | findstr 'gpu'

Perintah sebelumnya harus menunjukkan satu GPU yang ditetapkan:

nvidia.com/gpu: 1
nvidia.com/gpu: 1

Periksa file log pod untuk melihat apakah pengujian lulus:

kubectl logs cuda-vector-add

Berikut ini adalah contoh output dari perintah sebelumnya:

[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

Jika Anda menerima kesalahan ketidakcocokan versi saat memanggil driver, seperti "Versi driver CUDA tidak cukup untuk versi runtime CUDA," tinjau bagan kompatibilitas matriks driver NVIDIA.

FAQ

Apa yang terjadi selama peningkatan kumpulan simpul berkemampuan GPU?

Meningkatkan kumpulan simpul berkemampuan GPU mengikuti pola peningkatan bergulir yang sama yang digunakan untuk kumpulan simpul reguler. Agar kumpulan simpul yang mendukung GPU di VM baru berhasil dibuat pada komputer host fisik, diperlukan satu atau beberapa GPU fisik agar tersedia untuk penugasan perangkat yang berhasil. Ketersediaan ini memastikan bahwa aplikasi Anda dapat terus berjalan ketika Kubernetes menjadwalkan pod pada simpul yang ditingkatkan ini.

Sebelum Anda meningkatkan:

  1. Rencanakan waktu henti selama peningkatan.
  2. Memiliki satu GPU tambahan per host fisik jika Anda menjalankan Standard_NK6 atau 2 GPU tambahan jika Anda menjalankan Standard_NK12. Jika Anda berjalan pada kapasitas penuh dan tidak memiliki GPU tambahan, sebaiknya turunkan kumpulan simpul Anda ke satu simpul sebelum peningkatan, lalu tingkatkan setelah peningkatan berhasil.

Apa yang terjadi jika saya tidak memiliki GPU fisik ekstra di komputer fisik saya selama peningkatan?

Jika peningkatan dipicu pada kluster tanpa sumber daya GPU tambahan untuk memfasilitasi peningkatan bergulir, proses peningkatan macet hingga GPU tersedia. Jika Anda berjalan pada kapasitas penuh dan tidak memiliki GPU tambahan, sebaiknya turunkan kumpulan simpul Anda ke satu simpul sebelum peningkatan, lalu tingkatkan setelah peningkatan berhasil.

Langkah berikutnya