Используйте GPU для вычислительных рабочих нагрузок
Область применения: AKS в Azure Local 22H2, AKS на Windows Server
Графические единицы обработки (GPU) используются для вычислительных рабочих нагрузок, таких как машинное обучение, глубокое обучение и многое другое. В этой статье описывается, как использовать видеокарты для вычислительных рабочих нагрузок в AKS с помощью Azure Arc.
Перед началом работы
Если вы обновляете AKS с предварительной версии до октября 2022 г., на которых запущены пулы узлов с поддержкой GPU, удалите все кластеры рабочих нагрузок, на которых запущены GPU. Выполните действия, описанные в этом разделе.
Шаг 1. Удаление драйвера узла Nvidia
На каждом хост-компьютере перейдите к панели управления > добавление или удаление программ, удалите драйвер узла NVIDIA, а затем перезагрузите компьютер. После перезагрузки компьютера убедитесь, что драйвер успешно удален. Откройте терминал PowerShell с повышенными привилегиями и выполните следующую команду:
Get-PnpDevice | select status, class, friendlyname, instanceid | findstr /i /c:"3d video"
Устройства GPU должны отображаться в состоянии ошибки, как показано в этом примере выходных данных:
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
Шаг 2. Демонтировать драйвер узла с хоста
При удалении драйвера узла физический GPU переходит в состояние ошибки. Необходимо отключить все устройства GPU на хосте.
Для каждого устройства GPU (трехмерного видео контроллера) выполните следующие команды в PowerShell. Скопируйте идентификатор экземпляра, например PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
из вывода предыдущей команды.
$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
Чтобы убедиться, что графические процессоры были правильно отключены от узла, выполните следующую команду. Следует поместить графические процессоры в состояние 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
Шаг 3. Скачивание и установка драйвера для устранения рисков NVIDIA
Программное обеспечение может включать компоненты, разработанные и принадлежащие КОРПОРАЦИИ NVIDIA или ее лицензиаров. Использование этих компонентов регулируется лицензионным соглашением NVIDIA.
См. документацию по центру обработки данных NVIDIA , чтобы скачать драйвер для устранения рисков NVIDIA. После скачивания драйвера разверните архив и установите драйвер устранения рисков на каждом хост-компьютере.
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\
Чтобы установить драйвер устранения рисков, перейдите в папку, содержащую извлеченные файлы, щелкните правой кнопкой мыши файл nvidia_azure_stack_T4_base.inf и выберите Установить. Убедитесь, что у вас есть правильный драйвер; AKS в настоящее время поддерживает только GPU NVIDIA Tesla T4.
Вы также можете установить с помощью командной строки, перейдя в папку и выполнив следующие команды, чтобы установить драйвер устранения рисков:
pnputil /add-driver nvidia_azure_stack_T4_base.inf /install
pnputil /scan-devices
После установки драйвера смягчения графические процессоры перечислены в состоянии OK под Nvidia T4_base — отключенные:
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
Шаг 4. Повторите шаги 1–3
Повторите шаги 1–3 для каждого узла в отказоустойчивом кластере.
Важный
Виртуальные машины с поддержкой GPU не добавляются в отказоустойчивую кластеризацию в Windows Server 2019, Windows Server 2022 или Azure Local.
Установка или обновление AKS
См. краткое руководство по использованию PowerShell или Windows Admin Center для установки или обновления AKS с поддержкой Arc.
Создание кластера рабочей нагрузки с пулом узлов с поддержкой GPU
В настоящее время пулы узлов с поддержкой GPU доступны только для пулов узлов Linux.
New-AksHciCluster -Name "gpucluster" -nodePoolName "gpunodepool" -nodeCount 2 -osType linux -nodeVmSize Standard_NK6
После установки кластера рабочей нагрузки выполните следующую команду, чтобы получить Kubeconfig:
Get-AksHciCredential -Name gpucluster
Убедитесь, что вы можете запланировать gpu
Создав пул узлов GPU, убедитесь, что вы можете запланировать gpu в Kubernetes. Сначала выведите список узлов в кластере с помощью команды 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
Теперь используйте команду kubectl describe node, чтобы убедиться, что графические процессоры могут быть назначены. В разделе емкости GPU должен отображаться как nvidia.com/gpu: 1.
kubectl describe <node> | findstr "gpu"
Выходные данные должны отображать ГПУ из узла-исполнителя и выглядеть примерно так:
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
Запуск рабочей нагрузки с поддержкой GPU
После выполнения предыдущих шагов создайте файл YAML для тестирования; например, gpupod.yaml. Скопируйте и вставьте следующий YAML в новый файл с именем gpupod.yaml, а затем сохраните его:
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
Выполните следующую команду, чтобы развернуть пример приложения:
kubectl apply -f gpupod.yaml
Убедитесь, что модуль pod запущен, завершен, и gpu назначен:
kubectl describe pod cuda-vector-add | findstr 'gpu'
Предыдущая команда должна отображать одну назначенную GPU:
nvidia.com/gpu: 1
nvidia.com/gpu: 1
Проверьте файл журнала pod, чтобы узнать, прошел ли тест:
kubectl logs cuda-vector-add
Ниже приведен пример выходных данных предыдущей команды:
[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
Если при вызове драйверов возникает ошибка несоответствия версий, например "Версия драйвера CUDA недостаточно для версии среды выполнения CUDA", просмотрите диаграмму совместимости драйверов NVIDIA.
Вопросы и ответы
Что происходит во время обновления пула узлов с поддержкой GPU?
Обновление пулов узлов с поддержкой GPU следует тому же шаблону последовательного обновления, который используется для обычных пулов узлов. Для успешного создания пулов узлов с поддержкой GPU на физическом хосте требуется наличие одного или нескольких физических GPU для назначения устройств. Эта доступность гарантирует, что ваши приложения смогут продолжать работать, когда Kubernetes распределяет pod на этом обновленном узле.
Перед обновлением:
- Планирование простоя во время обновления.
- Если вы используете Standard_NK6, у вас должен быть один дополнительный GPU на каждый физический узел. Если вы используете Standard_NK12, вам нужно два дополнительных GPU на физический узел. Если вы работаете в полной емкости и не имеете дополнительный GPU, рекомендуется уменьшить пул узлов до одного узла перед обновлением, а затем увеличить масштаб после успешного обновления.
Что произойдет, если у меня нет дополнительных физических GPU на физическом компьютере во время обновления?
Если обновление активируется в кластере без дополнительных ресурсов GPU для упрощения последовательного обновления, процесс обновления зависает до тех пор, пока gpu не будет доступен. Если вы работаете в полной емкости и не имеете дополнительный GPU, рекомендуется сократить пул узлов до одного узла перед обновлением, а затем увеличить масштаб после успешного обновления.
Дальнейшие действия
- обзор
AKS в локальной среде Azure и Windows Server