Мониторинг и управление GPU-ресурсами#
Данная ИИ-функция автоматизирует распознавание специализированного оборудования, планирование и контроль его использования, что позволяет подготовить инфраструктуру для обработки данных и обучения моделей ИИ:
Сценарий позволяет пользователю:
проверить готовность GPU-узлов и доступность ресурсов GPU в кластере;
отслеживать состояние и производительность GPU в реальном времени;
управлять конфигурацией Multi-Instance GPU (MIG);
контролировать установку и обновление драйверов NVIDIA.
Примечание
При использовании ИИ-функций DropApp соблюдайте правила работы пользователя с ИИ-функциями.
Предусловия#
Предварительными условиями выполнения сценария являются:
Развернутый кластер DropApp с установленным программным компонентом K8S Artificial Intelligence (K8SI).
Доступ к кластеру с правами, достаточными для просмотра состояния узлов, pod и метрик.
Наличие GPU-узлов, на которых развернуты инструменты управления GPU: GPU Operator, Container Toolkit, K8s-device-plugin, Driver Manager, GDRCopy, MIG Parted.
Установка и настройка инструментов управления GPU описана в разделе «GPU Operator» Руководства по установке DropApp с помощью Dactl.
Сведения по администрированию инструментов приведены в разделе «Инструменты управления GPU» Руководства администратора.
Проверка доступности GPU-ресурсов в кластере#
Проверьте готовность GPU-узлов к запуску рабочих нагрузок и доступность ресурсов GPU (nvidia.com/gpu) в кластере. Регистрацию и отслеживание GPU в кластере выполняет K8s-device-plugin, устанавливаемый и управляемый GPU Operator.
Сценарий проверки доступности GPU-ресурсов:
Убедитесь, что метки, добавленные GPU Feature Discovery, присутствуют на узлах кластера:
kubectl get nodes -o json | jq '.items[].metadata.labels | with_entries(select(.key | startswith("nvidia.com")))'Пример вывода:
{ "nvidia.com/gpu.compute.major": "8", "nvidia.com/gpu.compute.minor": "0", "nvidia.com/gpu.count": "1", "nvidia.com/gpu.family": "ampere", "nvidia.com/gpu.memory": "40536", "nvidia.com/gpu.product": "A100-SXM4-40GB" }Убедитесь, что ресурс GPU
nvidia.com/gpuдоступен на узле:kubectl get nodes -o json | jq '.items[] | {name: .metadata.name, gpu: .status.capacity["nvidia.com/gpu"]}'Если в выводе команды для узла присутствует значение ресурса
nvidia.com/gpu, то GPU зарегистрирован в кластере и готов к использованию.Проверьте, что K8s-device-plugin запущен на GPU-узлах:
kubectl get pods -A | grep nvidia-device-pluginЗапустите тестовый pod, запрашивающий ресурс GPU, чтобы убедиться в его доступности:
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: gpu-check spec: restartPolicy: Never containers: - name: cuda-container image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2 resources: limits: nvidia.com/gpu: 1 EOFПроверьте журнал выполнения тестового pod:
kubectl logs gpu-checkПример вывода:
[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Вывод
Test PASSEDподтверждает, что GPU-ресурс выделен корректно и доступен для выполнения рабочей нагрузки.После завершения проверки удалите тестовый pod:
kubectl delete pod gpu-check
Управление конфигурацией MIG#
Управляйте конфигурацией Multi-Instance GPU (MIG) на узлах с поддержкой (начиная с архитектуры Ampere) с помощью MIG Parted. MIG-профили (например, 1g.5gb, 3g.20gb) позволяют разделить GPU на несколько изолированных экземпляров для многоарендного использования оборудования.
Примечание
По умолчанию режим MIG на GPU отключен. Перед применением MIG-конфигурации включите его с помощью команды nvidia-smi -i <gpu_id> -mig 1.
Сценарий управления конфигурацией MIG:
Определите набор возможных конфигураций MIG в файле конфигурации
mig-parted.yaml. Пример файла конфигурации приведен в разделе «Конфигурация MIG Parted» Руководства администратора.Примените выбранную конфигурацию MIG к GPU-узлу:
nvidia-mig-parted apply -f <config_repo>/mig-parted.yaml -c <config_name>Где
<config_name>— имя конфигурации из разделаmig-configsфайла конфигурации (например,all-1g.5gb,all-balanced,custom-config).Например, для разделения всех GPU на узле на устройства емкостью
1g.5gbвыполните команду:nvidia-mig-parted apply -f <config_repo>/mig-parted.yaml -c all-1g.5gbПроверьте, что ресурсы MIG-устройств доступны в кластере:
kubectl get nodes -o json | jq '.items[] | {name: .metadata.name, mig: .status.capacity["nvidia.com/mig-1g.5gb"]}'Запустите рабочую нагрузку, запрашивающую 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Проверьте корректность запуска и удалите тестовый pod:
kubectl logs mig-podkubectl delete pod mig-pod
Результат#
Ожидаемым результатом являются:
готовность GPU-узлов к запуску рабочих нагрузок;
подтверждение доступности и состояния GPU;
доступность метрик GPU для мониторинга;
примененность и корректная работа конфигурации MIG.