tensorflow離線原始碼安裝
從原始碼離線編譯安裝tensorflow,記錄踩過的坑:
1.tensorflow的外部依賴
tensorflow的外部依賴很多,所依賴的外部庫均在WORKSPACE檔案和//tensorflow/workspace.bzl檔案中給出了url地址
使用如下命令可以拉取全部的external外部依賴
bazel fetch //...
為能夠離線安裝tensorflow,需要建立內部區域網的http服務。(建立http服務可以使用wampserver,可參考http://blog.csdn.net/huang_yx005/article/details/50914735)
在外部聯網機器中使用指令碼下載全部的外部依賴,並拷貝到內部區域網的http服務的根目錄下。
將WORKSPACE檔案和//tensorflow/workspace.bzl檔案中的外部依賴的url地址的字首全部換成內部區域網的http服務的地址。
至此,編譯安裝需要外部依賴時會從內部http下載相應的庫
2.換行符問題
從github上clone下來的檔案的可能採用dos換行符,也可能採用unix換行符
如果某個可執行檔案採用了dos換行符,此時在liunx下執行就會出錯
解決方法:
使用vim開啟,輸入vim命令 :set ff=unix
上述命令將檔案中所有的dos換行符'\r\n'轉換成unix換行符‘\n’
3.執行如下的命令時產生錯誤
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
error in tensorflow setup: 'install_requires' must be a string or list of string containing valid project/version requirement specifiers;
Expected ',' or end-of-list in backposts.weakref >= 1.0rc1;
解決辦法:
python版本高於3.4,python安裝backposts.weakref.10rc1
4.原始碼編譯的大致流程:
export TEST_TMPDIR=...
export LD_LIBRARY_PATH=... 需包含cuda, cudnn相關的路徑
./configure 對tensorflow進行配置
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package 編譯目標程式,開啟GPU
If you would like to prevent new dependencies from being added during builds, you can specify the --fetch=false
flag
上述bazel命令建立了一個名為build_pip_package的指令碼。
執行如下的命令將會在 /tmp/tensorflow_pkg路徑下生成一個.whl檔案:
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
使用如下命令安裝生成的pip包。
pip install /tmp/tensorflow_pkg/tensorflow-1.1.0-py2-none-any.whl
驗證。開啟任意一個新的終端,注意不要在tensorflow的安裝路徑下,執行python
>>> import tensorflowas tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
輸出Hello, TensorFlow!
如何閱讀tensorflow原始碼