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.pswp.cn/web/66677.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66677.shtml
英文地址,請注明出處:http://en.pswp.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認證是其中一種最簡單的用戶名、密碼認證方式&…