没有合适的资源?快使用搜索试试~ 我知道了~
TensorFlow框架中OpenCL算子的实现及集成.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 98 浏览量
2022-11-02
16:46:23
上传
评论
收藏 510KB DOCX 举报
温馨提示
试读
24页
TensorFlow框架中OpenCL算子的实现及集成.docx
资源推荐
资源详情
资源评论
引言
随着深度学 习与人工智能技术的发展以及这些技术在大数据领域的广泛
应用,深度学习的算法和模型日趋复杂,参数量和计算的规模也愈加庞大。因此,
深度学习模型的训练过程对计算设备有着极高的性能要求。在提升训练效率的
方法上,可以选择性能更强大的计算设备,或是采用多设备进行并行训练。其中
一种显著提升训练效率的方法是在深度学习中使用异构编程。
目前,CUDA
[1]
(Compute Unified Device Archit-ecture)和 OpenCL
[2]
(Open
Computing Language)是两种常见的异构编程模型。CUDA 是由英伟达公司设
计开发的闭源异构编程模型,仅能应用于英伟达 GPU 设备;OpenCL 是由苹果公
司开发,目前由 Khronos Group 维护的开源异构编程模型。OpenCL 秉持开放
的标准,其主要设计目的是要提供一个能够适用于各种硬件设备的异构计算平
台 。 在 硬 件 设 备 方 面 ,OpenCL 能 够 支 持 CPU、 GPU、 DSP( Digital Signal
Process,数字信号处理器)和 FPGA(Field-Programmable Gate Array,现场可
编程逻辑门阵列)等。
在机器学习框架方面,不同企业与科研院所根据不同的应用场景和研究方
向开发了多种机器学习框架。其中,Google 公司研发的 TensorFlow
[4]
是应用最
为广泛的机器学习框架之一,其稳定的 API 与易于理解的计算流程对开发者非
常友好,对 Python 语言和科学计算的工具包的支持也使深度学习应用的开发更
为快捷高效。TensorFlow 支持在多种平台上使用,开发者也能够将 TensorFlow
开发的应用部署在多核 CPU、GPU 和 FPGA 等设备上。此外,TensorFlow 丰
富的文档和实例、庞大而活跃的开发社区也吸引了大量深度学习与人工智能应
用的开发者。以上众多优点使得 TensorFlow 拥有相当多的使用者。
对于 TensorFlow 而言,由于英伟达公司在深度学习与人工智能领域完备高
效的开发生态,包括性能不断升级优化的硬件设备以及软件方面的高性能数学
计算库(如 cuBLAS、cuDNN 等),TensorFlow 在异构计算中均使用英伟达公
司的 CUDA 进行实现。而面对使用 OpenCL 作为异构编程模型的国产硬件加
速 设 备 ,TensorFlow 不 能 在 上 面 实 现 加 速 设 备 运 行 的 功 能 。 这 不 仅 浪 费 了
OpenCL 硬 件设备的计算 能 力,也 限 制了 TensorFlow 在多种 设 备上的通用性 。
如果能够实现 TensorFlow 对 OpenCL 的支持,就能够将算法与模型便捷高效地
部署到所有支持 OpenCL 的硬件设备上,为人工智能的应用带来极大便利。同
时,TensorFlow 在支持 OpenCL 后,人工智能的应用在加速硬件的选择上也会
有更多空间,这一点是与特定硬件绑定的异构环境(如英伟达的 CUDA、AMD
的 ROCm 等 ) 无 法 做 到 的 。 总 之 ,TensorFlow 对 OpenCL 的 支 持 能 够 使
TensorFlow 开发的应用充分利用不同 OpenCL 设备的优势,极大扩展在异构硬
件设备上的通用性,从而挖掘出 OpenCL 设备在深度学习与人工智能等领域的
巨大潜力。
对于支持 OpenCL 环境的 TensorFlow 实现,Hu-gh Perkins 开发的 CUDA-
on-CL
[8]
实 现 了 CUDA 代 码 到 OpenCL 代 码 的 转 换 ,并 在 此 基 础 上 实 现 了 tf-
coriander
[9]
。tf-coriander 使 用 CUDA-on-CL 将 Ten-sorFlow 1.7 版 本 中 的 部
分 CUDA 代码通过 CLANG 编译器编译为字节码,并使用 OpenCL 生成器将字
节码转换为 OpenCL 代码。然而,由于 OpenCL 生成器是基于规则实现转换的,
因此只实现了 TensorFlow 中一部分 CUDA 核函数的转换。由 Khronos Group
提出的 SYCL
[10]
是在 OpenCL 基础上的抽象与封装,并由 Codeplay 公司给出
TensorFlow 在 SYCL 基础上的实现。然而,SYCL 目前没有统一的标准,各个硬
件厂商会根据自己的硬件给出 SYCL 实现。在 Codeplay 的 TensorFlow 实现
中,ComputeCpp
[13]
是 SYCL 的实现。另外,SYCL 的实现需要 SPIR(Standard
Portable Intermediate Representation)
[14]
的支持。SPIR 负责 SYCL 代码的编
译 工 作 , 如 果 OpenCL 设 备 不 支 持 SPIR, 则 该 设 备 无 法 使 用 SYCL 。 因
此,TensorFlow 在 SYCL 设备上的运行无法保证在 OpenCL 设备上也能够正常
运行。
实现 TensorFlow 对 OpenCL 的支持,算子的实现是关键内容之一。算子负
责了神经网络中计算的流程控制与逻辑表达,并相互组合构成了复杂的神经网
络模型。在异构计算环境中,算子的底层表示为核函数
[15]
,由异构编程环境中特
定的程序语言实现。核函数在异构设备上运行时,通过对异构设备的资源进行
分块处理,使计算能够分配在多个计算单元中并行执行,从而实现并行加速效果。
此 外 ,OpenCL 算 子 实 现 之 后,还 需 要 将 其 集成 至 TensorFlow 才 能 真 正 实 现
TensorFlow 对 OpenCL 的支持。
本文提出了在 TensorFlow 框架中实现和集成 OpenCL 算子的解决方案,主
要贡献如下:(1)给出了 OpenCL 算子的实现方法,并在 TensorFlow 框架中
集成 了 OpenCL 算子,实现了 TensorFlow 对 OpenCL 的支 持。(2)通 过对
OpenCL 算子的优化,实现了对算子执行速度的提升。(3)通过一系列实验,验
证了集成后的 OpenCL 算子和 TensorFlow 的正确性。
本文第 1 章节主要介绍 TensorFlow 中与 OpenCL 算子实现与集成有关的
概念。第 2 章节主要介绍了 OpenCL 算子实现与集成的具体实现,以及实现过
程中遇到的难点和解决方法。第 3 章节通过实验验证了本文实现的 OpenCL 算
子的正确性和有效性。第 4 章节对本文工作进行了总结并提出了未来的改进方
向。
1 相关概念介绍
1.1 TensorFlow 中的算子
算子在 TensorFlow 中占有重要地位。在 Tensor-Flow 计算流程抽象化后
的数据流图中,算子是其中的节点,节点之间相连的边代表数据在算子间的流动。
例如,在图 1 的数据流图中使用了乘法(mul)与加法(add)算子进行相应运
算。从数据流图中可以看出,算子负责 TensorFlow 中数据的处理与运算,是整
个计算流程的核心。
图 1
图 1 TensorFlow 的数据流图
Fig.1 Data flow graph for TensorFlow
另外,从图 2 的 TensorFlow 框架示意可以看出,算子为 TensorFlow 提供了
基础支持,从而使 TensorFlow 能够实现复杂的网络与模型。
图 2
图 2 TensorFlow 框架示意图
Fig.2 TensorFlow framework diagram
在 TensorFlow 的 源代 码中 ,算 子由 继承 了 OpKernel 的 派 生类 来 实现 。
OpKernel 是 TensorFlow 中所有算子类的基类,里面包含了算子计算所需的数
据类型与相关属性等内容。以 FooBar 算子为例,其结构如图 3 所示.
图 3
图 3 FooBar 算子的类图
Fig.3 Class diagram of FooBar operator
剩余23页未读,继续阅读
资源评论
罗伯特之技术屋
- 粉丝: 3645
- 资源: 1万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功