1. 程式人生 > >tensorflow離線原始碼安裝

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原始碼