前言
TensorFlow如果能二進制包安裝,我真的不想選擇自己編譯,但是情況不由人,好不容易找到一台服務器,CPU不支持AVX指令集,安裝的release版本運行到import tensorflow as tf 就會報指令異常。網上建議源碼安裝才能解決,於是無奈,想着應該是非常繁瑣的事情,但事實上除了耗時外,其他都還好,這里記錄一下,以備后用。
編譯安裝過程
安裝版本構建工具 bazel
bazel是google的版本構建工具,網上褒貶不一,直接下載安裝包進行安裝:
wget https://github.com/bazelbuild/bazel/releases/download/0.13.0/bazel-0.13.0-installer-linux-x86_64.sh
chmod +x ./bazel-0.13.0-installer-linux-x86_64.sh
./bazel-0.13.0-installer-linux-x86_64.sh
這個步驟沒有碰到問題。
安裝工具包
sudo apt install python-numpy swig python-dev python-wheel
numpy是python的科學計算庫,swig是C庫外部語言封裝調用接口庫,后面幾個應該與python包管理相關,不細究。
下載TensorFlow源碼
使用git來克隆TensorFlow代碼倉庫:
git clone --recurse-submodules https://github.com/tensorflow/tensorflow
比較耗時的操作,文件比較多。
配置TensorFlow
進入tensorflow目錄,然后執行./configure,開始配置,除了jemalloc選項外,我都選了N
編譯TensorFlow
執行以下命令,啟動編譯,過程非常慢,要耐心等待:
bazel build -c opt //tensorflow/tools/pip_package:build_pip_package
創建PIP安裝包
完成編譯后,將tensowflow制作成pip安裝包:
bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/
安裝TensorFlow包
最后,通過pip命令來安裝前一步生成的安裝包,如果沒有先安裝python-pip:
pip install ~/tensorflow-1.8.0-cp27-cp27mu-linux_x86_64.whl
增加編譯選型以支持額外CPU指令
自己編譯的版本可以正常使用,但運行時出現了如下的命令行提示:
原來這款CPU雖然不支持AVX,但是支持SSE,於是決定重新編譯,在編譯時增加了額外的編譯選項,如下:
build -c opt --copt=-msse4.1 --copt=-msse4.2 //tensorflow/tools/pip_package:build_pip_package
重新打包,安裝。
暫時結束
至此,整個源碼安裝TensorFlow過程全部結束,暫無發現問題,待后續有問題時再補充。