1. 程式人生 > >centos7 源碼編譯安裝TensorFlow CPU 版本

centos7 源碼編譯安裝TensorFlow CPU 版本

grpc 遇到 cloud pla bin index.php 都在 頭文件 evel

一、前言

我們都知道,普通使用pip安裝的TensorFlow是萬金油版本,當你運行的時候,會提示你不是當前電腦中最優的版本,特別是CPU版本,沒有使用指令集優化會讓TensorFlow用起來更慢。

但是在編譯之中,發現很多坑,由此記錄一下。

環境相關:

系統:centos7

python版本:2.7.5

二、準備

1. 安裝相關依賴

# 一般會缺失的依賴
yum -y install java-1.8.0-openjdk-devel automake autoconf libtool libicu gcc-c++

2. pip安裝相關庫

# python 相關,連接境外源較慢,建議更換成國內源,比如 douban 等
pip 
install --upgrade pip pip install numpy grpcio Keras-Applications Keras-Preprocessing h5py requests enum

3. 查看可優化的信息

直接使用pip安裝TensorFlow並運行隨便一個TensorFlow相關程序,如果出現以下內容則需要優化相關指令集:

技術分享圖片

將這些信息記錄下來,後面會用到。

4. 安裝Bazel

Bazel是編譯TensorFlow的工具,首先下載repo文件:

進入網頁 https://copr.fedorainfracloud.org/coprs/vbatts/bazel/ 選擇自己系統的版本並下載,我的系統是centos7,直接執行命令:

wget https://copr.fedorainfracloud.org/coprs/vbatts/bazel/repo/epel-7/vbatts-bazel-epel-7.repo

復制到yum.repos.d目錄並安裝:

cp vbatts-bazel-epel-7.repo /etc/yum.repos.d/
yum install bazel

5. 下載TensorFlow源碼

輸入命令:

git clone --recurse-submodules https://github.com/tensorflow/tensorflow

如果沒安裝git,直接安裝一下就行了:

yum -y install git

準備工作到此結束。

三、編譯

1. 配置編譯

進入源碼目錄並配置:

cd tensorflow/
./configure

剛開始會出現讓你選擇python的一些路徑的,輸入正確的安裝目錄就行了。

然後會出現一堆“Do you wish to build TensorFlow with…”的提示,安裝自己的情況去選擇,不確定的直接回車就行了,不過因為編譯的是CPU版本,所以GPU那裏需要選n,其他根據實際情況去選擇。

最後是一堆配置選擇,也是直接回車,默認就可以了。

2. 開始編譯

根據pip安裝的TensorFlow,運行時提示的優化信息,作為優化參數,根據自己的情況輸入命令:

bazel build -c opt --copt=-msse4.1 --copt=-msse4.2 //tensorflow/tools/pip_package:build_pip_package

註意這裏的優化參數一定要填正確,要不然CPU不支持,但編譯了,到時候用的時候有可能會報錯。註意這是一個很慢很慢的過程,請耐心等待。編譯界面如下。

技術分享圖片

不過編譯期間當然會出現各種錯誤,譬如我就遇到找不到python相關的頭文件的,最後發現都在/usr/include/python2.7/ 目錄裏,而代碼中指向的是/usr/include/,所以只得把python2.7目錄裏的頭文件復制一份到母目錄。此外還有很多錯誤,這個只能根據自己的系統和環境,一個個去解決了,此處省略一萬字。

ps:如果編譯一般發現之前的參數錯了,先clean一下編譯輸出文件再編譯:

bazel clean

不然會出現很奇怪的問題。

如果順利,編譯會經歷一個極其漫長的過程,可以先泡杯茶喝喝。

3. 創建whl文件

編譯完成後在tensorflow下會創建很多符號連接,譬如bazel-bin,運行以下命令創建whl文件:

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

輸出如下圖所示:

技術分享圖片

至此,編譯並生成whl過程才算完成,最後得到文件tensorflow-1.12.0rc0-cp27-cp27mu-linux_x86_64.whl,根據不同的平臺名字會不大一樣。

四、安裝

1. 卸載直接用pip直接安裝的版本

pip uninstall tensorflow

2. 使用pip安裝之前生成的whl文件

pip install /tmp/tensorflow_pkg/tensorflow-1.12.0rc0-cp27-cp27mu-linux_x86_64.whl

如無意外,就安裝完成了,輸出如下圖所示:

技術分享圖片

3. 測試

運行TensorFlow相關代碼,如果沒有優化提示,證明一切正常。

>>> 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
>>> exit()

五、參考

1. CentOS源碼編譯安裝Tensor Flow

2. Tensorflow Serving CentOS 7源碼編譯(CPU 版)

(完)

centos7 源碼編譯安裝TensorFlow CPU 版本