安裝好編譯工具后,我們使用git將tf的代碼clone到服務(wù)器逝慧。
1. 編譯配置
然后進(jìn)入 tensorflow的目錄。
運(yùn)行configure文件:
./configure积糯,根據(jù)個(gè)人的需要進(jìn)行tf編譯的配置跌帐。這里要求系統(tǒng)需要 預(yù)裝python 和c++,這里做好是使用python3.x,2.7編譯會(huì)失敗
如果沒有請(qǐng)進(jìn)行安裝:
yum install gcc-c++ libstdc++-devel
2. 編譯
bazel build -c opt --verbose_failures? --jvmopt="-server -Xms1024m" //tensorflow/tools/pip_package:build_pip_package
會(huì)遇到很多的錯(cuò)誤,有很多依賴庫(kù)沒安裝會(huì)導(dǎo)致編譯錯(cuò)誤翎冲,需要進(jìn)行安裝
依賴的python庫(kù)有numpy垂睬,keras
依賴的工具有:patch
編譯完成了
INFO: Analysed target //tensorflow/tools/pip_package:build_pip_package (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //tensorflow/tools/pip_package:build_pip_package up-to-date:
? bazel-bin/tensorflow/tools/pip_package/build_pip_package
INFO: Elapsed time: 18.080s, Critical Path: 4.67s, Remote (0.00% of the time): [queue: 0.00%, setup: 0.00%, process: 0.00%]
INFO: 26 processes: 26 local.
INFO: Build completed successfully, 44 total actions
3. 構(gòu)建安裝包,可以指定想要存放安裝包的位置
bazel-bin/tensorflow/tools/pip_package/build_pip_package? pack_path
這里我們放到tf源碼的tmp目錄下
bazel-bin/tensorflow/tools/pip_package/build_pip_package? /data/tensorflow/tmp/
完成后可以看到wheel安裝包
使用pip安裝既可;
pip install tensorflow-1.12.0rc0-cp36-cp36m-linux_x86_64.whl
然后我們就可以測(cè)試:
import tensorflow as tf
hello = tf.constant("Hello, TensorFlow!")
sess = tf.Session()
print(sess.run(hello))
錯(cuò)誤集錦:
1.ERROR: /data/tensorflow/tensorflow/lite/toco/python/BUILD:15:1: C++ compilation of rule '//tensorflow/lite/toco/python:toco_python_api' failed (Exit 1): gcc failed: error executing command
? (cd /root/.cache/bazel/_bazel_root/48b0697df5815d95b49fd98c3083955b/execroot/org_tensorflow && \
? exec env -? ......
編譯輸出如下:
\/root/.cache/bazel/_bazel_root/48b0697df5815d95b49fd98c3083955b/external/protobuf_archive/BUILD:640:1: C++ compilation of rule '@protobuf_archive//:python/google/protobuf/pyext/_message.so' failed (Exit 1)
external/protobuf_archive/python/google/protobuf/pyext/descriptor.cc:33:20: fatal error: Python.h: No such file or directory
#include <Python.h>
#include "Python.h"
解決: 安裝python-devel
sudo yum -y install python-devel
但是以上似乎并不能解決問題:我們換成如下命令抗悍,打印詳細(xì)的編譯日志:
bazel build -c opt?--verbose_failures?//tensorflow/tools/pip_package:build_pip_package
ERROR: /data/tensorflow/tensorflow/lite/toco/python/BUILD:15:1: C++ compilation of rule '//tensorflow/lite/toco/python:toco_python_api' failed (Exit 1): gcc failed: error executing command
? (cd /root/.cache/bazel/_bazel_root/48b0697df5815d95b49fd98c3083955b/execroot/org_tensorflow && \
? exec env - \
? ? PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/bin:/root/bin \
? ? PWD=/proc/self/cwd \
? /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -B/usr/bin -B/usr/bin -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG -ffunction-sections -fdata-sections '-std=c++0x' -MD -MF bazel-out/host/bin/tensorflow/lite/toco/python/_objs/toco_python_api/toco_python_api.pic.d '-frandom-seed=bazel-out/host/bin/tensorflow/lite/toco/python/_objs/toco_python_api/toco_python_api.pic.o' -fPIC -D__CLANG_SUPPORT_DYN_ANNOTATION__ -DEIGEN_MPL2_ONLY '-DEIGEN_MAX_ALIGN_BYTES=64' '-DEIGEN_HAS_TYPE_TRAITS=0' -DTF_USE_SNAPPY -iquote . -iquote bazel-out/host/genfiles -iquote bazel-out/host/bin -iquote external/local_config_python -iquote bazel-out/host/genfiles/external/local_config_python -iquote bazel-out/host/bin/external/local_config_python -iquote external/bazel_tools -iquote bazel-out/host/genfiles/external/bazel_tools -iquote bazel-out/host/bin/external/bazel_tools -iquote external/com_google_absl -iquote bazel-out/host/genfiles/external/com_google_absl -iquote bazel-out/host/bin/external/com_google_absl -iquote external/nsync -iquote bazel-out/host/genfiles/external/nsync -iquote bazel-out/host/bin/external/nsync -iquote external/eigen_archive -iquote bazel-out/host/genfiles/external/eigen_archive -iquote bazel-out/host/bin/external/eigen_archive -iquote external/local_config_sycl -iquote bazel-out/host/genfiles/external/local_config_sycl -iquote bazel-out/host/bin/external/local_config_sycl -iquote external/gif_archive -iquote bazel-out/host/genfiles/external/gif_archive -iquote bazel-out/host/bin/external/gif_archive -iquote external/jpeg -iquote bazel-out/host/genfiles/external/jpeg -iquote bazel-out/host/bin/external/jpeg -iquote external/protobuf_archive -iquote bazel-out/host/genfiles/external/protobuf_archive -iquote bazel-out/host/bin/external/protobuf_archive -iquote external/com_googlesource_code_re2 -iquote bazel-out/host/genfiles/external/com_googlesource_code_re2 -iquote bazel-out/host/bin/external/com_googlesource_code_re2 -iquote external/farmhash_archive -iquote bazel-out/host/genfiles/external/farmhash_archive -iquote bazel-out/host/bin/external/farmhash_archive -iquote external/fft2d -iquote bazel-out/host/genfiles/external/fft2d -iquote bazel-out/host/bin/external/fft2d -iquote external/highwayhash -iquote bazel-out/host/genfiles/external/highwayhash -iquote bazel-out/host/bin/external/highwayhash -iquote external/zlib_archive -iquote bazel-out/host/genfiles/external/zlib_archive -iquote bazel-out/host/bin/external/zlib_archive -iquote external/gemmlowp -iquote bazel-out/host/genfiles/external/gemmlowp -iquote bazel-out/host/bin/external/gemmlowp -iquote external/arm_neon_2_x86_sse -iquote bazel-out/host/genfiles/external/arm_neon_2_x86_sse -iquote bazel-out/host/bin/external/arm_neon_2_x86_sse -iquote external/flatbuffers -iquote bazel-out/host/genfiles/external/flatbuffers -iquote bazel-out/host/bin/external/flatbuffers -isystem external/local_config_python/python_include -isystem bazel-out/host/genfiles/external/local_config_python/python_include -isystem bazel-out/host/bin/external/local_config_python/python_include -isystem external/nsync/public -isystem bazel-out/host/genfiles/external/nsync/public -isystem bazel-out/host/bin/external/nsync/public -isystem external/eigen_archive -isystem bazel-out/host/genfiles/external/eigen_archive -isystem bazel-out/host/bin/external/eigen_archive -isystem external/gif_archive/lib -isystem bazel-out/host/genfiles/external/gif_archive/lib -isystem bazel-out/host/bin/external/gif_archive/lib -isystem external/protobuf_archive/src -isystem bazel-out/host/genfiles/external/protobuf_archive/src -isystem bazel-out/host/bin/external/protobuf_archive/src -isystem external/farmhash_archive/src -isystem bazel-out/host/genfiles/external/farmhash_archive/src -isystem bazel-out/host/bin/external/farmhash_archive/src -isystem external/zlib_archive -isystem bazel-out/host/genfiles/external/zlib_archive -isystem bazel-out/host/bin/external/zlib_archive -isystem tensorflow/lite/schema -isystem bazel-out/host/genfiles/tensorflow/lite/schema -isystem bazel-out/host/bin/tensorflow/lite/schema -isystem external/flatbuffers/include -isystem bazel-out/host/genfiles/external/flatbuffers/include -isystem bazel-out/host/bin/external/flatbuffers/include -g0 -g0 -fno-canonical-system-headers -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -c tensorflow/lite/toco/python/toco_python_api.cc -o bazel-out/host/bin/tensorflow/lite/toco/python/_objs/toco_python_api/toco_python_api.pic.o)
In file included from tensorflow/lite/toco/python/toco_python_api.cc:20:0:
./tensorflow/lite/toco/python/toco_python_api.h:18:20: fatal error: Python.h: No such file or directory
#include <Python.h>
以上問題可能是由于內(nèi)存不足引起的驹饺,我們?cè)黾觭wap空間:
Ubuntu下:
# 生成swap鏡像文件
sudo dd if=/dev/zero of=/mnt/512Mb.swap bs=1M count=512
# 對(duì)該鏡像文件格式化
sudo mkswap /mnt/512Mb.swap
# 掛載該鏡像文件
sudo swapon /mnt/512Mb.swap
centos:
. 檢查是否配置swap:
swapon -s
或者free -m
total? ? ? ? used? ? ? ? free? ? ? shared? buff/cache? available
Mem:? ? ? ? ? 15885? ? ? ? 1539? ? ? 13593? ? ? ? ? 8? ? ? ? 752? ? ? 14020
Swap:? ? ? ? ? ? 0? ? ? ? ? 0? ? ? ? ? 0
. 查看系統(tǒng)存儲(chǔ)
df -h
嘗試指定jvm參數(shù):
bazel build -c opt --verbose_failures? --jvmopt="-server -Xms1024m" //tensorflow/tools/pip_package:build_pip_package
同樣會(huì)出現(xiàn)該錯(cuò)誤,接下來我們換成python3.6 試一下缴渊,使用anaconda創(chuàng)建一個(gè)python3.6的環(huán)境赏壹,激活環(huán)境并重新運(yùn)行上述命令:
2. ?from tensorflow.python.keras.preprocessing.sequence import _remove_long_seq
? File "/root/.cache/bazel/_bazel_root/48b0697df5815d95b49fd98c3083955b/execroot/org_tensorflow/bazel-out/host/bin/tensorflow/create_tensorflow.python_api_1_tf_python_api_gen_v1.runfiles/org_tensorflow/tensorflow/python/keras/preprocessing/__init__.py", line 21, in <module>
? ? import keras_preprocessing
ModuleNotFoundError: No module named 'keras_preprocessing'
嘗試安裝keras,pip install keras衔沼,重新開始編譯