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.mzph.cn/web/66677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P8738 [蓝桥杯 2020 国 C] 天干地支

两种方法 #include<bits/stdc.h> using namespace std;int main(){int year;cin>>year;string tg[10] {"geng", "xin", "ren", "gui","jia", "yi", "bing", "ding", "wu&…

Python 常用运维模块之OS模块篇

Python 常用运维模块之OS模块篇 OS 模块获取当前工作目录更改当前工作目录返回当前目录路径返回上一级目录路径递归生成目录路径删除目录创建目录删除目录列出特定目录下文件和子目录删除某个特定文件重命名某个文件获取某个文件/目录的信息输出目录路径分隔符输出文件行终止符…

uniapps使用HTML5的io模块拷贝文件目录

最近在集成sqlite到uniapp的过程中&#xff0c;因为要将sqlite数据库预加载&#xff0c;所以需要使用HTML5的plus.io模块。使用过程中遇到了许多问题&#xff0c;比如文件路径总是解析不到等。尤其是应用私有文档目录’_doc’。 根据官方文档&#xff1a; 为了安全管理应用的…

使用 F12 查看 Network 及数据格式

在浏览器中&#xff0c;F12 开发者工具的 “Network” 面板是用于查看网页在加载过程中发起的所有网络请求&#xff0c;包括 API 请求&#xff0c;以及查看这些请求的详细信息和响应数据的。以下以常见的 Chrome 浏览器为例&#xff0c;介绍如何使用 F12 控制台查看 Network 里…

Redis 2.6.12在Win10系统上的安装教程

诸神缄默不语-个人CSDN博文目录 这个版本的安装包是跟同事要的&#xff0c;em&#xff0c;如果真的需要这个版本的话可以跟我要&#xff1a; 解压后双击第一个bat文件&#xff0c;即可挂起Redis服务&#xff1a;

分布式数据库中间件(DDM)的使用场景

华为云分布式数据库中间件&#xff08;DDM&#xff09;是一款专注于解决数据库分布式扩展问题的中间件服务&#xff0c;突破了传统数据库的容量和性能瓶颈&#xff0c;能够实现海量数据的高并发访问。以下是九河云总结的DDM的典型使用场景&#xff1a; 1. 互联网应用 在电商、…

Ubuntu16.04 安装OpenCV4.5.4 避坑

Ubuntu16.04 安装C版OpenCV4.5.4 Ubuntu16.04 VSCode下cmakeclanglldb调试c 文章目录 Ubuntu16.04 安装C版OpenCV4.5.41. 下载Opencv压缩包2. 安装Opencv-4.5.43. 配置OpenCV的编译环境4.测试是否安装成功 1. 下载Opencv压缩包 下载Opencv压缩包&#xff0c;选择source版本。…

RabbitMQ集群安装rabbitmq_delayed_message_exchange

1、单节点安装rabbitmq安装延迟队列 安装延迟队列rabbitmq_delayed_message_exchange可以参考这个文章&#xff1a; rabbitmq安装延迟队列-CSDN博客 2、集群安装rabbitmq_delayed_message_exchange 在第二个节点 join_cluster 之后&#xff0c;start_app 就会报错了 (CaseC…

QT开发:事件循环与处理机制的概念和流程概括性总结

事件循环与处理机制的概念和流程 Qt 事件循环和事件处理机制是 Qt 框架的核心&#xff0c;负责管理和分发各种事件&#xff08;用户交互、定时器事件、网络事件等&#xff09;。以下是详细透彻的概念解释和流程讲解。 1. 事件循环&#xff08;Event Loop&#xff09;的概念 …

博客搭建 — GitHub Pages 部署

关于 GitHub Pages GitHub Pages 是一项静态站点托管服务&#xff0c;它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件&#xff0c;通过构建过程运行文件&#xff0c;然后发布网站。 本文最终效果是搭建出一个域名为 https://<user>.github.io 的网站 创建…

网络通信---MCU移植LWIP

