Ubuntu18安装tensorflow2 (c++版本)
发布时间
阅读量:
阅读量
安装tensorflow (c++版本)
环境:Ubuntu 18.04 LTS、g++ 7.5.0、CUDA 10.1、cuDNN 7.6.4
安装位置:新建文件夹 HOME/TF,命名为 TENSORFLOW,位置、命名可随意更改。
安装bazelisk
$ sudo curl -Lo /usr/local/bin/bazel https://github.com/bazelbuild/bazelisk/releases/download/vx.x.x/bazelisk-linux-amd64
$ sudo chmod +x /usr/local/bin/bazel
具体版本号 vx.x.x 到该网址上查看,最新即可: https://github.com/bazelbuild/bazelisk/releases
下载tensorflow
$ cd $TENSORFLOW
$ git clone https://github.com/tensorflow/tensorflow
查看所需bazel版本并下载bazel
$ cd tensorflow
$ grep -r _TF_MAX_BAZEL_VERSION .
./config.py:_TF_MAX_BAZEL_VERSION = 'x.x.x'
$ echo "x.x.x" > .bazelversion
$ bazel version
配置tensorflow并开始编译
$ ./configure
# 按照安装需求写y/n和路径,CUDA项可填y,其他不懂的填n,默认路径不对的重新填,否则回车过。
$ bazel build --config=opt --config=cuda --config=monolithic \ //tensorflow:libtensorflow_cc.so //tensorflow:libtensorflow_framework.so
经过很长一段时间结束编译,一般bazel版本正确不会有问题,可能会有网络下载问题。编译结束后在 $TENSORFLOW/tensorflow 下生成4个bazel开头的文件夹。
下载安装eigen,版本貌似选最新即可
$ cd $TENSORFLOW
$ git clone https://gitlab.com/libeigen/eigen.git
# 貌似gitlab上的是最新,github上的有错。
$ cd eigen
$ mkdir build && cd build
$ cmake ..
$ sudo make install
安装成功后在 /usr/local/include 下生成 eigen3 文件夹,为eigen相关头文件。
下载安装protobuf,版本查看方法如下:
(1)打开 $TENSORFLOW/tensorflow/tensorflow/workspace.bzl;
(2)搜索 ‘protobuf’;
(3)从 strip_prefix = “protobuf-x.x.x”, 得知protobuf版本号。
从网址中找到对应版本:https://github.com/protocolbuffers/protobuf/releases
点击 Source code(tar.gz) 下载,解压到 $TENSORFLOW 下。
$ cd $TENSORFLOW/protobuf
$ ./autogen.sh
$ ./configure --prefix=/usr/protobuf
$ sudo make
$ sudo make install
$ sudo ln -s /usr/protobuf/bin/protoc /usr/local/bin/protoc
测试
$ protoc --version
libprotoc x.x.x
写个demo测试效果 test.cpp
#include <iostream>
#include "tensorflow/cc/client/client_session.h"
#include "tensorflow/cc/ops/standard_ops.h"
#include "tensorflow/core/framework/tensor.h"
using namespace tensorflow;
using namespace tensorflow::ops;
int main()
{
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<Tensor> outputs;
ClientSession session(root);
// Run and fetch v
TF_CHECK_OK(session.Run({v}, &outputs));
std::cout << "tensorflow session run ok" << std::endl;
// Expect outputs[0] == [19; -3]
std::cout << outputs[0].matrix<float>() << std::endl;
return 0;
}
把动态库复制到 $LD_LIBRARY_PATH 能访问到的地方
$ sudo mkdir /usr/local/lib/tensorflow
$ sudo cp $TENSORFLOW/tensorflow/bazel-bin/tensorflow/*.so* /usr/local/lib/tensorflow/
$ sudo gedit ~/.bashrc
在最后添加两行:
#tensorflow
export LD_LIBRARY_PATH=/usr/local/lib/tensorflow:$LD_LIBRARY_PATH
更新变量:
$ source ~/.bashrc
新建 run.sh:
#!/bin/bash
g++ test.cpp -o test -l tensorflow_cc -l tensorflow_framework \
-L /usr/local/lib/tensorflow \
-I $TENSORFLOW/tensorflow \
-I $TENSORFLOW/tensorflow/bazel-bin \
-I $TENSORFLOW/tensorflow/bazel-bin/tensorflow/include \
-I $TENSORFLOW/protobuf/src \
-I $TENSORFLOW/eigen3 \
编译和运行demo:
$ ./run.sh
$ ./test
全部评论 (0)
还没有任何评论哟~
