(五)、深度學習框架源碼編譯

1、源碼構建與預構建:

源碼構建:
源碼構建是通過獲取軟件的源代碼,然后在本地編譯生成可執行程序或庫文件的過程。這種方法允許根據特定需求進行配置和優化,但可能需要較長的時間和較大的資源來編譯源代碼。
預構建:
預構建是通過從開發者或官方網站下載預先編譯好的可執行程序或庫文件,然后在本地使用它們的過程。這種方法省去了編譯的時間和工作,通常更方便。然而,預構建版本可能沒有完全針對特定需求進行優化。
源碼構建的優缺點:
優點:
1.可以根據特定需求進行配置、優化和修改。

2.可以確保編譯的二進制與系統和需求完全匹配。

3.可以進行調試和錯誤跟蹤,有助于自定義和定制。

缺點:
1.需要較長的編譯時間和系統資源。
2.對于不熟悉編譯過程的用戶來說可能較為復雜。
3.編譯過程可能會受到依賴項的影響,需要處理依賴項問題。

2、Tensorflow源代碼編譯安裝

TensorFlowi源碼構建基本流程:
1、安裝依賴:安裝構建TensorFlow所需的各種依賴項,包括Python、Bazel構建工具、CUDA、cuDNN、TensorRT等。這些依賴項可能因系統和配置而有所不同。
2、配置編譯:在TensorFlowi源碼目錄中,運行配置腳本以配置編譯選項。
3、構建:用Bazelt構建TensorFlow。
4、生成Wheel包:如果希望將TensorFlow打包成Pythonf的Wheelt格式,以便于分發和安裝。
5、運行測試(可選):可以運行TensorFlow的單元測試和集成測試,以確保構建的版本沒有問題。

TensorFlow-安裝依賴、編譯環境:

確保環境中,已經安裝python、pip等工具
????????pip install -U --user pip numpy wheel
????????pip install -U--user keras_preprocessing --no-deps

numpy是一個開源的數值計算庫,提供了豐富的多維數組和矩陣操作功能,以及數學、邏輯、傅里葉變換等數值計算工具。
wheel是Python的一個二進制包格式,旨在加速包的安裝。是一種預構建的軟件包格式,可以包含Python模塊的代碼、依賴項和元數據,以便于分發和安裝。
keras_preprocessing是TensorFlow的一個重要子模塊,提供了許多用于數據預處理和增強的工具,特別適用于在深度學習任務中準備數據集。


TensorFlow-編譯工具bazel
Bazel是一個由Google開發的開源構建工具,旨在支持大型項目的高效構建、測試和部署。它特別適用于構建復雜的軟件系統,具有高度的可擴展性和性能優勢。Bazel支持多種編程語言,并在TensorFlow等許多大型項目中得到廣泛應用。
■構建速度和緩存:使用了增量構建和緩存機制,只編譯已更改的部分,從而顯著加快構建過程。Bazel還可以共享構建緩存,以避免重復編譯相同的依賴項。
■多語言支持:包括但不限于Java、C++、Python、Go、Rust等。這使得可以在一個項目中混合使用不同的語言,而無需為每種語言使用不同的構建工具。
■高度模塊化:將項目拆分為小的、可重用的模塊,以提高代碼的可維護性和可測試性。每個模塊都可以擁有自己的構建規側和依賴項。
■聲明式構建:使用BUILD文件來聲明構建規則和依賴關系。這種聲明式的構建方法使構建過程更加清晰和可管理。
■平臺無關性:可以在不同的操作系統上運行,包括Linux、macOS和Windows。

詳細使用方法可以參考:https:/blog.gmem.cc/bazel-study-note

?

3、pytorch 源代碼編譯安裝

1、環境準備:

安裝?Python:確保的系統中安裝了?Python,建議使用支持的版本(通常是?Python 3.7+)。

安裝依賴項:如?CMake、NumPy、Ninja?等。可以根據官方文檔安裝這些依賴項。

