Настройка и использование GPU в YARN
Обзор
Для приложений YARN, требующих интенсивных вычислений, Hadoop поддерживает перенос рассчетов на графический процессор вместо CPU.
Условия для использования GPU в YARN:
-
Графический процессор Nvidia.
-
Драйверы Nvidia.
-
Если используется Docker, необходимо установить nvidia-docker 1.0.
-
YARN должен использовать Capacity scheduler.
Конфигурация YARN для GPU
Чтобы настроить поддержку GPU в YARN через ADCM:
-
На странице Clusters выберите нужный кластер.
-
Перейдите в Services и нажмите на YARN.
-
Включите опцию Show Advanced, найдите параметр GPU on YARN и установите для него значение
true
.Настройка GPU on YARN в ADCM -
Найдите и откройте свойство capacity-scheduler.xml.
-
В открывшемся окне измените значение параметра
yarn.scheduler.capacity.resource-calculator
наorg.apache.hadoop.yarn.util.resource.DominantResourceCalculator
:<configuration> <property> <name>yarn.scheduler.capacity.resource-calculator</name> <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value> </property> </configuration>
-
В группе параметров yarn-site.xml отредактируйте параметры так, чтобы создать желаемую конфигурацию для вашего кластера, которая будет учитывать использование графического процессора. Например:
<configuration> <property> <name>yarn.nodemanager.resource-plugins</name> <value>yarn.io/gpu</value> </property> <property> <name>yarn.resource-types</name> <value>yarn.io/gpu</value> </property> <property> <name>yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices</name> <value>auto</value> </property> <property> <name>yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables</name> <value>/usr/bin</value> </property> <property> <name>yarn.nodemanager.linux-container-executor.cgroups.mount</name> <value>true</value> </property> <property> <name>yarn.nodemanager.linux-container-executor.cgroups.mount-path</name> <value>/sys/fs/cgroup</value> </property> <property> <name>yarn.nodemanager.linux-container-executor.cgroups.hierarchy</name> <value>yarn</value> </property> <property> <name>yarn.nodemanager.container-executor.class</name> <value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value> </property> <property> <name>yarn.nodemanager.linux-container-executor.group</name> <value>yarn</value> </property> </configuration>
-
Найдите параметр container-executor.cfg template и добавьте к нему следующие значения:
yarn.nodemanager.linux-container-executor.group=yarn #--Original container-exectuor.cfg Content-- [gpu] module.enabled=true [cgroups] root=/sys/fs/cgroup yarn-hierarchy=yarn
Если для запуска приложений будет использоваться Docker, добавьте дополнительные свойства в container-executor.cfg template:
[docker] docker.allowed.devices=/dev/nvidiactl,/dev/nvidia-uvm,/dev/nvidia-uvm-tools,/dev/nvidia1,/dev/nvidia0 (1) docker.allowed.volume-drivers (2) docker.allowed.ro-mounts=nvidia_driver_375.66 (3) docker.allowed.runtimes=nvidia (4)
1 Добавляет устройства с графическим процессором в раздел Docker. Введите список значений, разделенных запятой. Список устройств можно получить с помощью команды ls /dev/nvidia*
.2 Добавляет nvidia-docker
в белый список volume-driver.3 Добавляет nvidia_driver_<version>
в белый список точек монтирования, доступных только для чтения.4 Чтобы использовать nvidia-docker-v2 в качестве плагина Docker для GPU, добавьте nvidia
в белый список среды выполнения. -
Нажмите Apply и подтвердите изменения в конфигурации YARN, нажав Save.
-
В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение
true
, и нажмите Run. Это автоматически обновит все необходимые файлы конфигурации на всех хостах.
ПРИМЕЧАНИЕ
В некоторых случаях может потребоваться предоставить доступ всем пользователям к локальному каталогу NodeManager, чтобы избежать ошибок, связанных с разрешениями. |
В зависимости от конфигурации вашего кластера, для некоторых параметров конфигурации YARN для GPU можно использовать значения по умолчанию.
Параметр | Описание | Значение по умолчанию |
---|---|---|
yarn.nodemanager.resource-plugins |
Значение |
— |
yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices |
Если установлено значение по умолчанию, YARN автоматически обнаружит ресурсы GPU в системе. Если этого не случилось или при обнаружении возникла ошибка, вы можете указать список GPU-устройств в этом параметре вручную в следующем формате: |
auto |
yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables |
Путь к бинарному файлу для обнаружения GPU, который использует NodeManager для сбора информации о графических процессорах, если для параметра |
— |
yarn.nodemanager.resource-plugins.gpu.docker-plugin |
Плагин команд Docker для GPU. По умолчанию используется Nvidia Docker v1.0. |
nvidia-docker-v1 |
yarn.nodemanager.resource-plugins.gpu.docker-plugin.nvidia-docker-v1.endpoint |
Эндпойнт плагина Nvidia Docker |
http://localhost:3476/v1.0/docker/cli |
yarn.nodemanager.linux-container-executor.cgroups.mount |
Использование контроллера устройств CGroup для изоляции GPU |
true |
Запуск приложений YARN на GPU
Ниже приведены примеры запуска приложений YARN с использованием команды yarn jar в контейнере YARN или Docker.
Чтобы запустить приложение в контейнере YARN, выполните:
$ yarn jar <path/to/hadoop-yarn-applications-distributedshell.jar> \
-jar <path/to/hadoop-yarn-applications-distributedshell.jar> \
-shell_command /usr/local/nvidia/bin/nvidia-smi \
-container_resources memory-mb=3072,vcores=1,yarn.io/gpu=2 \
-num_containers 2
Эта команда запрашивает 2 контейнера по 3 ГБ каждый, 1 виртуальное ядро и 2 графических процессора.
Чтобы запустить приложение в контейнере Docker, выполните:
$ yarn jar <path/to/hadoop-yarn-applications-distributedshell.jar> \
-jar <path/to/hadoop-yarn-applications-distributedshell.jar> \
-shell_env YARN_CONTAINER_RUNTIME_TYPE=docker \
-shell_env YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=<docker-image-name> \
-shell_command nvidia-smi \
-container_resources memory-mb=3072,vcores=1,yarn.io/gpu=2 \
-num_containers 2
Эта команда запрашивает 2 контейнера по 3 ГБ каждый, 1 виртуальное ядро и 2 графических процессора.