在 Yarn 上使用 FPGA

前提

  • YARN 目前只支持通过 IntelFpgaOpenclPlugin 发布的 FPGA 资源
  • YARN NodeManager 所在的机器上必须预先安装供应商的驱动程序并配置好必需的环境变量。
  • Docker 容器尚不支持。

配置

FPGA 调度

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

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

在 yarn-site.xml 中DominantResourceCalculator 必须被配置以启用 FPGA 调度和隔离。 在 capacity-scheduler.xml 中使用如下参数以配置 DominantResourceCalculator

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

FPGA 隔离

yarn-site.xml

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

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

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

1) 运行的 FPGA 设备

参数 默认值
yarn.nodemanager.resource-plugins.fpga.allowed-fpga-devices auto

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

如果管理员只希望一部分的 FPGA 设备被 Yarn 管理,请人为地指明可用的 FPGA 设备。因为当前只能配置为 c-e.cfg 中的一个主设备号,FPGA 设备由其次设备号标识。对于 Intel 设备,可以通过执行命令 aocl diagnose 并用解析设备名称对应的 uevent 来获取次设备号。

2) 发现 FPGA 设备的可执行程序

参数 默认值
yarn.nodemanager.resource-plugins.fpga.path-to-discovery-executables  

当给定了 yarn.nodemanager.resource.fpga.allowed-fpga-devices=auto,YARN NodeManager 将执行 FPGA 发现的可执行程序(目前只支持 IntelFpgaOpenclPlugin)来收集 FPGA 信息。如果值为空(默认值),YARN NodeManager 将根据供应商的插件选项自行寻找。举例来说,IntelFpgaOpenclPlugin 会从环境 ALTERAOCLSDKROOT 的目录中查找 aocl 信息。

3) 使用的 FPGA 插件

参数 默认值
yarn.nodemanager.resource-plugins.fpga.vendor-plugin.class org.apache.hadoop.yarn.server.nodemanager.containermanager.resourceplugin.fpga.IntelFpgaOpenclPlugin

当前,只支持 Intel OpenCL SDK for FPGA。FPGA 上运行的 IP 程序(.aocx 文件)必须基于 Intel 平台的 OpenCL 提供。

4) CGroups 挂载

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

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

想知道 Yarn 使用 CGroup 的更多信息,请参阅使用 CGroups

container-executor.cfg

通常需要添加如下配置到 container-executor.cfg 中。fpag.major-device-number 和 allowed-device-minor-numbers 是可选参数,指明允许的 FPGA 设备。

[fpga]
module.enabled=true
fpga.major-device-number=## FPGA 的主设备号,默认是 246。强烈建议设置该参数。
fpga.allowed-device-minor-numbers=## 逗号分隔的次设备号,空值代表由 Yarn 管理所有的 FPGA 设备。

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

[cgroups]
# 系统 Cgroup 的根目录(不能为空或“/”)
root=/cgroup
# YARN CGroup 的父目录
yarn-hierarchy=yarn

使用

Distributed-shell + FPGA

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

不使用 Docker 运行分布式 Shell 程序(.bashrc 配置了 SDK 相关的环境变量):

yarn jar <path/to/hadoop-yarn-applications-distributedshell.jar> \
-jar <path/to/hadoop-yarn-applications-distributedshell.jar> \
-shell_command "source /home/yarn/.bashrc && aocl diagnose" \
-container_resources memory-mb=2048,vcores=2,yarn.io/fpga=1 \
-num_containers 1

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

aocl diagnose: Running diagnose from /home/fpga/intelFPGA_pro/17.0/hld/board/nalla_pcie/linux64/libexec

------------------------- acl0 -------------------------
Vendor: Nallatech ltd Phys Dev Name Status Information aclnalla_pcie0Passed nalla_pcie (aclnalla_pcie0)
PCIe dev_id = 2494, bus:slot.func = 02:00.00, Gen3 x8
FPGA temperature = 54.4 degrees C.
Total Card Power Usage = 32.4 Watts.
Device Power Usage = 0.0 Watts. DIAGNOSTIC_PASSED
---------------------------------------------------------

在启动容器前指定 Yarn 需要配置的 IP

对于 FPGA 资源,容器可以通过环境变量 REQUESTED_FPGA_IP_ID 来让 YARN 下载并分配一个 IP 给它。举例来说,REQUESTED_FPGA_IP_ID=“matrix_mul” 会触发在容器本地目录中查找名称包含 matirx_mul 字样的 IP 文件(.aocx 文件),程序必须首先将该文件分发到各个容器。当前只支持为所有设备分配一个 IP。如果用户不设置该环境变量,则表示用户程序将自行查找 IP 文件。需要注意的是,提前 下载 IP 并重新编程在 Yarn 中并不是必需的,因为 OpenCL 程序可以在运行时查找 IP 文件并重新编程设备。但 Yarn 为容器完成这一步骤,以实现最快的重新编程。

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

  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新一代MapReduce框架Yarn(CSDN)

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

  4. hadoop多机安装YARN

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

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

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

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

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

  7. Hadoop生态集群YARN详解

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

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

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

  9. Hadoop(七)YARN的资源调度

    一.YARN 概述 YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操 作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序 YARN ...

随机推荐

  1. 前台使用Vue

    前台搭建遇到问题 ----前台访问量大 未采用vue 单页面SAP 的方式构建 使用多HTML构建页面 项目构建 vue 2.6 https://cn.vuejs.org/ elementUI htt ...

  2. DOS命令行(9)——wmic-系统管理命令行工具

    wmic 介绍与语法 WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术:用户可以使用 WMI 管理本地和远 ...

  3. 34、mysql数据库(介绍)

    34.1.什么是数据库: 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织. 描述和存储,具有较小的冗余,较高的数据独立性和易扩 ...

  4. 前端 JavaScript 实现一个简易计算器

    前端使用 JavaScript 实现一个简易计算器,没有难度,但是里面有些小知识还是需要注意的,算是一次基础知识回顾吧. 题目 实现一个简易版的计算器,需求如下: 1.除法操作时,如果被除数为0,则结 ...

  5. 别错过了,130+个微信小程序源码 “限时分享“

    ​里面有130+款微信小程序源码和效果图,我只放了其中几款小程序的截图,具体请看下方图片 ​ ​ ​ ​ ​ ​ ​ ​ 仿网易云音乐小程序源码 链接:https://pan.baidu.com/s/ ...

  6. Linux:linux服务器稳定性压力测试工具stress安装与使用

    stress是一个linux下的压力测试工具,专门为那些想要测试自己的系统,完全高负荷和监督这些设备运行的用户. 1. stress1.0.4下载地址 下载:https://fossies.org/l ...

  7. Spring:Spring的各jar包依赖及作用详解

    spring-core.jar(必须有的核心jar包) 这个jar 文件包含Spring 框架基本的核心工具类.Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己 ...

  8. WPF教程八:如何更好的使用Application程序集资源

    这一篇单独拿出来分析这个程序集资源,为的就是不想让大家把程序集资源和exe程序强关联,因为程序集资源实际上是二进制资源,后续编译过程中会被嵌入到程序集中,而为了更方便的使用资源,我们要好好梳理一下程序 ...

  9. MYSQL_Join注入技巧

    Join注入技巧 join无名列报错注入 约束条件 在知到表名的前提下才能操作 注入语句 and extractvalue(1,concat(0x7e,(select * from (select * ...

  10. Lua表达式

    目录 算术运算符 关系运算符 逻辑运算符 字符串连接(more) string.format转义符的使用 优先级 算术运算符 Lua 的算术运算符如下表所示: 示例代码:$expr1.lua prin ...