Поделиться через


Использование GPU для рабочих нагрузок с интенсивным вычислением (AKS в Azure Stack HCI 23H2)

Область применения: Azure Stack HCI версии 23H2

Примечание.

Дополнительные сведения о gpu в AKS в Azure Stack HCI 22H2 см. в разделе "Использование GPU" (HCI 22H2).

Графические единицы обработки (GPU) используются для вычислительных рабочих нагрузок, таких как машинное обучение, глубокое обучение и многое другое. В этой статье описывается, как использовать графические процессоры для вычислительных рабочих нагрузок в AKS, включенных Azure Arc.

Поддерживаемые модели GPU

Следующие модели GPU поддерживаются AKS в Azure Stack HCI 23H2:

Производитель Модель GPU Поддерживаемая версия
Nvidia A2 2311.2
Nvidia A16 2402.0

Поддерживаемые размеры виртуальных машин

Следующие размеры виртуальных машин для каждой модели GPU поддерживаются AKS в Azure Stack HCI 23H2.

Nvidia A2 поддерживается SKU NC2 A2

Размер виртуальной машины графические адаптеры Память GPU: ГиБ Виртуальные ЦП Память, ГиБ
Standard_NC4_A2 1 16 4 8
Standard_NC8_A2 1 16 8 16
Standard_NC16_A2 2 48 16 64
Standard_NC32_A2 2 48 32 28

Nvidia A16 поддерживается SKU NC2 A16

Размер виртуальной машины графические адаптеры Память GPU: ГиБ Виртуальные ЦП Память, ГиБ
Standard_NC4_A16 1 16 4 8
Standard_NC8_A16 1 16 8 16
Standard_NC16_A16 2 48 16 64
Standard_NC32_A16 2 48 32 28

Подготовка к работе

Чтобы использовать gpu в AKS Arc, убедитесь, что вы установили необходимые драйверы GPU перед началом развертывания кластера. Выполните действия, описанные в этом разделе.

Шаг 1. Установка ОС

Установите операционную систему Azure Stack HCI версии 23H2 локально на каждом сервере в кластере Azure Stack HCI.

Шаг 2. Удаление драйвера узла 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 

Шаг 3. Отключение драйвера узла от узла

При удалении драйвера узла физический 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 

Шаг 4. Скачивание и установка драйвера устранения рисков NVIDIA

Программное обеспечение может включать компоненты, разработанные и принадлежащие КОРПОРАЦИИ NVIDIA или ее лицензиаров. Использование этих компонентов регулируется лицензионным соглашением NVIDIA.

См. документацию по центру обработки данных NVIDIA, чтобы скачать драйвер для устранения рисков NVIDIA. После скачивания драйвера разверните архив и установите драйвер устранения рисков на каждом хост-компьютере. Чтобы скачать драйвер устранения рисков и извлечь его, можно следовать этому скрипту PowerShell:

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\

Чтобы установить драйвер устранения рисков, перейдите в папку, содержащую извлеченные файлы, и выберите файл драйвера GPU на основе фактического типа GPU, установленного на узлах Azure Stack HCI. Например, если тип — A2 GPU, щелкните правой кнопкой мыши файл nvidia_azure_stack_A2_base.inf и выберите "Установить".

Вы также можете установить с помощью командной строки, перейдя в папку и выполнив следующие команды, чтобы установить драйвер устранения рисков:

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

После установки драйвера устранения рисков графические процессоры отображаются в состоянии OK в разделе Nvidia A2_base — отключены:

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

Шаг 5. Повторите шаги 1–4

Повторите шаги 1–4 для каждого сервера в кластере HCI.

Шаг 6. Продолжение развертывания кластера Azure Stack HCI

Продолжайте развертывание кластера Azure Stack HCI, выполнив действия, описанные в развертывании Azure Stack HCI версии 23H2.

Получение списка доступных номеров SKU виртуальных машин с поддержкой GPU

После завершения развертывания кластера Azure Stack HCI можно выполнить следующую команду CLI, чтобы отобразить доступные номера SKU виртуальных машин в развертывании. Если драйверы GPU установлены правильно, указаны соответствующие номера SKU виртуальных машин GPU:

az aksarc vmsize list --custom-location <custom location ID> -g <resource group name>

Создание кластера рабочей нагрузки с пулом узлов с поддержкой GPU

Использование пулов узлов с поддержкой GPU пока доступно только для пулов узлов Linux. Чтобы создать новый кластер Kubernetes, выполните приведенные действия.

az aksarc create -n <aks cluster name> -g <resource group name> --custom-location <custom location ID> --vnet-ids <vnet ID>

В следующем примере добавляется пул узлов с 2 узлами с поддержкой GPU (NVDIA A2) с номером SKU Standard_NC4_A2 виртуальной машины:

az aksarc nodepool add --cluster-name <aks cluster name> -n <node pool name> -g <resource group name> --node-count 2 --node-vm-size Standard_NC4_A2 --os-type Linux

Убедитесь, что вы можете запланировать 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 описать узел , чтобы убедиться, что графические процессоры можно запланировать. В разделе "Емкость" графический процессор должен отображаться как nvidia.com/gpu: 1.

kubectl describe <node> | findstr "gpu" 

Выходные данные должны отображать gpu из рабочего узла и выглядеть примерно так:

Capacity: 
  cpu:                4 
  ephemeral-storage:  103110508Ki 
  hugepages-1Gi:      0 
  hugepages-2Mi:      0 
  memory:             7865020Ki 
  nvidia.com/gpu:     1 
  pods:               110

Запуск рабочей нагрузки с поддержкой 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 на этом обновленном узле.

Перед обновлением:

  1. Планирование простоя во время обновления.
  2. Если вы используете Standard_NK6 или 2 дополнительных Standard_NK12 GPU на физический узел, укажите один дополнительный GPU для каждого физического узла. Если вы работаете в полной емкости и не имеете дополнительный GPU, рекомендуется уменьшить пул узлов до одного узла перед обновлением, а затем увеличить масштаб после успешного обновления.

Что произойдет, если у меня нет дополнительных физических GPU на физическом компьютере во время обновления?

Если обновление активируется в кластере без дополнительных ресурсов GPU для упрощения последовательного обновления, процесс обновления зависает до тех пор, пока gpu не будет доступен. Если вы работаете в полной емкости и не имеете дополнительный GPU, рекомендуется сократить пул узлов до одного узла перед обновлением, а затем увеличить масштаб после успешного обновления.

Следующие шаги