Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

先决条件

  • 到目前为止,YARN仅支持Nvidia GPU
  • YARN节点管理器必须预装有Nvidia驱动程序。
  • 当将Docker用作容器运行时上下文时,需要安装nvidia-docker 1.0(YARN中nvidia-docker的当前受支持版本)。

设定档

GPU调度

resource-types.xml中

添加以下属性

<配置>
  <属性>
     <name> yarn.resource-types </ name>
     <value> yarn.io/gpu </ value>
  </ property>
</ configuration>

yarn-site.xml中

必须将DominantResourceCalculator配置为启用GPU调度/隔离。

对于Capacity Scheduler,使用以下属性来配置DominantResourceCalculator(在Capacity -scheduler.xml中):

属性 默认值
yarn.scheduler.capacity.resource-calculator org.apache.hadoop.yarn.util.resource.DominantResourceCalculator

GPU隔离

yarn-site.xml中

  <属性>
    <name> yarn.nodemanager.resource-plugins </ name>
    <value> yarn.io/gpu </ value>
  </ property>

这是为了在NodeManager端启用GPU隔离模块。

默认情况下,设置了上述配置后,YARN会自动检测并配置GPU。仅当管理员有特殊要求时,才需要在yarn-site.xml中设置以下配置。

1)允许的GPU设备

属性 默认值
yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices 汽车

指定可由YARN NodeManager管理(由逗号分隔)的GPU设备。GPU设备的数量将报告给RM,以制定调度决策。设置为auto(默认)可让YARN从系统中自动发现GPU资源。

如果自动检测GPU设备失败或管理员仅希望由YARN管理的GPU设备的子集,则手动指定GPU设备。GPU设备由其次要设备编号和索引标识。获取次要GPU数量的一种常见方法是使用nvidia-smi -q并搜索次要数字输出。

手动指定较小的数字时,管理员还需要包括GPU的索引,格式为index:minor_number [,index:minor_number ...]。手动规范的示例为0:0,1:1,2:2,3:4“,以允许YARN NodeManager管理索引为0/1/2/3和次要号为0/1/2/4的 GPU设备。数字。

2)可执行以发现GPU

属性
yarn.nodemanager.resource-plugins.gpu。发现路径可执行文件 /绝对/路径/到/ nvidia-smi

yarn.nodemanager.resource.gpu.allowed-gpu-devices = auto指定时,YARN NodeManager需要运行GPU发现二进制文件(现在仅支持nvidia-smi)以获取与GPU相关的信息。当value为空(默认)时,YARN NodeManager将尝试查找发现可执行文件本身。配置值的示例是:/ usr / local / bin / nvidia-smi

3)Docker插件相关配置

当用户需要在Docker容器中运行GPU应用程序时,可以自定义以下配置。如果admin遵循nvidia-docker的默认安装/配置,则不需要它们。

属性 默认值
yarn.nodemanager.resource-plugins.gpu.docker-plugin nvidia-docker-v1

为GPU指定docker命令插件。默认情况下使用Nvidia docker V1.0,nvidia- docker -v2可用于V2.x。

属性 默认值
yarn.nodemanager.resource-plugins.gpu.docker-plugin.nvidia-docker-v1.endpoint http:// localhost:3476 / v1.0 / docker / cli

指定nvidia-docker-plugin的端点。请查找文档:https : //github.com/NVIDIA/nvidia-docker/wiki有关更多详细信息。

4)CGroups安装

GPU隔离使用CGroup 设备控制器对每个GPU设备进行隔离。应将以下配置添加到yarn-site.xml以自动安装CGroup子设备,否则管理员必须手动创建devices子文件夹才能使用此功能。

属性 默认值
yarn.nodemanager.linux-container-executor.cgroups.mount 真正

container-executor.cfg中

通常,需要将以下配置添加到container-executor.cfg

[gpu]
module.enabled = true

当用户需要在非Docker环境下运行GPU应用程序时:

[cgroups]
#这应该与yarn-site.xml中的yarn.nodemanager.linux-container-executor.cgroups.mount-path相同
根= / sys / fs / cgroup
#这应该与yarn-site.xml中的yarn.nodemanager.linux-container-executor.cgroups.hierarchy相同
纱层次=纱

当用户需要在Docker环境下运行GPU应用程序时:

1)将与GPU相关的设备添加到docker部分:

值之间用逗号分隔,您可以通过运行ls / dev / nvidia *获得它

[码头工人]
docker.allowed.devices = / dev / nvidiactl,/ dev / nvidia-uvm,/ dev / nvidia-uvm-tools,/ dev / nvidia1,/ dev / nvidia0

2)将nvidia-docker添加到卷驱动程序白名单。

[码头工人]
...
docker.allowed.volume-drivers

3)将nvidia_driver_ <version>添加到只读安装白名单。

[码头工人]
...
docker.allowed.ro-mounts = nvidia_driver_375.66

4)如果使用nvidia-docker-v2作为gpu docker插件,请将nvidia添加到运行时白名单。

[码头工人]
...
docker.allowed.runtimes = nvidia

用它

分布式外壳+ GPU

分布式外壳程序当前支持指定除内存和vcore之外的其他资源类型。

没有Docker的分布式外壳+ GPU

在不使用Docker容器的情况下运行分布式Shell(询问2个任务,每个任务具有3GB内存,1个vcore,2个GPU设备资源):

纱罐<path / to / hadoop-yarn-applications-distributedshell.jar> \
  -jar <路径/到/hadoop-yarn-applications-distributedshell.jar> \
  -shell_command / usr / local / nvidia / bin / nvidia-smi \
  -container_resources内存-mb = 3072,vcores = 1,yarn.io / gpu = 2 \
  -num_containers 2

您应该能够看到类似的输出

2017年12月5日星期二22:21:47
+ ------------------------------------------------- ---------------------------- +
| NVIDIA-SMI 375.66驱动程序版本:375.66 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| GPU名称持久性-M | 总线编号Disp.A | 挥发性不佳。ECC |
| 风扇温度性能:用法/上限| 内存使用| GPU实用计算M。
| ============================== + ================= ===== + ==================== |
| 0 Tesla P100-PCIE ...关闭| 0000:04:00.0关闭| 0 |
| 不适用30C P0 24W / 250W | 0MiB / 12193MiB | 0%默认|
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla P100-PCIE ...关闭| 0000:82:00.0关闭| 0 |
| 不适用34C P0 25W / 250W | 0MiB / 12193MiB | 0%默认|
+ ------------------------------- + ----------------- ----- + ---------------------- +

+ ------------------------------------------------- ---------------------------- +
| 进程:GPU内存|
| GPU PID类型进程名称用法|
| ================================================= ========================== |
| 找不到正在运行的进程|
+ ------------------------------------------------- ---------------------------- +

用于启动的容器任务。

带有Docker的分布式外壳+ GPU

您还可以使用Docker容器运行分布式Shell。必须指定YARN_CONTAINER_RUNTIME_TYPE / YARN_CONTAINER_RUNTIME_DOCKER_IMAGE以使用Docker容器。

纱罐<path / to / hadoop-yarn-applications-distributedshell.jar> \
       -jar <路径/到/hadoop-yarn-applications-distributedshell.jar> \
       -shell_env YARN_CONTAINER_RUNTIME_TYPE =泊坞窗\
       -shell_env YARN_CONTAINER_RUNTIME_DOCKER_IMAGE = <泊坞窗映像名称> \
       -shell_command nvidia-smi \
       -container_resources内存-mb = 3072,vcores = 1,yarn.io / gpu = 2 \
       -num_containers 2