centos6源碼安裝tensorflow

基于google搜索積累的數(shù)據(jù),google這家公司在人工智能,數(shù)據(jù)分析特別是機(jī)器學(xué)習(xí)方面擁有著大量的經(jīng)驗(yàn)和算法。因此,在2015年底,google開源了自家的機(jī)器學(xué)習(xí)框架tensorflow時(shí),也是引起了非常大的關(guān)注。到現(xiàn)在,這個(gè)項(xiàng)目在github上獲得的star數(shù)已經(jīng)超過(guò)其他的一些老牌的機(jī)器學(xué)習(xí)庫(kù),而且有許多人愿意為tensorflow貢獻(xiàn)代碼,它的未來(lái)是非常可觀的。

要使用tensorflow當(dāng)然首先要能夠正確安裝,tensorflow的安裝現(xiàn)在已經(jīng)非常簡(jiǎn)單了,分cpu版本和gpu版本,為了簡(jiǎn)單起見,這里只討論cpu版本(電腦沒(méi)帶獨(dú)顯也是原因之一)。google提供了很多種安裝方式,主要分三種,一種是pip安裝,非常簡(jiǎn)單,重要的是它在各個(gè)平臺(tái)都是可以用的,包括windows,第二種是通過(guò)docker安裝,也差不多是一鍵安裝,具體的介紹可以看這里,最后一種,就是從源代碼編譯安裝,最麻煩,但是我們這里唯一可用的方法。因?yàn)榫退阍赾entos6下通過(guò)pip安裝好了tensorflow,在運(yùn)行的時(shí)候仍然會(huì)報(bào)glibc版本過(guò)低的錯(cuò)誤,而docker更是不可能,因?yàn)閮?nèi)核版本低于3.10不能安裝docker,所以我們愉快地選擇了源碼安裝。

順便一提,之所以選擇這么折騰的方式,完全是因?yàn)楣镜姆?wù)器是centos6.8的系統(tǒng),然后我還沒(méi)有sudo權(quán)限。

快速安裝

我們可以直接通過(guò)pip安裝。

pip install tensorflow

windows要求:64位python>=3.5
linux要求:glibc>=2.16
mac沒(méi)有測(cè)試,可以參考官方安裝指南

由于centos6上glibc最多到2.12,而強(qiáng)行使用高版本的glibc會(huì)導(dǎo)致程序意外崩潰,因此,我們采用本機(jī)源碼編譯安裝。

源碼安裝

我這里用戶名為wecooool,home位置為/home/wecooool/
在正式編譯之前有如下若干個(gè)準(zhǔn)備步驟

編譯高版本gcc,因?yàn)樾枰玫?em>c++11,所以要求gcc版本大于4.8,我們這里選擇gcc4.9.4 。使用比4.9.4稍低版本的gcc是可以成功編譯4.9.4的gcc,系統(tǒng)自帶的4.4.7版本的gcc是滿足要求的。我這里將它安裝到/home/wecooool/software文件夾,然后使用如下命令修改系統(tǒng)環(huán)境變量,使得后續(xù)的編譯會(huì)使用新的gcc,而非系統(tǒng)里面老版本的gcc

export PATH=/home/wecooool/software/bin:$PATH
export CC=/home/wecooool/software/bin/gcc
export CXX=/home/wecooool/software/bin/g++
export C_INCLUDE_PATH=/home/wecooool/software/include
export CXX_INCLUDE_PATH=$C_INCLUDE_PATH
export LD_LIBRARY_PATH=/home/wecooool/software/lib

編譯高版本python,tensorflow要求python版本至少是2.7或者3.3,而我們這里為了讓代碼能在windows上也能運(yùn)行,選擇python3.5.2,同樣通過(guò)編譯安裝。具體的configure命令如下

./configure --prefix=/home/wecooool/software/Python-3.5.2 --enable-shared

加上enable-shared是為了編譯出動(dòng)態(tài)鏈接庫(kù),方便其他程序調(diào)用。然后就是配置環(huán)境參數(shù)

export PATH=/home/wecooool/software/Python-3.5.2/bin:$PATH
export LD_LIBRARY_PATH=/home/wecooool/software/Python-3.5.2/lib:$LD_LIBRARY_PATH

完成后在bash中輸入python3應(yīng)該就能進(jìn)入python3.5.2shell.之后下載get-pip.py,然后python3 get-pip.py就完成了pip的安裝,在bash中輸入pip或者pip3應(yīng)該都會(huì)調(diào)用新安裝的pip.通過(guò)pip3 install numpy安裝numpy.

安裝bazel,google使用bazel構(gòu)建tensorflow,因此我們需要編譯之。首先安裝64位jdk1.8,因?yàn)閎azel需要java8來(lái)編譯,從oracle網(wǎng)站上選擇jdk-8u111-linux-x64.tar.gz官網(wǎng)上jdk具體的名字和鏈接地址可能會(huì)略有變化)下載,然后解壓,將文件夾移到合適的地方,這里我們選擇放到/home/wecooool/software/,再來(lái)就是修改環(huán)境變量

export JAVA_HOME=/home/wecooool/software/jdk1.8.0_111
export PATH=$JAVA_HOME/bin:$PATH

bash中輸入java -version應(yīng)該有信息顯示為64位的java1.8
java安裝完成之后可以開始編譯bazel

git clone https://github.com/bazelbuild/bazel.git
cd bazel
git checkout -b dev 0.4.0
./compile.sh

編譯的結(jié)果為output/bazel,使用命令cp output/bazel /home/wecooool/software/bin/,因?yàn)檫@個(gè)路徑已經(jīng)加入path,可以直接調(diào)用,這時(shí)在bash中輸入bazel應(yīng)該能調(diào)用剛剛生成的bazel.

文件系統(tǒng)不應(yīng)為NFS,否則后續(xù)的編譯會(huì)出現(xiàn)奇怪的錯(cuò)誤**

準(zhǔn)備工作到此結(jié)束,接下來(lái)要開始正式編譯tensorflow


首先下載源代碼,

git clone https://github.com/tensorflow/tensorflow
cd tensorflow

此時(shí)還需要修改一個(gè)地方才能開始編譯,vim tensorflow/tools/git/gen_git_source.py,將文件開頭的#!/usr/bin/env python改成#!/usr/bin/env python3,因?yàn)?em>python3才是我們新生成的python.
開始configure,輸入./configure,會(huì)出現(xiàn)很多的選項(xiàng)供我們選擇,這里主要是修改python位置,輸入/home/wecooool/software/Python-3.5.2/bin/python3,其他的選項(xiàng)就直接回車就行了。

之后就簡(jiǎn)單了,編譯

bazel build -c opt //tensorflow/tools/pip_package:build_pip_package

安裝

mkdir _python_build
cd _python_build
ln -s ../bazel-bin/tensorflow/tools/pip_package/build_pip_package.runfiles/org_tensorflow/* .
ln -s ../tensorflow/tools/pip_package/* .
python3 setup.py develop

到這里安裝應(yīng)該已經(jīng)完成了,測(cè)試一下

$ python3
...
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42
>>>

安裝完成之后,記得把所有的環(huán)境變量的修改(export開頭的語(yǔ)句)放進(jìn)~/.bashrc,免得每次登錄都重新設(shè)置一遍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容