編譯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...