使用的MCU型号为STM32F429IGT6&#xff0c;PHY为LAN7820A 目标是通过MCU的ETH给LWIP提供输入输出从而实现基本的Ping应答 OK废话不多说我们直接开始 下载源码 LWIP包源码&#xff1a;lwip源码 -在这里下载 ST官方支持的ETH包&#xff1a;ST-ETH支持包 这里下载 创建工程 …

【MySQL】存储引擎有哪些?区别是什么?

频率难度60%⭐⭐⭐⭐ 这个问题其实难度并不是很大&#xff0c;只是涉及到的相关知识比较繁杂&#xff0c;比如事务、锁机制等等&#xff0c;都和存储引擎有关系。有时还会根据场景选择不同的存储引擎。 下面笔者将会根据几个部分尽可能地讲清楚 MySQL 中的存储引擎&#xff0…

【系统环境丢失恢复】如何恢复和重建 Ubuntu 中的 .bashrc 文件

r如果你遇到这种情况&#xff0c;说明系统环境的.bashrc 文件丢失恢复&#xff1a; 要恢复 ~/.bashrc 文件&#xff0c;可以按照以下几种方式操作&#xff1a; 恢复默认的 ~/.bashrc 文件 如果 ~/.bashrc 文件被删除或修改&#xff0c;你可以恢复到默认的版本。可以参考以下…

人工智能丨智能化测试解决方案全面解析

智能化测试解决方案通过整合前沿的人工智能技术与自动化测试技术&#xff0c;为软件产品的测试工作带来了前所未有的高效与智能。 智能化测试解决方案主要内容 大语言模型私有部署&#xff1a;确保文档理解、代码分析和测试生成过程中的安全与隐私&#xff0c;让你无后顾之忧…

Element修改表格结构样式集合(后续实时更新)

场景 修改前端Element组件el-table样式 实现 线表格 <div class"tablepro"><el-table:data"tableData":header-cell-style"{ textAlign:center}"class"tablepro-table"borderstyle"width: 100%;height:100%"&g…

C++语言的语法糖

C语言的语法糖 在现代编程语言的设计中&#xff0c;语法糖&#xff08;Syntactic Sugar&#xff09;是一个非常重要的概念。它指的是一种编程语言所提供的语法特性&#xff0c;使得代码更加简洁易读&#xff0c;编写更加方便&#xff0c;而不是增加语言的功能。C作为一种强大的…

基于Redis实现短信验证码登录

目录 1 基于Session实现短信验证码登录 2 配置登录拦截器 3 配置完拦截器还需将自定义拦截器添加到SpringMVC的拦截器列表中 才能生效 4 Session集群共享问题 5 基于Redis实现短信验证码登录 6 Hash 结构与 String 结构类型的比较 7 Redis替代Session需要考虑的问题 8 …

c++入门----模板深入探究与仿函数

1.模板参数加入一个变量 一般只能是int&#xff0c;double要看c的版本&#xff0c;在最新的版本下是支持double模板参数的。 2.适配器的使用 template <class T,class containerdeque<T>> class stack { public:void push_back(const T& x) {_con.push_back…

【Vim Masterclass 笔记22】S09L40 + L41:同步练习11:Vim 的配置与 vimrc 文件的相关操作(含点评课内容)

文章目录 S09L40 Exercise 11 - Vim Settings and the Vimrc File1 训练目标2 操作指令2.1. 打开 vimrc-sample 文件2.2. 尝试各种选项与设置2.3. 将更改内容保存到 vimrc-sample 文件2.4. 将文件 vimrc-sample 的内容复制到寄存器2.5. 创建专属 vimrc 文件2.6. 对于 Mac、Linu…

kafka学习笔记5 PLAIN认证——筑梦之路

在Kafka中&#xff0c;SASL&#xff08;Simple Authentication and Security Layer&#xff09;机制包括三种常见的身份验证方式&#xff1a; SASL/PLAIN认证&#xff1a;含义是简单身份验证和授权层应用程序接口&#xff0c;PLAIN认证是其中一种最简单的用户名、密码认证方式&…