Виртуализация ИИ-ускорителей#
Данная ИИ-функция автоматизирует планирование и распределение вычислительных ресурсов ускорителей между задачами, что позволяет эффективно разделять ресурсы ИИ-ускорителей различных типов (GPU, NPU и других) и повышать производительность обработки данных:
Сценарий позволяет пользователю:
совместно использовать один или несколько ИИ-ускорителей между несколькими pod;
ограничивать выделяемые ускорителем ресурсы по объему памяти и доле вычислительных ядер;
использовать существующие приложения без изменения их кода (нулевая модификация);
управлять конфигурацией Multi-Instance GPU (MIG) динамически.
Примечание
При использовании ИИ-функций DropApp соблюдайте правила работы пользователя с ИИ-функциями.
Предусловия#
Предварительными условиями выполнения сценария являются:
Развернутый кластер DropApp с установленным программным компонентом K8S Artificial Intelligence (K8SI).
Доступ к кластеру с правами, достаточными для просмотра состояния узлов, pod и ресурсов.
Наличие узлов с ИИ-ускорителями (GPU, NPU и другими), на которых развернут инструмент виртуализации HAMi.
Наличие метки
gpu=onна узлах с ИИ-ускорителями, без которой узлы не смогут управляться планировщиком HAMi.
Сведения о HAMi и его установке — в разделе «HAMi» Руководства администратора.
Подготовка узлов с ИИ-ускорителями#
Отметьте узлы с ИИ-ускорителями для планирования с HAMi, добавив метку gpu=on. Без данной метки узлы не смогут управляться планировщиком.
Сценарий подготовки узлов:
Отметьте ИИ-узел меткой
gpu=on:kubectl label nodes <node_id> gpu=onУбедитесь, что pod HAMi (
hami-device-pluginиhami-scheduler) в пространстве именkube-systemнаходятся в состоянииRunning:kubectl get pods -n kube-systemЕсли pod
hami-device-pluginиhami-schedulerнаходятся в состоянииRunning, HAMi готов к виртуализации ИИ-ускорителей.
Совместное использование ИИ-ускорителей#
HAMi обеспечивает совместное использование (шеринг) одного или нескольких ИИ-ускорителей между несколькими pod. Нагрузка запрашивает ускоритель с помощью стандартных ресурсов Kubernetes, указывая количество физических ускорителей и опциональные лимиты на объем памяти и долю вычислительных ядер.
Примечание
После установки HAMi значение ресурса nvidia.com/gpu, зарегистрированного на узле, по умолчанию соответствует количеству виртуальных GPU (vGPU). При запросе ресурсов в pod ресурс nvidia.com/gpu определяет количество физических GPU, необходимых текущему pod.
Сценарий совместного использования ИИ-ускорителя:
Создайте pod, запрашивающий один физический GPU с ограничением по объему памяти и доле вычислительных ядер:
apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: containers: - name: sberlinux-container image: sberlinux:9.8 command: ["bash", "-c", "sleep 86400"] resources: limits: nvidia.com/gpu: 1 nvidia.com/gpumem: 3000 nvidia.com/gpucores: 30Где:
nvidia.com/gpu— количество физических GPU, необходимых для pod;nvidia.com/gpumem— объем памяти GPU (в МиБ), который каждый физический GPU выделяет pod (опционально, целое число);nvidia.com/gpucores— доля вычислительных ядер GPU (в процентах), которую каждый физический GPU выделяет pod (опционально, целое число).
Примените манифест:
kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: containers: - name: sberlinux-container image: sberlinux:9.8 command: ["bash", "-c", "sleep 86400"] resources: limits: nvidia.com/gpu: 1 nvidia.com/gpumem: 3000 nvidia.com/gpucores: 30 EOFУбедитесь, что pod получил запрошенные ресурсы ускорителя:
kubectl get pod gpu-pod -o json | jq '.spec.containers[0].resources'Если приложение внутри pod видит выделенный ресурс ускорителя, виртуализация настроена корректно. Один и тот же физический ускоритель может совместно использоваться несколькими pod в соответствии с политиками шеринга.
После завершения проверки удалите тестовый pod:
kubectl delete pod gpu-pod
Ограничение ресурсов ИИ-ускорителя#
HAMi позволяет ограничивать ресурсы, выделяемые ускорителем каждому pod, по объему памяти и доле вычислительных ядер. Это обеспечивает изоляцию ресурсов и предотвращает перегрузку совместно используемого оборудования.
Сценарий ограничения ресурсов:
Создайте pod с ограничениями по памяти и вычислительным ядрам (пример манифеста — в подразделе «Совместное использование ИИ-ускорителей»).
Примените манифест:
kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: gpu-pod-limited spec: containers: - name: sberlinux-container image: sberlinux:9.8 command: ["bash", "-c", "sleep 86400"] resources: limits: nvidia.com/gpu: 1 nvidia.com/gpumem: 1500 nvidia.com/gpucores: 20 EOFПроверьте, что pod корректно запустился и получил запрошенные ограничения:
kubectl get pod gpu-pod-limitedУбедитесь, что несколько pod, запрашивающих доли одного физического ускорителя, могут выполняться одновременно:
kubectl get pods | grep gpu-podЕсли несколько pod находятся в состоянии
Runningи используют общий ускоритель, лимиты памяти и вычислительных ядер применены корректно.После завершения проверки удалите тестовый pod:
kubectl delete pod gpu-pod-limited
Динамическое управление конфигурацией MIG#
HAMi поддерживает функцию dynamic-mig с использованием MIG Parted для динамической настройки MIG-устройств на узлах с поддержкой (начиная с архитектуры Ampere). Динамическое управление MIG позволяет создавать и выделять экземпляры MIG по требованию.
Примечание
По умолчанию режим MIG на GPU отключен. Перед применением MIG-конфигурации включите его с помощью команды nvidia-smi -i <gpu_id> -mig 1. Подробнее об управлении конфигурацией MIG — в разделе «Управление конфигурацией MIG» сценария использования ИИ-функции «Мониторинг и управление GPU-ресурсами».
Сценарий динамического управления конфигурацией MIG:
Убедитесь, что функция
dynamic-migвключена в конфигурации HAMi и узлы подготовлены для планирования (подраздел «Подготовка узлов с ИИ-ускорителями»).Создайте pod, запрашивающий MIG-устройство с указанием профиля:
apiVersion: v1 kind: Pod metadata: name: mig-pod spec: restartPolicy: Never containers: - name: cuda-container image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2 resources: limits: nvidia.com/mig-1g.5gb: 1Примените манифест:
kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: mig-pod spec: restartPolicy: Never containers: - name: cuda-container image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2 resources: limits: nvidia.com/mig-1g.5gb: 1 EOFПроверьте корректность запуска MIG-устройства:
kubectl logs mig-podПосле завершения проверки удалите тестовый pod:
kubectl delete pod mig-pod
Результат#
Ожидаемым результатом являются:
подготовленность узлов с ИИ-ускорителями для планирования;
эффективное разделение ИИ-ускорителя между несколькими задачами с ограничением памяти и вычислительных ядер;
динамическое применение конфигурации MIG.