編譯tensorflow的小小記錄

2021-09-23 05:58:11 字數 3159 閱讀 5097

編譯tensorflow有專門的編譯工具bazel,所以需要先安裝bazel。我使用的是原始碼編譯bazel(

檢視本地版本:git branch,檢視遠端分支:git branch -a,切換分支:git checkout -b 「本地自己命名」 「遠端分支名」,如果不切分支,tensorflow和bazel版本不對應,無法編譯。

第四個坑:./configure時需要確認各種條件,這些條件我也沒有全弄明白需要哪些,從網上查到的情況看,初級只需要cuda相關的選y,其他的都選n就可以,目錄也只需要確認python、cuda、cudnn這些就可以了。

編譯命令:

bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer(例子,同時生成frame的so)

bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so(這個是c++的so)

bazel build --config=opt --config=cuda //tensorflow:libtensorflow_framework.so

更新:1.編譯自己的庫,將專案目錄拷貝到tensorflow/examples下,使用命令:

bazel build -c opt --config=cuda //tensorflow/examples/***/...進行編譯,注意啦:自己的專案***目錄後面要加...三個點,否則不知道為啥編譯不過,可能是寫的比較挫吧(>人<;)

bazel build -c opt --config=cuda //tensorflow/examples/***/... --linkopt=//home/ubuntu/myprojects/tensorflow/bazel-bin/tensorflow/libtensorflow_framework.so 新版本貌似需要指定連線

專案中的build一定要寫好,需要編譯的原始檔要寫全,否則編譯完成了不報錯,執行就苦惱了。

2020.02.26更新:

3.tensorflow與bazel對應版本在tensorflow目錄下有乙個.bazelversion檔案,裡面寫的就是需要的版本號,切換tensorflow版本分支後,.bazelversion內會有變化。

4.編譯tensorflow2.0及之後版本的時候命令略有不同需要新增--config=v2,例如

bazel build --config=opt --config=cuda --config=v2 //tensorflow:libtensorflow_framework.so

2020.04.03更新:

5.--cxxopt='-g' 可以用於編譯debug版本,方便gdb查詢,例如:bazel build -c opt --cxxopt='-g' --config=cuda //tensorflow/examples/***/... --linkopt=//home/ubuntu/myprojects/tensorflow/bazel-bin/tensorflow/libtensorflow_framework.so

6.可以使用--retain-symbols-file和--version-script來限定對外開放的介面,防止介面名衝突導致的一系列問題。例如:

bazel build -c opt --config=cuda //tensorflow/examples/***/... --linkopt=//home/ubuntu/myprojects/tensorflow/bazel-bin/tensorflow/libtensorflow_framework.so --linkopt=-wl,--retain-symbols-file=/home/ubuntu/projects/tf/tensorflow/tensorflow/examples/model_classify/retain_symbols.sys --linkopt=-wl,--version-script=/home/ubuntu/projects/tf/tensorflow/tensorflow/examples/model_classify/version_script.map

2020.05.15更新:

bazel build -c opt --config=cuda --distdir /home/test/projects/downloads //tensorflow/cc:tutorials_example_trainer

2020.05.21更新:

8.如果你的環境是arm64即aarch64的,那麼可能會遇到其他奇特的問題,比如總有一些函式沒有編譯進庫里,總是提示未定義函式等,稍微總結一點點,希望幫到大家。

首先,可能交叉編譯環境不支援,所以要手動新增一下cpu型別,在tensorflow/third_party/gpus/crosstool目錄下找到crosstool_hipcc.tpl,vi開啟,找到

default_toolchain
在後面新增乙個aarch64的:

default_toolchain
儲存退出。

第二 ,還是這個目錄,vi開啟build.tpl,找到標籤cc_toolchain_suite下面的toolchains =中的"arm": ":cc-compiler-local",,在這個下面新增一行"aarch64": ":cc-compiler-local",,然後儲存退出,如下:

cc_toolchain_suite(

name = "toolchain",

toolchains = ,

)

第三,有可能你會用到aws相關的,那麼在tensorflow/third_party/aws目錄下找到build.bazel檔案,vi開啟,找到標籤cc_library-->srcs = select-->"//conditions:default": ,修改為如下:

cc_library(

name = "aws",

srcs = select() + glob([

2021.04.01更新:

error: an error occurred during the fetch of repository 'io_bazel_rules_docker'

方法來自:

目前遇到的坑就這些,已經編譯出so了,能用,有新問題或新發現會在更新中順序向下,待以後補充。

tensorflow編譯擴充套件包

我們常常需要在不同的環境下編譯tensorflow的擴充套件包,不同的環境下編譯選項也不一樣,改來改去非常麻煩,這裡提供乙個通用的編譯方式 g std c 11 tf interpolate.cpp o tf interpolate so.so shared fpic i python c impo...

乙個Weex的小小小小小小頁面示例

使用weex實現的乙個頁面效果 下面列出主要的 index.vue justify content center align items center logo greeting message commontitle.vue元件 pointsmallhome.vue 頁面暫時模擬假資料 banne...

編譯安裝tensorflow1 12 2

環境 1 os 16.04.1 ubuntu 2 cpu有點年頭了 cat proc cpuinfo grep model name model name amd athlon tm ii x2 250 processor model name amd athlon tm ii x2 250 pro...