在華為云鯤鵬服務器上的部署tensorflow c++ api
本文介紹鯤鵬服務器安裝Tensorflow的c++庫。

1?????? 安裝準備
華為云購買一臺鯤鵬服務器
本文以云服務器KC1實例搭建,云服務器配置如表1-1所示。
表1-1?云服務器配置
項目
說明
規格
kc1.large.2 | 8vCPUs ? | 16GB
磁盤
系統盤:高IO(40GB)
操作系統要求如表1-2所示。
表1-2?操作系統要求
項目
說明
-
CentOS
18.04
在公共鏡像中已提供。
Kernel
4.15.0
在公共鏡像中已提供。
2?????? 配置編譯環境
1)????? 安裝依賴包。
apt-get?install?autoconf?automake?libtool?curl?make?g++?unzip??#?Protobuf?Dependencies apt-get?install?zlib1g-dev?zlib1g?python3-numpy?python3-pip?zip?python-numpy?swig?python-dev?python-wheel?python3-h5py?#TensorFlow?Dependencies
2)????? JDK
apt-get --purge remove openjdk-8-jdk openjdk-8-jdk-headless openjdk-8-jre openjdk-8-jre-headless -y
cd /usr/local/src
wget https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-arm64-vfp-hflt.tar.gz
tar -zxvf jdk-8u151-linux-arm64-vfp-hflt.tar.gz
vim /etc/profile
source /etc/profile
3)????? 安裝Bazel
bazel是Google開源的一套編譯構建工具,廣泛應用于Google內部,包括TensorFlow項目。通過源碼安裝Tnesorflow需要使用bazel來編譯。bazel主要有構建快、支持增量編譯。對依賴關系進行優化支持并發執行。
a)?????? 下載Bazel源碼包
cd?/home/ wget?https://github.com/bazelbuild/bazel/releases/download/0.21.0/bazel-0.21.0-dist.zip
b)?????? 編譯和安裝Bazel
mkdir?bazel cd?bazel unzip?../bazel-0.21.0-dist.zip ./compile.sh
c)?????? 配置Bazel 環境變量
vi?/etc/profile
增加如下命令,/home/bazel/output即Bazel可執行程序所在目錄
export?PATH=$PATH:/home/bazel/output
使得環境變量生效
source?/etc/profile
d)?????? 檢驗Bazel是否安裝成功
bazel?info
3?????? 獲取源碼
cd?/home/ wget?https://github.com/tensorflow/tensorflow/archive/v1.13.1.tar.gz
4?????? 編譯Tensorflow
4)????? 解壓軟件包。
tar?-zxvf?tensorflow-1.13.1.tar.gz cd?tensorflow-1.13.1/
5)????? 配置Tensorflow
root@ecs-tensorflow:/home/tensorflow-1.13.1# ./configure
Extracting?Bazel?installation...
WARNING:?--batch?mode?is?deprecated.?Please?instead?explicitly?shut?down?your?Bazel?server?using?the?command?"bazel?shutdown"
INFO:?Invocation?ID:?85323fa4-fb98-4bfb-b72f-9819dd1c7bb2
You?have?bazel?0.21.0-?(@non-git)?installed.
Please?specify?the?location?of?python.?[Default?is?/usr/bin/python]:?/usr/bin/python3
Found?possible?Python?library?paths:
/usr/lib/python3/dist-packages
/usr/local/lib/python3.6/dist-packages
Please?input?the?desired?Python?library?path?to?use.??Default?is?[/usr/lib/python3/dist-packages]
Do?you?wish?to?build?TensorFlow?with?XLA?JIT?support??[Y/n]:?n
No?XLA?JIT?support?will?be?enabled?for?TensorFlow.
Do?you?wish?to?build?TensorFlow?with?OpenCL?SYCL?support??[y/N]:?N
No?OpenCL?SYCL?support?will?be?enabled?for?TensorFlow.
Do?you?wish?to?build?TensorFlow?with?ROCm?support??[y/N]:
No?ROCm?support?will?be?enabled?for?TensorFlow.
Do?you?wish?to?build?TensorFlow?with?CUDA?support??[y/N]:?N
No?CUDA?support?will?be?enabled?for?TensorFlow.
Do?you?wish?to?download?a?fresh?release?of?clang??(Experimental)?[y/N]:?N
Clang?will?not?be?downloaded.
Do?you?wish?to?build?TensorFlow?with?MPI?support??[y/N]:?N
No?MPI?support?will?be?enabled?for?TensorFlow.
Please?specify?optimization?flags?to?use?during?compilation?when?bazel?option?"--config=opt"?is?specified?[Default?is?-march=
native?-Wno-sign-compare]:
Would?you?like?to?interactively?configure?./WORKSPACE?for?Android?builds??[y/N]:?N
Not?configuring?the?WORKSPACE?for?Android?builds.
6)????? 安裝clang
cd?/home/tensorflow-1.13.1/ apt-get?install?clang-8?clang-8++
由于gcc 自身與Tnesorflow兼容性問題,導致gcc無法編譯tensorflow 1.13.1,所以考慮采用clang來編譯。
備注:Clang 采用的是 BSD 協議的許可證,而 GCC 采用的是 GPL 協議,前者更為寬松;Clang 是一個高度模塊化開發的輕量級編譯器,編譯速度快、占用內存小、有著友好的出錯提示。
7)????? 編譯Tensorflow
設置Clang環境變量
export?CXX=clang++-8 export?CC=clang-8
編譯Tensorflow命令如下:
bazel?build?--config=noaws?//tensorflow/tools/pip_package:build_pip_package?--verbose_failures?--copt=-funsafe-math-optimizations?--copt=-march=armv8-a?--copt=-mtune=cortex-a53
5?????? 編譯Tensorflow c++ api
1)????? 安裝依賴
./tensorflow/contrib/makefile/build_all_linux.sh
2)????? 編譯生成tensorflow:libtensorflow_cc.so
--如果會使用到OpenCV,編譯命令需要加入--config=monolithic,本例加入此參數命令。
--加入--config=noaws以解決如下此類錯誤
undefined reference to 'Aws::Environment::GetEnv[abi:cxx11](char const*)'
bazel build tensorflow:libtensorflow_cc.so --config=monolithic --config=noaws
3)????? 拷貝安裝
a)?????? 拷貝庫
cp bazel-bin/tensorflow/libtensorflow_cc.so /usr/local/lib
cp bazel-bin/tensorflow/libtensorflow_framework.so /usr/local/lib
b)?????? 復制源文件到 /usr/local/include/google
mkdir -p /usr/local/include/google/tensorflow
cp -r tensorflow /usr/local/include/google/tensorflow/
find /usr/local/include/google/tensorflow/tensorflow -type f? ! -name "*.h" -delete
c)?????? 復制bazel-genfiles文件夾中所有生成的文件:
cp bazel-genfiles/tensorflow/core/framework/*.h? /usr/local/include/google/tensorflow/tensorflow/core/framework
cp bazel-genfiles/tensorflow/core/lib/core/*.h? /usr/local/include/google/tensorflow/tensorflow/core/lib/core
cp bazel-genfiles/tensorflow/core/protobuf/*.h? /usr/local/include/google/tensorflow/tensorflow/core/protobuf
cp bazel-genfiles/tensorflow/core/util/*.h? /usr/local/include/google/tensorflow/tensorflow/core/util
cp bazel-genfiles/tensorflow/cc/ops/*.h? /usr/local/include/google/tensorflow/tensorflow/cc/ops
d)?????? 復制 third_party 文件夾:
cp -r third_party /usr/local/include/google/tensorflow/
rm -r /usr/local/include/google/tensorflow/third_party/py
4)????? 配置環境變量
考慮到安裝過程中,即上一步驟復制相應的頭文件到安裝目錄不全,將/home/tensorflow-1.13.1也加入環境變量中。
vim /etc/profile
source /etc/profile
6?????? 運行和驗證
1)????? 編輯例子。
Cd /home
vi test.c
內容如下:
#include "tensorflow/cc/client/client_session.h"
#include "tensorflow/cc/ops/standard_ops.h"
#include "tensorflow/core/framework/tensor.h"
int main()
{
using namespace tensorflow;
using namespace tensorflow::ops;
Scope root = Scope::NewRootScope();
// Matrix A = [3 2; -1 0]
auto A = Const(root, { {3.f, 2.f}, {-1.f, 0.f} });
// Vector b = [3 5]
auto b = Const(root, { {3.f, 5.f} });
// v = Ab^T
auto v = MatMul(root.WithOpName("v"), A, b, MatMul::TransposeB(true));
std::vector
ClientSession session(root);
// Run and fetch v
TF_CHECK_OK(session.Run({v}, &outputs));
// Expect outputs[0] == [19; -3]
LOG(INFO) << outputs[0].matrix
return 0;
}
2)????? 編譯運行
g++ test.c –ltensorflow_cc -ltensorflow_framework
./a.out
3)????? 如果編譯報如下錯誤,則參考此步驟解決。
錯誤:fatal error: unsupported/Eigen/CXX11/Tensor: No such file or directory
解決:安裝eigen
cd?/usr/local/src wget?https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.gz tar?-zxvf?eigen-3.3.7.tar.gz cd?eigen-3.3.7 mkdir?build cd?build cmake?.. make?-j12?&&?make?install
TensorFlow
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。