Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применяется для: AKS на Azure Local
Примечание.
Дополнительные сведения о gpu в AKS в Windows Server см. в статье "Использование GPU в AKS в Windows Server".
Графические единицы обработки (GPU) полезны для вычислительных рабочих нагрузок, таких как машинное обучение, глубокое обучение и многое другое. В этой статье описывается, как использовать графические процессоры для вычислительных рабочих нагрузок в AKS, поддерживаемых Azure Arc.
Поддерживаемые модели GPU
Служба Azure Kubernetes (AKS) в Azure поддерживает следующие модели GPU. Графические процессоры поддерживаются только в пулах узлов ОС Linux. Графические процессоры не поддерживаются в пулах узлов ОС Windows.
| Изготовитель | Модель GPU | Поддерживаемая версия |
|---|---|---|
| NVIDIA | A2 | 2311.2 |
| NVIDIA | A16 | 2402.0 |
| NVIDIA | T4 | 2408.0 |
| NVIDIA | L4 | 2512.0 |
| NVIDIA | L40 | 2512.0 |
| NVIDIA | L40S | 2512.0 |
| NVIDIA | RTX Pro 6000 | 2603.0 |
Поддерживаемые размеры виртуальных машин с GPU
AKS в Azure Local поддерживает следующие размеры виртуальных машин для каждой модели GPU.
NVIDIA T4 поддерживается SKU моделей NK T4
| Размер виртуальной машины | графические процессоры | Память GPU: ГиБ | виртуальный процессор (vCPU) | Память: ГиБ |
|---|---|---|---|---|
| Стандарт_NK6 | 1 | 8 | 6 | 12 |
| Standard_NK12 | 2 | 16 | 12 | двадцать четыре |
NVIDIA A2 поддерживается SKU NC2 A2
| Размер виртуальной машины | графические процессоры | Память GPU: ГиБ | виртуальный процессор (vCPU) | Память: ГиБ |
|---|---|---|---|---|
| Standard_NC4_A2 | 1 | 16 | 4 | 8 |
| Standard_NC8_A2 | 1 | 16 | 8 | 16 |
| Standard_NC16_A2 | 2 | 32 | 16 | 64 |
| Standard_NC32_A2 | 2 | 32 | 32 | 128 |
Поддержка NVIDIA A16 осуществляется моделями NC2 A16 конфигурации.
| Размер виртуальной машины | графические процессоры | Память GPU: ГиБ | виртуальный процессор (vCPU) | Память: ГиБ |
|---|---|---|---|---|
| Standard_NC4_A16 | 1 | 16 | 4 | 8 |
| Standard_NC8_A16 | 1 | 16 | 8 | 16 |
| Standard_NC16_A16 | 2 | 32 | 16 | 64 |
| Standard_NC32_A16 | 2 | 32 | 32 | 128 |
NVIDIA L4 поддерживается на NC2 L4 SKU (предварительная версия)
| Размер виртуальной машины | графические процессоры | Память GPU: ГиБ | виртуальный процессор (vCPU) | Память: ГиБ |
|---|---|---|---|---|
| Standard_NC16_L4_1 | 1 | двадцать четыре | 16 | 64 |
| Standard_NC16_L4_2 | 2 | 48 | 16 | 64 |
| Standard_NC32_L4_1 | 1 | двадцать четыре | 32 | 128 |
| Standard_NC32_L4_2 | 2 | 48 | 32 | 128 |
NVIDIA L40 поддерживается SKU NC2 L40 (предварительная версия)
| Размер виртуальной машины | графические процессоры | Память GPU: ГиБ | виртуальный процессор (vCPU) | Память: ГиБ |
|---|---|---|---|---|
| Standard_NC16_L40_1 | 1 | 48 | 16 | 64 |
| Standard_NC16_L40_2 | 2 | 96 | 16 | 64 |
| Standard_NC32_L40_1 | 1 | 48 | 32 | 128 |
| Standard_NC32_L40_2 | 2 | 96 | 32 | 128 |
NVIDIA L40S поддерживается SKU NC2 L40S (предварительный просмотр)
| Размер виртуальной машины | графические процессоры | Память GPU: ГиБ | виртуальный процессор (vCPU) | Память: ГиБ |
|---|---|---|---|---|
| Standard_NC16_L40S_1 | 1 | 48 | 16 | 64 |
| Standard_NC16_L40S_2 | 2 | 96 | 16 | 64 |
| Standard_NC32_L40S_1 | 1 | 48 | 32 | 128 |
| Standard_NC32_L40S_2 | 2 | 96 | 32 | 128 |
NVIDIA RTX Pro 6000 поддерживается NC2 RTX Pro 6000 SKU (предварительная версия)
| Размер виртуальной машины | графические процессоры | Память GPU: ГиБ | виртуальный процессор (vCPU) | Память: ГиБ |
|---|---|---|---|---|
| Standard_NC16_RTX6000Pro_1 | 1 | 48 | 16 | 64 |
| Standard_NC16_RTX6000Pro_2 | 2 | 96 | 16 | 64 |
| Standard_NC32_RTX6000Pro_1 | 1 | 48 | 32 | 128 |
| Standard_NC32_RTX6000Pro_2 | 2 | 96 | 32 | 128 |
Перед началом работы
Чтобы использовать gpu в AKS Arc, установите необходимые драйверы GPU перед началом развертывания кластера. Выполните действия, описанные в этом разделе.
Шаг 1. Установка ОС
Установите локальную операционную систему Azure на каждом сервере в локальном кластере Azure.
Шаг 2. Удаление драйвера узла NVIDIA
На каждом хост-компьютере перейдите к панели > управления "Добавить или удалить программы", удалите драйвер узла NVIDIA, а затем перезагрузите компьютер. После перезагрузки компьютера убедитесь, что драйвер успешно удален. Откройте терминал PowerShell с повышенными привилегиями и выполните следующую команду:
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -eq "3D Video Controller"}
Устройства 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
Чтобы убедиться, что графические процессоры правильно отключены от узла, выполните следующую команду. Вы должны видеть GPU в Unknown состоянии:
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -eq "3D Video Controller"}
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. Например, если тип — 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 | where {$_.friendlyname -match "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 для каждого сервера в локальном кластере Azure.
Шаг 6. Продолжение развертывания локального кластера Azure
Продолжайте развертывание локального кластера Azure, выполнив действия в локальном развертывании Azure.
Список доступных конфигураций виртуальных машин с поддержкой GPU
После завершения развертывания локального кластера Azure выполните следующую команду 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>
В следующем примере добавляется пул узлов с двумя узлами с поддержкой GPU (NVIDIA 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 describe node, чтобы убедиться, что вы можете запланировать GPU. В разделе "Емкость" графический процессор отображается как nvidia.com/gpu: 1.
kubectl describe <node> | findstr "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 следует тому же шаблону последовательного обновления, который используется для обычных пулов узлов. Для успешного обновления Kubernetes необходимо создать новые виртуальные машины на физическом узле с одним или несколькими физическими графическими процессорами, доступными для назначения устройствам. Обеспечение доступности гарантирует, что ваши приложения могут продолжать работать, когда Kubernetes планирует поды на этом обновленном узле.
Перед обновлением:
- Планирование простоя во время обновления.
- На каждом физическом узле должно быть одна дополнительная GPU, если вы используете Standard_NK6, или две дополнительные GPU, если вы используете Standard_NK12. Если вы работаете в полной емкости и не имеете дополнительный GPU, разверните пул узлов до одного узла перед обновлением, а затем масштабируйте после успешного обновления.
Что произойдет, если у меня нет дополнительных физических GPU на физическом компьютере во время обновления?
Если вы активируете обновление в кластере без дополнительных ресурсов GPU для упрощения последовательного обновления, процесс обновления зависает до тех пор, пока GPU не будет доступен. Если вы работаете в полной емкости и не имеете дополнительный GPU, разверните пул узлов до одного узла до обновления, а затем масштабируйте после успешного обновления.