在 Yarn 上使用 GPU

前提

  • 目前,Yarn 只支持 Nvidia GPU。
  • YARN NodeManager 所在机器必须预先安装了 Nvidia 驱动器。
  • 如果使用 Docker 作为容器的运行时上下文,需要安装 nvidia-docker 1.0(这是 Yarn 当前所能支持的版本)。

配置

GPU 调度

在 resource-types.xml,添加如下配置

<configuration>
<property>
<name>yarn.resource-types</name>
<value>yarn.io/gpu</value>
</property>
</configuration>

在 yarn-site.xml 中DominantResourceCalculator 必须被配置以启用 GPU 调度和隔离。

对于 Capacity Scheduler,在 capacity-scheduler.xml 中使用如下参数以配置 DominantResourceCalculator

参数 默认值
yarn.scheduler.capacity.resource-calculator org.apache.hadoop.yarn.util.resource.DominantResourceCalculator

GPU 隔离

yarn-site.xml

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

这将在 NodeManager 上启用 GPU 隔离模块。

如果配置了上述参数,YARN 会自动检测和配置 GPU。如果管理员由特殊的需求,以下参数需要在 yarn-site.xml 中配置。

1) 允许的 GPU 设备

Property Default value
yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices auto

指明由 Yarn NodeManager 管理的 GPU 设备,用逗号分隔。GPU 卡的数量将被汇报给 ResourceManager用于调度。默认值 auto 代表让 YARN 从系统中自动发现 GPU 卡。

如果自动探测会失败或者管理员只希望一部分的 GPU 卡被 Yarn 管理,请人为地指明可用的 GPU 卡。GPU 卡由次设备号和顺序索引来标识。可以通过执行 nvidia-smi -q 并在标准输出中查找 Minor Number 关键字,来获取 GPU 卡的次设备号。

当次版本号被特别指定,管理员还需要提供 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 的 4 块 GPU 卡。

2) 发现 GPU 的可执行程序

参数
yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables /absolute/path/to/nvidia-smi

当给定了 yarn.nodemanager.resource.gpu.allowed-gpu-devices=auto,Yarn NodeManager 将执行 GPU 发现的可执行程序(目前只支持 nvidia-smi)来收集 GPU 信息。如果值为空(默认值),YARN NodeManager 将尝试自行寻找,一个可能的位置是 /usr/local/bin/nvidia-smi。

3) Docker 插件相关的配置

当用户想在 Docker 容器中运行 GPU 程序,可以定制化以下配置项。如果管理员遵循了 nvidia-docker 的默认安装和配置流程,那就可以不配置。

参数 默认值
yarn.nodemanager.resource-plugins.gpu.docker-plugin nvidia-docker-v1

指定操作 GPU 的 Docker 命令插件。默认使用 Nvidia Docker V1.0。

参数 默认值
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) CGroup 挂载

GPU 隔离使用 CGroup 设备控制器 来实现 GPU 卡之间的隔离。为了自动挂载次设备到 CGRoup,以下配置要添加到 yarn-site.xml 文件中。否则,管理员必须人为地创建设备子目录以使用该功能。

参数 默认值
yarn.nodemanager.linux-container-executor.cgroups.mount true

container-executor.cfg

通常需要添加如下配置到 container-executor.cfg 中

[gpu]
module.enabled=true

如果用户要在非 Docker 环境下运行 GPU 程序:

[cgroups]
# 应和 yarn-site.xml 中的 yarn.nodemanager.linux-container-executor.cgroups.mount-path 保持一致
root=/sys/fs/cgroup
# 应和 yarn-site.xml 中的 yarn.nodemanager.linux-container-executor.cgroups.hierarchy 保持一致
yarn-hierarchy=yarn

如果用户要在 Docker 环境下运行 GPU 程序:

1) 将 GPU 相关的设备添加到 Docker 段。

执行命令 ls /dev/nvidia* 获取 GPU 相关的设备,用逗号分隔将它们添加到配置文件中。

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

2) 将 nvidia-docker 添加到 volume-driver 白名单。

[docker]
...
docker.allowed.volume-drivers

3) 添加 nvidia_driver_<version> 到只读挂载的白名单。

[docker]
...
docker.allowed.ro-mounts=nvidia_driver_375.66

使用

Distributed-shell + GPU

分布式 Shell 程序在内存和虚拟核之外,还支持申请更多的资源类型。

不使用 Docker 运行 Distributed-shell + GPU

不使用 Docker 运行分布式 Shell 程序(申请 2 个任务,每个任务消费 3GB 内存、1 虚拟核和 2 块 GPU 卡):

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

对于已经启动的任务,你将从日志中看到如下的输出:

Tue Dec  5 22:21:47 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.66 Driver Version: 375.66 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-PCIE... Off | 0000:04:00.0 Off | 0 |
| N/A 30C P0 24W / 250W | 0MiB / 12193MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-PCIE... Off | 0000:82:00.0 Off | 0 |
| N/A 34C P0 25W / 250W | 0MiB / 12193MiB | 0% Default |
+-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+