2、更新子模塊:源代碼中可能包含子模塊(submodules),往往需要使用以下命令更新子模塊才能正常編譯:

????????git submodule update --init --recursive

3、配置編譯選項:(可使用?cmake -DCMAKE_INSTALL_PREFIX=<install_dir>?來指定安裝目錄)。

????????????????mkdir build

????????????????cd build

????????????????cmake ..

4、使用make命令進行編譯,make install命令進行安裝。

5、運行測試:

在?test?目錄下,可以使用以下命令來運行測試:

????????python run_test.py

這將運行所有的測試套件,包括單元測試、集成測試等。如果需要指定特定的測試模塊或測試用例,可以使用命令行參數來過濾測試,

例如:

????????python run_test.py test_torch.py

將只運行與?test_torch.py?相關的測試。

在測試運行完成后,成功的測試將顯示為?"OK",而失敗的測試將顯示詳細的錯誤信息。

4、caffe源代碼編譯安裝

1、環境準備(這些基本都可以從conda里面安裝):

????????sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev?

????????libhdf5-serial-dev protobuf-compiler?

????????sudo apt-get install --no-install-recommends libboost-all-dev

????????sudo apt-get install python-dev

????????sudo apt-get install libatlas-base-dev

????????sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

????????sudo apt-get install python-opencv

2、修改caffe下文件Makefile.config

????????CPU?和?GPU?支持: 可以通過設置是否啟用?CPU?或?GPU?支持來決定構建?Caffe?時是否使用CPU?或?GPU?運算。這通常涉及?USE_CUDNN、USE_NCCL、CPU_ONLY?等選項。

????????CUDA?和?cuDNN?路徑: 如果啟用了?GPU?支持,需要指定?CUDA?和?cuDNN?的路徑。

????????BLAS?庫: 可以選擇使用不同的?BLAS?庫,如?OpenBLAS、MKL?或?ATLAS。?

????????Python?路徑: 需要指定與?Caffe?集成的?Python?版本和路徑。

3、修改caffe下文件Makefile

????????1.opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

????????后面加入?opencv_imgcodecs

????????2.?找到LIBRARIES +=glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5

????????更改最后兩項為:

????????LIBRARIES +=glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl?

????????hdf5_serial

4、編譯與測試

????????make all

????????Make test

????????make runtest

5、深度學習框架常用模型倉庫

TensorFlow: https://github.com/tensorflow/models

TensorFlow Model Garden?是?TensorFlow?團隊維護的一個開源項目,旨在為機器學習社區提供一系列預訓練模型、工具、示例和最佳實踐,以加速模型開發和研究。這個項目匯集了各種不同類型的模型,涵蓋了計算機視覺、自然語言處理、語音識別等多個領域,幫助開發者快速構建和訓練自己的模型。

預訓練模型:?Model Garden?包含了多個預訓練模型,包括?TensorFlow?官方發布的模型,以及社區貢獻的模型。這些模型可以用作遷移學習的起點,或者可以在特定任務上微調。

模型庫:?Model Garden?提供了一個模型庫,用于查看各種模型的代碼、配置文件和文檔。這些模型可以幫助開發者了解模型的結構和使用方法。

最佳實踐:?TensorFlow?團隊會分享一些模型開發和訓練的最佳實踐,幫助開發者避免常見的陷阱和問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42648.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42648.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42648.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dubbo與zookeeper

ZooKeeper 在 Dubbo 應用中的作用 ZooKeeper 是一個開源的分布式協調服務&#xff0c;它在 Dubbo 中被廣泛使用來實現服務注冊、發現和配置管理等功能。在 Dubbo 架構中&#xff0c;ZooKeeper 扮演了一個重要的角色&#xff0c;可以提供以下功能&#xff1a; ZooKeeper 是一個開…

2023年05月 C/C++(二級)真題解析#中國電子學會#全國青少年軟件編程等級考試

