TensorFlow.NET (TF.NET) 是 SciSharp STACK 开源社区团队的贡献,它为TensorFlow提供了.NET Standard binding,旨在以C#实现完整的Tensorflow API,允许.NET开发人员使用跨平台的.NET Standard框架开发、训练和部署机器学习模型。TF.NET的使命是打造一个完全属于.NET开发者自己的机器学习平台,特别对于C#开发人员来说,是一个“0”学习成本的机器学习平台,该平台集成了大量API和底层封装,力图使TensorFlow的Python代码风格和编程习惯可以无缝移植到.NET平台,下图是同样TF任务的Python实现和C#实现的语法相似度对比,从中读者基本可以略窥一二。
SciSharp STACK的机器学习工具库和微软官方的库最大的区别是:里面所有库的语法都最大限度的按照python生态的习惯。有了SciSharp, 相当于有了typed-python (强类型python),这样做的目的,也是为了.NET开发者花最小的成本去学习并运用上机器学习。SciSharp STACK 目前包含几个流行项目: BotSharp(AI机器人平台框架),NumSharp(数值计算库),TensorFlow.NET (深度学习库),Pandas.NET (数据处理库),SharpCV(图形图像处理库),可以完全脱离Python环境使用,目前已经被微软ML.NET官方的底层算法集成,并被谷歌写入TensorFlow官网教程推荐给全球开发者。
谷歌官方推荐.NET开发者使用
URL: https://www.tensorflow.org/versions/r2.0/api_docs
你是否踩过GPU环境部署中Cuda和cuDNN的坑,是否为如何进行深度学习GPU训练软件的移植和快速应用而烦恼,那么本文就是为了解决这些问题而制作的,一键部署GPU,最大化体现.NET优势,彻底解决GPU环境配置的繁琐问题,让你专注于深度学习算法和模型的开发。
本文主要适用于下述情况:
原理说明:
利用.net的封装优势,将 tensorflow.dll、TensorFlow.NET.dll 及 NVIDIA GPU 相关必要的 DLL 全部提取,拷贝至应用程序相同目录下,伴随可执行文件打包、移植使用,实现 GPU 环境跟随主程序版本打包应用的效果。
下面开始进行实测说明:
第一步,NVIDIA GPU驱动安装
在NVIDIA官网下载最新的显卡驱动 [https://www.geforce.cn/drivers],例如我的GeForce RTX 2080,,操作系统请按照你自己的情况选择Windows 7 64-bit 或者 Windows10 64-bit。
注意事项:TensorFlow 2 需要的 CUDA 10.1 ,需要 NVIDIA® GPU 驱动程序 418.x 或更高版本。
找到后点击下载:
下载完成后,进行安装(这是RTX2080显卡对应的驱动程序,读者的硬件和驱动有可能不同):
安装完成后,重启计算机:
第二步,新建项目,安装和引用 TensorFlow.NET GPU
创建解决方案,通过 NuGet 安装 TF.NET GPU,安装指令如下:
Install-Package TensorFlow.NET
Install-Package SciSharp.TensorFlow.Redist-Windows-GPU
第三步,拷贝NVIDIA GPU加速的必要DLL至程序运行目录
主要是这一步,拷贝NVIDIA GPU加速的依赖的类库至程序运行目录下,读者的依赖类库可能略有差异,具体查询和下载的方法后面会单独介绍,本文使用的硬件(RTX2080)和系统环境(Win7 64bit)对应的7个依赖类库如下:
具体的文件明细如下:
第四步,拷贝完成后即可进行GPU加速的深度学习代码开发
拷贝完成后即可直接进行GPU加速的TensorFlow深度学习代码的开发,开发完成的程序可以直接打包,转移至新的GPU环境的计算机中,直接进行GPU加速的TensorFlow.NET的模型训练(显卡驱动需要预先正确安装)。
完整的TensorFlow.NET带GPU环境的类库清单如下:
附录:利用 Dependency Walker 软件查询 TF.NET 依赖的 GPU 类库
什么是 Dependency Walker ?Dependency Walker 是 Microsoft Visual C++ 中提供的非常有用的 PE 模块依赖性分析工具。主要功能如下:
本文主要利用 Dependency Walker 查看模块依赖性,通俗地讲,就是利用 Dependency Walker 软件找到 tensorflow.dll 这个核心库的GPU版本正常运行,所需要配套的那些必要的DLL文件。
首先,我们打开 Dependency Walker 软件,将 tensorflow.dll 拖入主界面(或者点击手动载入文件),载入后,软件会自动分析并给出缺失的DLL文件清单,如下所示:
然后,根据缺少的文件信息,直接从NVIDIA官网下载,或者从另一台已经配置完成GPU环境的PC中拷贝,拷贝路径同样可以利用 Dependency Walker 进行自动查询,方法同上,也是在已经配置完成GPU环境的PC上,将 tensorflow.dll 拖入 Dependency Walker 主界面,该软件会自动找到匹配的DLL文件的详细目录信息(读者的目录不一定相同,一般从程序运行目录或者环境变量PATH的目录中自动查找),如下所示:
拷贝完成后,重新运行 Dependency Walker 软件,重复上述流程,即可发现所有DLL均已正常被引用,接下来,就可以愉快地专注于深度学习算法的开发和模型的搭建了,正常引用的DLL如下所示:
以上,就是零基础部署GPU加速的TensorFlow.NET深度学习训练环境的全部过程,只需复制粘贴,即可完成GPU环境的安装,非常地简单便捷。
TensorFlow.NET: https://github.com/SciSharp/TensorFlow.NET
SciSharp-Stack-Examples: https://github.com/SciSharp/SciSharp-Stack-Examples
TensorFlow.NET-Tutorials: https://github.com/SciSharp/TensorFlow.NET-Tutorials