在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 |
<属性> <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
[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
分布式外壳程序当前支持指定除内存和vcore之外的其他资源类型。
在不使用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容器运行分布式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