第1題:數字放大 給定一個整數序列以及放大倍數x,將序列中每個整數放大x倍后輸出。 時間限制:1000 內存限制:65536 輸入 包含三行: 第一行為N,表示整數序列的長度(N ≤ 100); 第二行為N個整數(不超過整型范圍),整數之間以一個空格分開; 第三行包含一個整數(不超過整…

【RocketMQ】SpringBoot集成RocketMQ

SpringBoot集成RocketMQ 首先依舊是引入依賴 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version> </dependency>然后就可以編寫發送不同類…

Vue2-全局事件總線、消息的訂閱與發布、TodoList的編輯功能、$nextTick、動畫與過渡

&#x1f954;&#xff1a;高度自律即自由 更多Vue知識請點擊——Vue.js VUE2-Day9 全局事件總線1、安裝全局事件總線2、使用事件總線&#xff08;1&#xff09;接收數據&#xff08;2&#xff09;提供數據&#xff08;3&#xff09;組件銷毀前最好解綁 3、TodoList中的孫傳父&…

【Git】Git中用到的一些命令

Git文件有四種狀態&#xff1a; 未跟蹤未修改&#xff08;已跟蹤&#xff09;已修改&#xff08;已跟蹤&#xff09;已暫存&#xff08;已跟蹤&#xff09; 通常我們將項目clone下來就會處于已跟蹤狀態 1、git diff命令 git diff&#xff1a;查看沒有暫存的文件更新哪些部分…

js判斷手指的上滑,下滑,左滑,右滑,事件監聽 和 判斷鼠標滾輪向上滾動滑輪向下滾動

js判斷手指的上滑&#xff0c;下滑&#xff0c;左滑&#xff0c;右滑&#xff0c;事件監聽 和 判斷鼠標滾輪向上滾動滑輪向下滾動 pc端 判斷鼠標滾輪向上滾動滑輪向下滾動 const scrollFunc (e) > { e e || window.event; let wheelDelta e.wheelDelta ? e.wheelDelta…

Spring Clould 部署 - Docker

視頻地址&#xff1a;微服務&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; 初識Docker-什么是Docker&#xff08;P42&#xff0c;P43&#xff09; 微服務雖然具備各種各樣的優勢&#xff0c;但服務的拆分通用給部署帶來了很大的麻煩。 分布式系統中&…

[強網杯 2019]隨便注

輸入1‘ 輸入1“ 和輸入1 一樣說明是由‘閉合 然后我們嘗試輸入select 這里提示過濾了select&#xff0c;說明聯合查詢&#xff0c;報錯注入&#xff0c;布爾,時間盲注就都不可以使用了。我們只剩下了 堆疊注入。 或者將select編碼繞開也可以。 按sql注入測試1 or 11 # ?然…

Unity 物體的運動之跟隨鼠標

你想讓鼠標點擊哪里&#xff0c;你的運動的對象就運動到哪里嗎&#xff1f; Please follow me ! 首先&#xff0c;你要先添加一個Plane ,以及你的圍墻&#xff0c;你的移動的物體 想要實現跟隨鼠標移動&#xff0c;我們先創建一個腳本 using System.Collections; using Syst…

銅卡計混合法比熱測試儀絕熱量熱計的高精度主動控制解決方案

摘要&#xff1a;在下落法比熱容測試中絕熱量熱計的漏熱是最主要誤差源&#xff0c;為實現絕熱量熱計的低漏熱要求&#xff0c;本文介紹了主動護熱式等溫絕熱技術以及相應的解決方案。方案的核心一是采用循環水冷卻金屬圓筒給量熱計和護熱裝置提供低溫環境或恒定冷源&#xff0…

黑馬點評-項目集成git及redis實現短信驗證碼登錄

目錄 IDEA集成git 傳統session存在的問題 redis方案 業務流程 選用的數據結構 整體訪問流程 發送短信驗證碼 獲取校驗驗證碼 配置登錄攔截器 攔截器注冊配置類 攔截器 用戶狀態刷新問題 刷新問題解決方案 IDEA集成git 遠程倉庫采用碼云&#xff0c;創建好倉庫&…

【O2O領域】Axure外賣訂餐騎手端APP原型圖,外賣配送原型設計圖

作品概況 頁面數量&#xff1a;共 110 頁 兼容軟件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 應用領域&#xff1a;外賣配送、生鮮配送 作品申明&#xff1a;頁面內容僅用于功能演示&#xff0c;無實際功能 作品特色 本品為外賣訂餐騎手端APP原型設計圖&#x…

CentOS下MySQL的徹底卸載的幾種方法

這里我為大家詳細講解下“CentOS下MySQL的徹底卸載的幾種方法”的完整攻略。 一、關閉MySQL服務 在開始操作之前&#xff0c;需要先關閉MySQL服務。可以使用以下命令來關閉MySQL服務&#xff1a; systemctl stop mysqld 或者 service mysqld stop 二、使用yum命令卸載MySQL…

微前端 - qiankun

qiankun 是一個基于 single-spa 的微前端實現庫&#xff0c;旨在幫助大家能更簡單、無痛的構建一個生產可用微前端架構系統。 本文主要記錄下如何接入 qiankun 微前端。主應用使用 vue2&#xff0c;子應用使用 vue3、react。 一、主應用 主應用不限技術棧&#xff0c;只需要提…

數據結構之線性表的類型運用Linear Lists: 數組,棧,隊列,鏈表

線性表 定義 一個最簡單&#xff0c;最基本的數據結構。一個線性表由多個相同類型的元素穿在一次&#xff0c;并且每一個元素都一個前驅&#xff08;前一個元素&#xff09;和后繼&#xff08;后一個元素&#xff09;。 線性表的類型 常見的類型&#xff1a;數組、棧、隊列…

mysql、redis面試題

mysql 相關 1、數據庫優化查詢方法 外鍵、索引、聯合查詢、選擇特定字段等等2、簡述mysql和redis區別 redis&#xff1a; 內存型非關系數據庫&#xff0c;數據保存在內存中&#xff0c;速度快mysql&#xff1a;關系型數據庫&#xff0c;數據保存在磁盤中&#xff0c;檢索的話&…

[Go版]算法通關村第十二關黃金——字符串沖刺題

目錄 題目&#xff1a;最長公共前綴解法1&#xff1a;縱向對比-循環內套循環寫法復雜度&#xff1a;時間復雜度 O ( n ? m ) O(n*m) O(n?m)、空間復雜度 O ( 1 ) O(1) O(1)Go代碼 解法2&#xff1a;橫向對比-兩兩對比&#xff08;類似合并K個數組、合并K個鏈表&#xff09;復…

okhttp下載文件 Java下載文件 javaokhttp下載文件 下載文件 java下載 okhttp下載 okhttp

okhttp下載文件 Java下載文件 javaokhttp下載文件 下載文件 java下載 okhttp下載 okhttp 1、引入Maven1.1、okhttp發起請求官網Demo 2、下載文件3、擴充&#xff0c;讀寫 txt文件內容3.1讀寫內容 示例 http客戶端 用的是 okhttp&#xff0c;也可以用 UrlConnetcion或者apache …

SD WebUI 擴展:prompt-all-in-one

sd-webui-prompt-all-in-one 是一個基于 Stable Diffusion WebUI 的擴展&#xff0c;旨在提高提示詞/反向提示詞輸入框的使用體驗。它擁有更直觀、強大的輸入界面功能&#xff0c;它提供了自動翻譯、歷史記錄和收藏等功能&#xff0c;它支持多種語言&#xff0c;滿足不同用戶的…

[MAUI]在.NET MAUI中實現可拖拽排序列表

文章目錄 創建可拖放控件創建綁定服務類拖拽&#xff08;Drag&#xff09;拖拽懸停&#xff0c;經過&#xff08;DragOver&#xff09;釋放&#xff08;Drop&#xff09; 創建頁面元素最終效果項目地址 .NET MAUI 中提供了拖放(drag-drop)手勢識別器&#xff0c;允許用戶通過拖…