当前位置: 首页 > news >正文

tensorflow源码编译在C++环境使用

https://tensorflow.google.cn/install/source?hl=zh-cn查看tensorflow和其他需要下载软件对应的版本,最好一模一样
1、下载TensorFlow源码
https://github.com/tensorflow/tensorflow
2、安装编译protobuf(3.9.2)
protobuf版本要和TensorFlow版本对应;
protobuf版本查看方法:
打开TensorFlow源码下tensorflow-master/tensorflow/workspace2.bzl文件
搜索可以找到地址"https://github.com/protocolbuffers/protobuf/archive/v3.9.2.zip"
安装编译:

cd protobuf-XXX/
./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig # refresh shared library cache.

查看protobuf版本
protoc --version
3、安装编译bazel(3.1.0)
bazel版本要和TensorFlow版本对应;
bazel版本查看方法:
打开TensorFlow源码下tensorflow-master/configure.py
搜索可以找到:
_TF_MIN_BAZEL_VERSION = ‘4.2.2’
_TF_MAX_BAZEL_VERSION = ‘4.99.0’
这里可以选择安装4.2.2版本
安装编译: 下载:链接 Releases · bazelbuild/bazel · GitHub
安装依赖:
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python
编译:

chmod +x bazel-<version>-installer-linux-x86_64.sh
./bazel-<version>-installer-linux-x86_64.sh --user

4.2.2版本对应写法:

chmod +x bazel-4.2.2-installer-linux-x86_64.sh
./bazel-4.2.2-installer-linux-x86_64.sh --user

export PATH="$PATH:$HOME/bin" 添加进去,添加到bashrc不管用那么就直接在tensorflow编译的文件夹中执行这句话生成零时变量。

4、编译TensorFlow
进入tensorflow文件夹中,首先进行项目配置:./configure
这里系统应该已经安装了gcc g++ 7.5 除了使用cuda y, 其余都选no和默认
bazel build --config=opt --config=cuda // tensorflow:libtensorflow_cc.so
编译完成后,在bazel-bin/tensorflow中会生成两个我们需要的库文件:libtensorflow_cc.so 和 libtensorflow_framework.so

问题1. error

在这里插入图片描述

解决:安装cudnn 我的cuda是11.0选择cudnn是8.0.4(将deb也进行安装)
cudnn安装可能需要如下问题,说so不是符号连接之类的依次执行下面

sudo ln -sf /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.0.4 /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
sudo ln -sf /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.0.4 /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
sudo ln -sf /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.0.4 /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
sudo ln -sf /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.0.4 /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
sudo ln -sf /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.0.4 /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
sudo ln -sf /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.0.4 /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8

建立成功后最好执行sudo ldconfig (原因没查)

问题2.

在这里插入图片描述

解决:我的系统是ubuntu18.04 所以执行以下指令成功部署
在这里插入图片描述

也就是指定cpu的核数,因为不指定会内存爆掉,就失败了

问题3. 需要将so文件全部拷贝到usr/local/lib文件(cp xx 目标文件夹)(否则程序会报错:cannot open shared object),并赋予权限sudo chmod +x libtensorflow_cc.so.2(我将这些so文件的软连接和bazel-bin/tensorflow中进行了对应,但是不确定有没有意义,也许不需要这样做 最后发现必须要软连接并且要将framework.so连接到framework.so.2)
问题4. absl文件夹需要在githbub下载(https://github.com/abseil/abseil-cpp/tree/master/absl),为了保险我直接将服务器的absl拷贝到tensorflow-2.4.0目录中解决该问题
问题5. 在编译失败从新编译最好使用bazel -clean后在执行编译指令

缺失文件可能需要使用bazel clean --expunge,而不是bazel -clean

成功结果

在这里插入图片描述

总结

这是本人tensorflow源码编译遇到的各种问题,其中对应版本是一个很麻烦的过程,因为官网给的tf对应的protobuf等库版本可能不适用,大家最好百度教程,然后在别人成功的基础上尝试,第二点是介于本人当时水平有限很多问题的解决方法不是很合理,仅供参考

http://www.lryc.cn/news/524506.html

相关文章:

  • 第四届机器学习、云计算与智能挖掘国际会议
  • #漏洞挖掘# 一文了解什么是Jenkins未授权访问!!!
  • QT QListWidget控件 全面详解
  • 【Vim Masterclass 笔记25】S10L45:Vim 多窗口的常用操作方法及相关注意事项
  • 包文件分析器 Webpack Bundle Analyzer
  • 代码随想录day14
  • react19新API之use()用法总结
  • 67,【7】buuctf web [HarekazeCTF2019]Avatar Uploader 2(未完成版)
  • ANSYS HFSS 中的相控天线阵列仿真方法
  • stm32 L051 adc配置及代码实例解析
  • KUKA示教器仿真软件OfficeLite8.6.2,EthernetKRL3.1.3通信
  • Erlang语言的并发编程
  • 【数据挖掘实战】 房价预测
  • 我的创作纪念日,纪念我的第512天
  • 【科研建模】Pycaret自动机器学习框架使用流程及多分类项目实战案例详解
  • PHP语言的网络编程
  • 计算机的错误计算(二百一十八)
  • 《鸿蒙Next原生应用的独特用户体验之旅》
  • MDX语言的字符串处理
  • 游戏AI,让AI 玩游戏有什么作用?
  • Java 设计模式 二 单例模式 (Singleton Pattern)
  • Java 中 final 关键字的奥秘
  • C# 通用缓存类开发:开启高效编程之门
  • 电脑办公技巧之如何在 Word 文档中添加文字或图片水印
  • 记录一下OpenCV Contrib 编译踩的坑
  • 01.04、回文排序
  • [创业之路-259]:《向流程设计要效率》-1-让成功成熟业务交给流程进行复制, 把创新产品新业务新客户交给精英和牛人进行探索与创造
  • 如何使用usememo和usecallback进行性能优化,什么时候使用usecallback,什么时候使用usememo
  • 22. C语言 输入与输出详解
  • WPF实战案例 | C# WPF实现计算器源码