1.极简入门TensorFlow C++源码
2.TF-TRT使用环境搭建
3.[推理部署]👉Mac源码编译TensorFlow C++指北
4.深度学习篇——Tensorflow-GPU配置
5.安装TensorFlow、源码 Pytorch教程
6.从源码build Tensorflow2.6.5的安装记录
极简入门TensorFlow C++源码
前一段时间,我专注在框架开发上,源码并偶尔协助业务同学优化使用TensorFlow的安装代码。在观看dmlc/relay、源码nnvm的安装健康php源码代码时,我发现了它们的源码有趣之处。我也对TensorFlow的安装Graph IR、PaddlePaddle的源码Graph IR产生了兴趣,上周五在阅读代码时,安装无意间听到了一个数据竞赛群讨论框架的源码底层实现。几位算法大佬提到了看底层源码可能较为繁琐,安装因为这类代码通常相对容易理解。源码在与群内伙伴的安装交流后,我萌生了撰写一篇关于如何阅读TensorFlow或其他框架底层源码的源码文章。
选择合适版本的bazel,对于阅读TensorFlow源码至关重要。应使用版本为0..0的bazel来拉取TF2.0代码,因为太高的版本或太低的版本可能影响阅读体验。在安装了合适的bazel版本后,使用clion上的bazel插件进行导入,然后配置编译,导入项目,等待clion编译整个项目。完成编译后,就能愉快地阅读代码,甚至于protobuf生成的文件也能轻松跳转。
使用c++编译模型是TensorFlow的另一面。尝试使用c++编写模型代码,可以深入理解TensorFlow的底层机制。主要函数包括CreateGraphDef、改插件源码ConcurrentSteps、ConcurrentSessions等。通过这些函数,可以构建计算图,定义节点、常量变量、操作符等。这为理解TensorFlow的逻辑提供了直观的视角。
深入分析代码后,可以了解到TensorFlow的GraphDef机制、Square类的实现、注册到特定op的过程、functor的使用以及最终的实现逻辑。这有助于理解TensorFlow的核心原理,并在阅读源码时进行更深入的思考。
除了阅读源码,还可以通过编写测试用例来增强理解。TensorFlow提供了丰富的测试用例,如在client_session_test.cc中运行测试程序,可以验证代码的正确性。这不仅有助于理解代码,还能提高对TensorFlow框架的掌握程度。
阅读源码只是理解TensorFlow原理的开始,深入行业论文和请教行业专家是进一步深入学习的关键。网络上关于机器学习系统的资料丰富多样,但缺少系统性的课程。希望官方能够分享更多框架的干货,并期待在学习过程中总结和分享更多资源。阅读源码虽然复杂,但其背后蕴含的源码象照片原理和逻辑十分有趣。
TF-TRT使用环境搭建
TF-TRT,即TensorFlow与TensorRT的集成,是NVIDIA为加速深度学习推理应用而设计的工具。它简化了TensorFlow用户在GPU上利用TensorRT进行模型推理的流程。本文主要介绍如何在服务器上搭建TF-TRT的使用环境和编写相关代码。
首先,NVIDIA推荐的TF-TRT环境配置基于TensorRT 5.0RC,需要确保NVIDIA驱动程序版本.0以上,CUDA .0以及TensorRT。安装过程建议在Anaconda的虚拟环境中进行,从Tensorflow GitHub上下载1.版本源码,并通过bazel build工具生成pip安装包。在编译时,由于GCC 5.0可能与新版本兼容性问题,需添加特定编译选项。
对于服务器上直接安装,你需按照官方教程安装CUDA、CUDNN、NVIDIA Driver和TensorRT。在Tensorflow的configure文件中,根据你的硬件配置进行相应的调整。然后,通过pip安装生成的.whl文件,安装时需要注意选择nvcc编译器,cudnn 7.3以上版本,以及兼容性的GCC编译选项。
另一种方式是利用Docker容器,Tensorflow .容器需要nvidia driver +版本,并需要获取Nvidia GPU cloud的API密钥。安装完成后,unity 买断源码你可以通过Docker拉取tensorflow:.-py3镜像,验证TensorRT与Tensorflow的集成是否成功。
无论是直接安装还是容器化,都需注意选择合适的驱动和软件版本,以确保TF-TRT的稳定运行。安装过程中,还可以根据实际需求在container中安装其他软件,以满足个性化需求。
[推理部署]👉Mac源码编译TensorFlow C++指北
在Mac环境下编译TensorFlow C++源码,需要完成以下步骤,以避免可能的编译问题,确保顺利构建。
首先,确认系统环境满足要求。需有Xcode和Command Line Tools,JDK 1.8.0版本以支持编译过程中所需的Java环境,以及Bazel工具,TensorFlow依赖此工具进行编译。特别注意Bazel版本需与TensorFlow对应,如TensorFlow 1.对应Bazel 0..1。
接下里,安装依赖,包括JDK和Bazel。JDK安装时需检查电脑中是否已安装,并确保正确安装。使用HomeBrew安装Bazel,通过命令行接受协议,并使用`--user`指令确保安装在个人目录的`bin`文件夹下,同时设置`.bazelrc`路径为`$HOME/.bazelrc`。
安装自动化工具`automake`和使用Python3.7.5在虚拟环境中构建TensorFlow C++源码。智控源码推荐使用清华镜像源加速`pip`的安装过程。通过`git clone`方式下载TensorFlow源码,确保checkout至r1.分支。调整域名映射以提升`git clone`速度。
进行编译选项配置,通常在TensorFlow文件夹内运行命令,根据提示选择默认选项。
开始编译TensorFlow,此过程可能需要较长时间,完成后,应在`bazel-bin/tensorflow`目录下找到编译好的`libtensorflow_cc.so`和`libtensorflow_framework.1.dylib`文件。
若遇到`Undefined symbols for architecture x_: “_CFRelease”`错误,这通常与创建软连接有关,无需特别处理。若需要手动安装额外依赖库,如Eigen3,可参考相关指南。
编译完成后,可对C++接口进行测试,验证编译过程的正确性。通常情况下,Mac下的TensorFlow 1. C++源码编译完成。
最后,编译TFLite,生成的动态链接库将保存在指定目录下。在`CMakelists.txt`文件中增加对应配置项,以完成TFLite的构建。
总结而言,Mac下TensorFlow 1. C++源码编译及TFLite的构建,需要遵循上述步骤,并确保环境与工具版本的兼容性,以顺利进行编译过程。Linux系统下的编译方式相似,但具体细节可能有所不同。
深度学习篇——Tensorflow-GPU配置
深度学习开发中,配置Tensorflow GPU是一个基础且关键的步骤。首先,对于Python 3.5和3.6用户,直接通过pip安装Tensorflow是便捷的选择,前提是确保使用的是位版本的Python。然而,pip安装可能会影响CPU性能,因为缺少某些库,对于追求完美的开发者,可以考虑源码安装方式,后续会有详细教程。
Tensorflow GPU需要与CUDA 9.0版本兼容,因此你需要从NVIDIA官网下载对应你操作系统的CUDA安装文件,例如Windows 用户,应选择exe版本进行下载。安装过程中,务必检查显卡兼容性,若通过则继续,否则可能需要卸载GPU版本的Tensorflow并重新安装普通版本。
CUDNN是Tensorflow加速的关键,它是NVIDIA专为深度学习设计的GPU加速库,优化了深度神经网络的基本操作。安装CUDNN时,确保CUDA_PATH设置正确,还需将其bin和lib\x目录添加到系统环境变量的path中。
验证安装成功的方法是运行Tensorflow,如果没有报错,就说明一切准备就绪,可以开始深度学习的探索之旅了。最后,对于CUDA、CUDNN的资源,提供了一个百度网盘链接,但可能有失效的风险,如需更新资源,请在下方留言。
安装TensorFlow、 Pytorch教程
TensorFlow和PyTorch安装教程(Windows系统)
对于Windows用户,这个教程旨在简化入门过程。无需手动配置CUDA,特别适合初学者。如果你需要利用高级指令集AVX2和SSE,或者追求最新版本的TensorFlow,可以考虑源码编译。准备工作
确保你的NVIDIA驱动程序是最新的。如果未更新,访问官方网站下载并安装。安装anaconda
推荐安装anaconda,安装时记得勾选自动添加环境变量。anaconda下载地址如下: 如果担心安装包过大,可以考虑mini conda,下载地址同样在此处。在Linux下安装
使用以下命令下载并安装,安装时要确认添加环境变量。Windows下的激活
打开anaconda prompt,确保你处于anaconda环境,如未激活,使用`conda activate base`。创建和管理虚拟环境
为了管理不同版本的TensorFlow和PyTorch,创建虚拟环境。创建命令如下,安装后输入y确认。安装TensorFlow
根据你的硬件选择CPU或GPU版TensorFlow。CPU版安装命令可考虑使用清华镜像源加速下载。GPU版安装时,conda会自动安装相关依赖。测试安装
确认安装成功后,打开Python进行测试。若还需安装其他库,如keras、pandas和scikit-learn,可通过相应命令。安装PyTorch
安装步骤与TensorFlow类似,首先确保anaconda环境和配置。然后创建PyTorch虚拟环境并使用conda进行安装。从源码build Tensorflow2.6.5的记录
.从源码编译Tensorflow2.6.5踩坑记录,笔者经过一天的努力,失败四次后终于成功。Tensorflow2.6.5是截至.时,能够从源码编译的最新版本。
0 - 前期准备
为了对Tensorflow进行大规模修改并完成科研工作,笔者有从源码编译Tensorflow的需求。平时更常用的做法是在conda环境中pip install tensorflow,有时为了环境隔离方便打包,会用docker先套住,再上conda + pip安装。
1 - 资料汇总
教程参考:
另注:bazel的编译可以使用换源清华镜像(不是必要)。整体配置流程的根本依据还是官方的教程,但它的教程有些点和坑没有涉及到,所以多方材料了解。
2 - 整体流程
2.1 确定配置目标
官网上给到了配置目标,和对应的版本匹配关系(这张表里缺少了对numpy的版本要求)。笔者最后(在docker中)配置成功的版本为tensorflow2.6.5 numpy1..5 Python3.7. GCC7.5.0 CUDA.3 Bazel3.7.2。
2.2 开始配置
为了打包方便和编译环境隔离,在docker中进行了以下配置:
2. 安装TensorFlow pip软件包依赖项,其编译过程依赖于这些包。
3. Git Tensorflow源代码包。
4. 安装编译工具Bazel。
官网的介绍:(1)您需要安装Bazel,才能构建TensorFlow。您可以使用Bazelisk轻松安装Bazel,并且Bazelisk可以自动为TensorFlow下载合适的Bazel版本。为便于使用,请在PATH中将Bazelisk添加为bazel可执行文件。(2)如果没有Bazelisk,您可以手动安装Bazel。请务必安装受支持的Bazel版本,可以是tensorflow/configure.py中指定的介于_TF_MIN_BAZEL_VERSION和_TF_MAX_BAZEL_VERSION之间的任意版本。
但笔者尝试最快的安装方式是,到Github - bazelbuild/build/releases上下载对应的版本,然后使用sh脚本手动安装。比如依据刚才的配置目标,笔者需要的是Bazel3.7.2,所以下载的文件为bazel-3.7.2-installer-linux-x_.sh。
5. 配置编译build选项
官网介绍:通过运行TensorFlow源代码树根目录下的./configure配置系统build。此脚本会提示您指定TensorFlow依赖项的位置,并要求指定其他构建配置选项(例如,编译器标记)。
这一步就是选择y/N基本没啥问题,其他参考里都有贴实例。笔者需要GPU的支持,故在CUDA那一栏选择了y,其他部分如Rocm部分就是N(直接按enter也可以)。
6.开始编译
编译完成应输出
7.检查TF是否能用
3 - 踩坑记录
3.1 cuda.0在编译时不支持sm_
笔者最初选择的docker是cuda.0的,在bazel build --config=cuda //tensorflow/tools/pip_package:build_pip_package过程中出现了错误。所以之后选择了上面提到的cuda.3的docker。
3.2 问题2: numpy、TF、python版本匹配
在配置过程中,发现numpy、TF、python版本需要匹配,否则会出现错误。
4 - 启示
从源码编译Tensorflow2.6.5的过程,虽然经历了多次失败,但最终还是成功。这个过程也让我对Tensorflow的编译流程有了更深入的了解,同时也提醒我在后续的工作中要注意版本匹配问题。