专注虚拟化性能优化,硬件显卡网卡虚拟加速,面向容器的轻量虚拟化开发 永远的Linux Geeker!
分类: 大数据
2019-02-02 13:04:07
这篇2016年的论文阐述了深度学习框架Caffe的一个新分支。更具体的说,这是一个用支持开放工业标准的OpenCL后端取代了基于CUDA(闭源)后端的分支。代码最初存放在,成熟后合并到Caffe的官方地址下。
在开发一个DNN(深度神经网络)模型的时候,我们总是希望很容易的就可以把这个模型部署到不同程序里,然后运行在不同平台下,平台诸如服务器,NVIDIA GPU,AMD GPU, ARM GPU,甚至是智能手机或平板电脑。 然而现实却是大部分的深度学习框架,包括Caffe,都集成了CUDA的类库, 而且只能运行在NVIDIA的GPU上,这样就大大限制了平台之间的可移植性。
由于拥有各大商业芯片厂商(Altera,AMD,Apple,ARM Holdings,Creative Technology,IBM,
Imagination Technologies,Intel,Nvidia,Qualcomm,Samsung,Vivante,Xilinx,ZiiLABS)的支持
,OpenCL有助于异构计算实现跨平台移植。为了更好的兼容多平台,OpenCL采用了在运行过程中识别具体设备以及编译的动态机制。
OpenCL最初由Apple开发,然后交由Khronos Group接管。它可以运行在Android,FreeBSD,Linux,
MacOS,Windows等不同操作系统上。
Caffe框架一开始由C++和CUDA编写而成,其CUDA层负责硬件资源分配以及使用的优化,例如 CPU-GPU的任务调度,内存管理以及数据传输等。但是由于OpenCL在硬件抽象,缓存管理,同步以及数据传输上使用了不同于CUDA的实现,所以它的后端移植并不是一个很简单的过程。
这篇论文将OpenCL的移植过程分成两个阶段。阶段一实现了一个包括三层的的逐层移植,这三层分别是C++机器学习接口,OpenCL封装器,以及GPU核心。逐层移植是指我们一层层的进行移植,然后每移植一层就用其它原来的CUDA层进行验证,这样很好的保证了DNN算法的正确性和收敛性。
当完成阶段一的三层移植后,阶段二集中于性能优化。通过结合AMD的分析工具CodeXL以及OpenCL的event和printf,我们对阶段一移植的OpenCL进行了剖析,发现了一些比较大的瓶颈。首先是在构建GPU核心时,OpenCL 的在线编译频繁调用了clBuildProgram:以一个迭代100次的Cifar训练为例,期间竟然产生了63次clBuildProgram调用,并占据了68%的整体时间。另外一个瓶颈就是卷积层,它占据了绝大部分的计算时间。由于在不同层间产生了大量长窄形的不规则矩阵,BLAS(基础线性代数程序集)测试性能遭受了很大的损失。
为避免这些情形,这篇论文提出了三种主要的优化技术。首先,利用缓存GPU核心来防止OpenCL在线编译的过载,其次重新排布批量数据来提高数据并行化,最后就是采用多命令队列来加速任务并行化。这些优化技术非常有效的将DNN问题集的大小同当前的OpenCL数学库映射到一起,改善了硬件资源利用率,性能提速高达4.5倍。
测评采用了AlexNet DNN模型和ImageNet数据库,分别对OpenCL后端和CUDA后端的Caffe进行了性能对比,类库分别采用了没有优化的clBLAS和cuBLAS,以及各自优化后的clBLAS(批量并行优化)和cuDNN v2,CUDA后端运行在NVIDIA的TitanX显卡,OpenCL后端则在AMD的R9 Fury显卡,输入为大小100的小型批数据。
通过图三所示,经过优化的clBLAS在性能上已经可以同cuBLAS相媲美。当然,跟同样经过优化的cuDNN v2相比,OpenCL Caffe仍然落后了一倍。但是考虑到AMD R9 Fury约560美元同NVIDIA TitanX约1000美元的市场售价,作者认为OpenCL Coffe仍然具有非常好的性价比。
一个显而易见的问题是,论文一直在强调OpenCL后端的可移植优势,那么文中在AMD GPU上测试的OpenCL代码能不能直接在ARM的MALI GPU上运行呢?这是一个很好的验证实验,但是作者并没有在文中提及。
另外,作者还提醒了一些兼容性上的小问题,“有一些生产厂商采用了不同的扩展名和关键字。例如Caffe在GPU核心中使用了很多模板来支持不同的浮点精度,可是不同厂商的这些模板关键字并不一样,这样我们就必须要修改代码才能让它在不同平台上运行。”
OpenCL对深度学习框架的支持还不是很完善,但正如论文所讲,它会在未来中变得更好。
原文:http://muratbuffalo.blogspot.com/2017/09/paper-summary-opencl-caffe-accelerating.html