基于 Docker 的 Distributed-shell + GPU

同样可以使用 Docker 容器来允许分布式 Shell 程序,请提供 YARN_CONTAINER_RUNTIME_TYPE/YARN_CONTAINER_RUNTIME_DOCKER_IMAGE 来指明使用的镜像。

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

Hadoop 3.1.1 - Yarn - 使用 GPU的更多相关文章

  1. Hadoop 新 MapReduce 框架 Yarn 详解

    Hadoop 新 MapReduce 框架 Yarn 详解: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ Ap ...

  2. Hadoop 新 MapReduce 框架 Yarn 详解【转】

    [转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/] 简介: 本文介绍了 Hadoop 自 0.23.0 版本 ...

  3. 基于Hadoop分布式集群YARN模式下的TensorFlowOnSpark平台搭建

    1. 介绍 在过去几年中,神经网络已经有了很壮观的进展,现在他们几乎已经是图像识别和自动翻译领域中最强者[1].为了从海量数据中获得洞察力,需要部署分布式深度学习.现有的DL框架通常需要为深度学习设置 ...

  4. Hadoop 3.1.1 - Yarn - 使用 FPGA

    在 Yarn 上使用 FPGA 前提 YARN 目前只支持通过 IntelFpgaOpenclPlugin 发布的 FPGA 资源 YARN NodeManager 所在的机器上必须预先安装供应商的驱 ...

  5. 更快、更强——解析Hadoop新一代MapReduce框架Yarn(CSDN)

    摘要:本文介绍了Hadoop 自0.23.0版本后新的MapReduce框架(Yarn)原理.优势.运作机制和配置方法等:着重介绍新的Yarn框架相对于原框架的差异及改进. 编者按:对于业界的大数据存 ...

  6. hadoop多机安装YARN

    hadoop伪分布安装称为测试环境安装,多机分布称为生成环境安装.以下安装没有进行HA(热备)和Federation(联邦).除非是性能需要,否则没必要安装Federation,HA可以一试,涉及到Z ...

  7. 【原创】大数据基础之Hadoop(3)yarn数据收集与监控

    yarn常用rest api 1 metrics # curl http://localhost:8088/ws/v1/cluster/metrics The cluster metrics reso ...

  8. Hadoop生态集群YARN详解

    一,前言 Hadoop 2.0由三个子系统组成,分别是HDFS.YARN和MapReduce,其中,YARN是一个崭新的资源管理系统,而MapReduce则只是运行在YARN上的一个应用,如果把YAR ...

  9. Hadoop记录-MRv2(Yarn)运行机制

    1.MRv2结构—Yarn模式运行机制 Client---客户端提交任务 ResourceManager---资源管理 ---Scheduler调度器-资源分配Containers ----在Yarn ...

随机推荐

  1. js笔记13

    1.js操作css样式 div.style.width="100px".在div标签内我们添加了一个style属性,并设定了width值,这种写法会给标签带来大量的style属性, ...

  2. 关于使用Draw.io画数据库E-R图的说明

    背景简介 E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. diagrams.net是用于构建图表 ...

  3. layui动态创建Tab、Tab右键功能

      1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 & ...

  4. POJ 3026 Borg Maze 广搜(BFS)+最小生成树

    题意:从S出发,去抓每一个A,求总路径最短长度.在S点和A点人可以分身成2人,不过一次只能让一个人走. 思路是先利用BFS求出各点之间的距离,建成图,再套用最小生成树模板. 一次性A了.不过觉得在判断 ...

  5. 调整/home和/root空间容量

    转载请注明出处:http://www.cnblogs.com/gaojiang/p/6767043.html 1.查看磁盘情况:df -h 2.卸载/homeumount /home umount / ...

  6. mybatis 批量新增-批量修改-批量删除操作

    mapper.xml <!-- 批量新增 --> <insert id="saveBatch" parameterType="java.util.Lis ...

  7. 微信小程序支付 后台处理逻辑 (转)

    <?phpnamespace app\parent\controller; use think\Request; class Wxpay{    function wechat(){ //微信配 ...

  8. Window server 2016 搭建Java Web环境

    系统下载 下载种子(迅雷下载): ed2k://|file|cn_windows_server_2016_updated_feb_2018_x64_dvd_11636703.iso|629426585 ...

  9. Java | this的本质 和 static的本质

    this 在说this之前先说一下,对象创建的过程: 1.分配对象空间,并将对象成员变量初始化. 2.执行属性值的显式初始化. 3.执行构造方法. 4.返回相关的地址给相关的对象.   this的本质 ...

  10. VS2017 常用快捷键

    项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt + L = 显示 Solution Explorer(解决方案资源管理器) Shift + Alt+ C = 添 ...