由于需要在opencl上做一些深度学习的分析,而且我又只会tensorflow所以开始了tensorflow-opencl的下载。
当时在github上发现了两个项目,一个是tf-coriander:https://github.com/hughperkins/tf-coriander。还有一个是tensorflow-opencl:https://github.com/benoitsteiner/tensorflow-opencl。
在第二个项目的readme里始终没有看到下载方法,我首先尝试了tf-coriander。这个项目要求就是支持opencl 1.2的显卡。
我的笔记本电脑显卡是NVIDIA GT940M,特意装了双系统ubuntu16(tf-coriander)和win7(cuda+tensorflow),在下载了cuda之后是支持opencl1.2的。我选择的版本是cuda8.0.很快就把这个tf-coriander下载完成了。运行了双向循环网络,动态循环网络,线性回归,rnn,自编码网络这个五个例子之后。发现用GPU比CPU大概快2-4倍。我觉得可能是因为这几个例子对计算量要求不是很大,GPU的运算能力发挥不出来。后来我想对比一下同样的程序在opencl,cuda,cpu上的变现的时候。我切换到win7,运行cuda版本的tensorflow。发现用时比tf-coriander少了将近20倍。一般由于cuda的优化比opencl好,cuda会比opencl快半分之30左右。所以这个二十倍是我不能理解的,之后我用CPU运行之后,惊奇的发现在cuda里面切换到CPU的运行速度和在tf-coriander中切换到cpu的运行速度不一致,相差大约4-5倍。这个就很害怕了,为了保险起见我在Ubuntu中把tf-coriander卸载,用tensorflow-cpu版运行相同的例子,结果发现还是相差4-5倍,这就排除了系统差异所带来的运行速度的差异。又返回去看项目介绍。给我的感觉只是在opencl设备上运行tensorflow,在加速上就可能不是那么完美。我用tf-coriander的gpu运算和项目中test得到的速度是差不多的,所以我觉得应该不是我下载安装有问题。我又实在无法理解为什么在项目中用CPU会比在tensorflow-cpu中慢几倍甚至十倍。在测试的时候发现其中卷积神经网络的例子始终不能运行成功,运行con2d的函数时报错。最后基于各种原因,无奈放弃了这个项目。至于我出现的状况已经发在issue上。
之后目光就集中在这个tensorflow-opencl的项目上。
认认真真读了一遍readme竟然没发现具体的安装方法?因为当时装cuda版本的tensorflow的时候还算积攒了一些经验。决定先自己摸索。下载了这个项目,然后configure之后。如果你选自opencl support的话会要求你下载一个computecpp(https://www.codeplay.com/products/computesuite/computecpp)。下载好之后运行
$ /usr/local/computecpp/bin/computecpp_info
******************************************************************************** ComputeCpp Info (CE 0.1.2) **************************************************************