YangYouji's WebSite

tensorflowsharp中使用CUDA

tensorflowsharp使用C#封装了tensorflow的c-api接口,可以方便的在C#中使用tensorflow的模型。但作者只提供了cpu版本的tensorflow,如果要使用gpu版本的tensorflow,就需要自己编译出一个带CUDA的dll。好在网上资料比较多,编译起来并不是很困难

一.编译环境搭建

windows下搭建tensorflow编译环境可以参考官网上的教程,写得很详细,按照上面一步步操作就可以了。链接https://www.tensorflow.org/install/source_windows

教程中需要完成的内容
1.安装 Python 和 TensorFlow 软件包依赖项
2.安装 Bazel (注意bazel的版本,新的tensorflow版本对bazel的版本限制比较死)
3.安装 MSYS2
4.安装 Visual C++ 生成工具 2015
5.安装 GPU 支持 (CUDA版本选择根据显卡型号,tensorflow版本等,参考其教程就可以了)
6.下载 TensorFlow 源代码

二.编译脚本修改

编译时可以直接使用源码tool中已经写好的编译脚本进行编译,省去一些填坑的时间。
写好的脚本在 tensorflow\tools\ci_build\windows\libtensorflow_gpu.sh 这个里面。直接运行这个脚本是不行的,还需要稍微修改一下。

该脚本会先调用tensorflow\tools\ci_build\windows\bazel\common_env.sh这个脚本设置一些环境变量。有几个需要特别关注的

1.BAZEL_SH MSYS2的目录
2.PYTHON_BASE_PATH python的安装目录

3.bazel安装目录 注意是目录不是文件本身的path

4.添加git的安装目录

5.TF_CUDA_VERSION CUDA的版本
6.TF_CUDNN_VERSION CUDNN的版本
7.TF_CUDA_COMPUTE_CAPABILITIES 需要编译的显卡 compute bapabilities
8.CUDA_TOOLKIT_PATH与CUDNN_INSTALL_PATH CUDA和CUDNN的安装目录

另外 libtensorflow_gpu.sh 这脚本里编译的命令也可以优化一下,如果使用的平台是intel4代以后的cup,可以将–copt=/arch:AVX 修改为 –copt=/arch:AVX2

三.编译

从开始菜单打开一个MSYS2 MinGW 64-bit 命令行窗口,CD 到libtensorflow_gpu.sh这个脚本的目录 输入 ./libtensorflow_gpu.sh 来运行这个脚本,就开始进行编译了。
编译时间一般要一个小时左右。。。 提示成功后在 bazel-out\x64_windows-opt\bin\tensorflow 这个目录里 会生成一个名为tensorflow.dll 的文件。这个就是tensorflowsharp调用的dll了

四.测试

tensorflowsharp默认调用的dll 文件名为libtensorflow.dll,所以将编译后的dll该个名字,替换掉原来的libtensorflow.dll 就可以了

退出移动版