2016 年的这篇文章
http://dl.acm.org/citation.cfm?id=2909443&dl=ACM&coll=DL
展示了移植到 OpenCL 的深度学习框架 Caffe。更准确地说,这个版本的 Caffe 使用开源的标准 OpenCL 后端,代替了原本的 CUDA 后端(译者注:Caffe 原本的后端 CUDA 是闭源的)。它一开始公布在一个独立的 GitHub 仓库,之后被迁移到了 Caffe 的官方 GitHub 仓库中。
独立 GitHub 仓库:
https://github.com/amd/OpenCL-caffe
官方 GitHub 仓库:
https://github.com/BVLC/caffe/tree/opencl
开发深度神经网络模型时,我们总是希望尽量降低跨平台部署(服务器,NVIDIA 和 AMD 的显卡,甚至智能手机和平板电脑),和适配不同应用时的迁移成本。然而,包括 Caffe 在内的大多数深度学习框架都集成了 CUDA 并仅支持 NVIDIA 显卡,跨平台兼容性受到了局限。
由于各大商业芯片厂商(Altera, AMD, Apple, ARM Holdings, Creative Technology, IBM, Imagination Technologies, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx, ZiiLABS 等等)的支持,OpenCL 支持异构计算(译者注:指在同一系统中使用一种以上的处理器或内核)具有跨平台迁移的能力。为了保证平台兼容性,OpenCL 会检查特定的驱动并在运行时编译。
OpenCL 最初由 Apple 开发,之后被转给 Khronos Group,它被 Android、Linux、FreeBSD、MacOS 和 Windows 在内的很多操作系统支持。
最初的 Caffe 是用 C++ 和 CUDA 写成的。Caffe 的 CUDA 层负责优化硬件资源分配和使用,比如 CPU/GPU 间任务调度、内存管理和任务传输。由于 CUDA 和 OpenCL 在设备抽象、缓存管理、同步处理和数据传输的实现上的差别,从 CUDA 到 OpenCL 后端的迁移并没有看上去那么简单。
这篇文章将向 OpenCL 移植的过程划分成两个阶段。第一阶段是 C++ 机器学习接口、OpenCL 封装器和 GPU 内核这三个层的逐层移植。逐层移植,意味着每个层会被依次移植,并在其他层都为原 CUDA 层的环境下进行单元测试,以确保深度神经网络算法的正确性和收敛性。
第一阶段完成后所有的层都已经移植到 OpenCL 下,第二阶段关注的是性能提升。通过 AMD 分析工具、CodeXL、以 printf 结合 OpenCL 事件进行信息输出等方法的性能分析显示,完成第一阶段到 OpenCL 的移植后,还存在一些大的性能瓶颈。OpenCL 的在线编译器会频繁调用 clBuildProgram 来创建 GPU 内核——训练 Cifar 数据集的 100 次迭代中,clBuildProgram 就调用了 63 次,占用总运行时间多达 68%;另一个瓶颈在于,卷积层占用了大多数计算时间。由于不同层间矩阵形状不规则(矩阵长宽比过大),BLAS 的效果相当差。
为解决上述问题,这篇文章提出了三个关键优化技术。GPU 内核使用高速缓存,可以避免 OpenCL 在线编译器负荷过高;使用批处理的数据布局方案,可以提升数据并行化;使用多个队列进行任务处理,可以提升任务并行化。这些优化技术有效地将深度神经网络问题的规模,映射到现有的 OpenCL 数学库上,通过优化硬件资源的利用率,将性能提升了 4.5 倍左右。
OpenCL 版 Caffe 由于优化不完整,和已经进行过较彻底优化的机器学习库 cuDNN 相比,目前还有 2 倍左右的性能差距。作者提出,虽然性能上存在差异,但当我们将性价比(每美元带来的性能效果)纳入考量时,OpenCL 版 Caffe 的优势就显示出来了——AMD R9 Fury 的市价大概 560 美元,而 NVIDIA TitanX 在一千美元左右。
我们很自然地会想到另一个问题,经过了在 AMD 上的测试,OpenCL 版 Caffe 是否也能直接在 ARM 的 MALI 上工作良好呢?这方面的测试可以很好地反映 OpenCL 版 Caffe 的兼容性,然而并没有在这篇文章中提及。
不过,作者们确实注意到了兼容性方面的一些细节问题,文中提到:“特定厂商的扩展名和关键字有一些差异。例如,Caffe 使用了大量的 GPU 内核模板来支持不同的浮点精度。但不同厂家使用的模板关键字是不同的,这增加了相同代码不经修改在不同平台运行的难度。”
OpenCL 对深度学习框架的支持还不完美,但好在,就像我们在这篇文章中看到的,情况正在逐渐得到改善。
本文所讨论的论文对应的 PPT 可从此处获得:
https://github.com/TagineerDai/blog/blob/master/source/_misc/iwocl-2016-opencl-caffe.pdf
http://muratbuffalo.blogspot.hk/2017/09/paper-summary-opencl-caffe-accelerating.html
点击下方图片即可阅读
AI 一周热闻盘点
AI 时代,很多程序员都纷纷想踏入人工智能领域。作为最流行的机器学习语言,Python 可以说是入门机器学习最有效率的一门武器。为了带大家华丽转型,StuQ 推出《普通程序员转向人工智能——3 个月掌握 Python 机器学习(60 课时大课)》。这套课程可以让你全面、系统地掌握机器学习的相关知识,并能胜任机器学习中级工程师及以上的工作。特别地,本课原价 6999 元,团购价 1999 元。