Настройка аппаратного ускорителя на GPU-узлах
По мере увеличения объёмов бизнес-данных, особенно в сценариях, таких как искусственный интеллект и анализ данных, вы можете захотеть использовать возможности GPU в вашем самостоятельно построенном бизнес-кластере для ускорения обработки данных. Помимо подготовки GPU-ресурсов для узлов кластера, необходимо также выполнить настройку GPU.
В данном решении узлы кластера, обладающие возможностями GPU-вычислений, называются GPU Nodes.
Примечание: Если не указано иное, шаги выполнения применимы к обоим типам узлов. По вопросам установки драйверов обращайтесь к официальной документации NVIDIA по установке.
Содержание
Предварительные требования
GPU-ресурсы подготовлены на рабочем узле, который относится к GPU-узлу, описанному в этом разделе.
Установка драйвера GPU
Внимание: Если GPU-узел использует плагин NVIDIA MPS, убедитесь, что архитектура GPU узла — Volta или новее (Volta/Turing/Ampere/Hopper и т. д.), а драйвер поддерживает CUDA версии 11.5 или выше.
Получение адреса для загрузки драйвера
-
Войдите на GPU-узел и выполните команду
lspci |grep -i NVIDIA, чтобы проверить модель GPU узла.В следующем примере модель GPU — Tesla T4.
-
Перейдите на официальный сайт NVIDIA, чтобы получить ссылку для загрузки драйвера.
-
Нажмите на Drivers в верхней навигационной панели на главной странице.
-
Заполните необходимые данные для загрузки драйвера в соответствии с моделью GPU узла.
-
Нажмите Search.
-
Нажмите Download.
-
Щёлкните правой кнопкой мыши по Download > Copy Link Address, чтобы скопировать ссылку для загрузки драйвера.
-
-
Выполните следующие команды на GPU-узле для создания каталога
/home/gpuи загрузки файла драйвера в этот каталог.
Установка драйвера
-
Выполните следующую команду на GPU-узле для установки пакетов gcc и kernel-devel, соответствующих текущей операционной системе.
-
Выполните следующие команды для установки драйвера GPU.
-
После установки выполните команду
nvidia-smi. Если возвращается информация о GPU, аналогичная приведённому примеру, значит установка драйвера прошла успешно.
Установка NVIDIA Container runtime
-
На GPU Node добавьте репозиторий NVIDIA yum.
При появлении сообщения "Metadata cache created." добавление прошло успешно.
-
Установите NVIDIA Container Runtime.
При появлении сообщения
Complete!установка завершена успешно. -
Настройте Runtime по умолчанию. Добавьте следующую конфигурацию в файл.
-
Containerd: Измените файл
/etc/containerd/config.toml. -
Docker: Измените файл
/etc/docker/daemon.json.
-
-
Перезапустите Containerd / Docker.
-
Containerd
-
Docker
-
Конфигурация физического GPU
Развёртывание плагина физического GPU в GPU бизнес-кластере
В интерфейсе управления GPU-кластером выполните следующие действия:
-
В левой боковой панели каталога выберите подраздел "Cluster Plugins", нажмите для развёртывания "ACP GPU Device Plugin" и включите опцию "pGPU";
-
Во вкладке "Nodes" выберите узлы, на которых необходимо развернуть физический GPU, затем нажмите "Label and Taint Manager", добавьте "device label" и выберите "pGPU", нажмите OK;
-
Во вкладке "Pods" проверьте статус работы контейнерной группы, соответствующей nvidia-device-plugin-ds, чтобы убедиться в отсутствии сбоев и что она запущена на указанных узлах.
Конфигурация NVIDIA MPS (драйвер должен поддерживать CUDA версии >= 11.5)
Развёртывание плагина NVIDIA MPS в GPU бизнес-кластере
В интерфейсе управления GPU-кластером выполните следующие действия:
-
В левой боковой панели каталога выберите подраздел "Cluster Plugins", нажмите для развёртывания "ACP GPU Device Plugin" и включите опцию "MPS";
-
Во вкладке "Nodes" выберите узлы, на которых необходимо развернуть физический GPU, затем нажмите "Label and Taint Manager", добавьте "device label" и выберите "MPS", нажмите OK;
-
Во вкладке "Pods" проверьте статус работы контейнерной группы, соответствующей nvidia-mps-device-plugin-daemonset, чтобы убедиться в отсутствии сбоев и что она запущена на указанных узлах.
Настройка kube-scheduler (kubernetes >= 1.23)
-
На узле управления бизнес-кластером проверьте, правильно ли scheduler ссылается на политику планирования.
Проверьте, есть ли опция –config со значением /etc/kubernetes/scheduler-config.yaml, например
Примечание: Указанные параметры и значения — это конфигурации по умолчанию платформы. Если вы их изменяли, пожалуйста, верните к значениям по умолчанию. Ваши оригинальные пользовательские настройки можно скопировать в файл политики планирования.
-
Проверьте конфигурацию файла политики планирования.
-
Выполните команду:
kubectl describe service kubernetes -n default |grep Endpoints. -
Замените содержимое файла
/etc/kubernetes/scheduler-config.yamlна всех Master-узлах следующим содержимым, где${kube-apiserver}нужно заменить на вывод из предыдущего шага.Если в schedule-config.yaml уже есть extenders, добавьте этот yaml в конец.
-
-
Выполните следующую команду для получения ID контейнера:
-
Containerd: Выполните
crictl ps |grep kube-scheduler, вывод будет примерно таким, первый столбец — это ID контейнера. -
Docker: Выполните
docker ps |grep kube-scheduler, вывод будет примерно таким, первый столбец — это ID контейнера.
-
-
Перезапустите контейнер Containerd/Docker, используя полученный ID контейнера.
-
Containerd
-
-
Перезапустите Kubelet.
Конфигурация GPU-Manager
Настройка kube-scheduler (kubernetes >= 1.23)
-
На узле управления бизнес-кластером проверьте, правильно ли scheduler ссылается на политику планирования.
Проверьте, есть ли опция –config со значением /etc/kubernetes/scheduler-config.yaml, например
Примечание: Указанные параметры и значения — это конфигурации по умолчанию платформы. Если вы их изменяли, пожалуйста, верните к значениям по умолчанию. Ваши оригинальные пользовательские настройки можно скопировать в файл политики планирования.
-
Проверьте конфигурацию файла политики планирования.
-
Выполните команду:
kubectl describe service kubernetes -n default |grep Endpoints. -
Замените содержимое файла
/etc/kubernetes/scheduler-config.yamlна всех Master-узлах следующим содержимым, где${kube-apiserver}нужно заменить на вывод из предыдущего шага.
-
-
Выполните следующую команду для получения ID контейнера:
-
Containerd: Выполните
crictl ps |grep kube-scheduler, вывод будет примерно таким, первый столбец — это ID контейнера. -
Docker: Выполните
docker ps |grep kube-scheduler, вывод будет примерно таким, первый столбец — это ID контейнера.
-
-
Перезапустите контейнер Containerd/Docker, используя полученный ID контейнера.
-
Containerd
-
-
Перезапустите Kubelet.
Развёртывание плагина GPU Manager в GPU бизнес-кластере
В интерфейсе управления GPU-кластером выполните следующие действия:
-
В левой боковой панели каталога выберите подраздел "Cluster Plugins", нажмите для развёртывания "ACP GPU Device Plugin" и включите опцию "GPU-Manager";
-
Во вкладке "Nodes" выберите узлы, на которых необходимо развернуть физический GPU, затем нажмите "Label and Taint Manager", добавьте "device label" и выберите "vGPU", нажмите OK;
-
Во вкладке "Pods" проверьте статус работы контейнерной группы, соответствующей gpu-manager-daemonset, чтобы убедиться в отсутствии сбоев и что она запущена на указанных узлах.
Проверка результатов
Метод 1: Проверьте наличие доступных GPU-ресурсов на GPU-узлах, выполнив следующую команду на управляющем узле бизнес-кластера:
Метод 2: Разверните GPU-приложение на платформе, указав необходимое количество GPU-ресурсов. После развертывания выполните exec в Pod и выполните следующую команду:
Проверьте, корректно ли получена информация о GPU.