Настройка и использование GPU в YARN

Обзор

Для приложений YARN, требующих интенсивных вычислений, Hadoop поддерживает перенос рассчетов на графический процессор вместо CPU.

Условия для использования GPU в YARN:

  • Графический процессор Nvidia.

  • Драйверы Nvidia.

  • Если используется Docker, необходимо установить nvidia-docker 1.0.

  • YARN должен использовать Capacity scheduler.

Конфигурация YARN для GPU

Чтобы настроить поддержку GPU в YARN через ADCM:

  1. На странице Clusters выберите нужный кластер.

  2. Перейдите в Services и нажмите на YARN.

  3. Включите опцию Show Advanced, найдите параметр GPU on YARN и установите для него значение true.

    Настройка GPU on YARN в ADCM
    Настройка GPU on YARN в ADCM
  4. Найдите и откройте свойство capacity-scheduler.xml.

  5. В открывшемся окне измените значение параметра 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>
  6. В группе параметров 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>
  7. Найдите параметр 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 в белый список среды выполнения.
  8. Нажмите Apply и подтвердите изменения в конфигурации YARN, нажав Save.

  9. В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение true, и нажмите Run. Это автоматически обновит все необходимые файлы конфигурации на всех хостах.

ПРИМЕЧАНИЕ

В некоторых случаях может потребоваться предоставить доступ всем пользователям к локальному каталогу NodeManager, чтобы избежать ошибок, связанных с разрешениями.

В зависимости от конфигурации вашего кластера, для некоторых параметров конфигурации YARN для GPU можно использовать значения по умолчанию.

GPU в YARN: опциональные параметры
Параметр Описание Значение по умолчанию

yarn.nodemanager.resource-plugins

Значение yarn.io/gpu этого параметра позволяет включить модуль изоляции GPU на стороне NodeManager. По умолчанию YARN автоматически обнаруживает и настраивает графические процессоры

 — 

yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices

Если установлено значение по умолчанию, YARN автоматически обнаружит ресурсы GPU в системе. Если этого не случилось или при обнаружении возникла ошибка, вы можете указать список GPU-устройств в этом параметре вручную в следующем формате: GPU1_index:GPU1_minor_number, GPU2_index:GPU2_minor_number. Например: 0:0,1:1,2:2

auto

yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables

Путь к бинарному файлу для обнаружения GPU, который использует NodeManager для сбора информации о графических процессорах, если для параметра yarn.nodemanager.resource.gpu.allowed-gpu-devices установлено значение auto. Например: /usr/local/bin/nvidia-smi. Если путь не задан, 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-контейнер

  • 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 графических процессора.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней