LoginSignup
1
0

More than 3 years have passed since last update.

Ubuntu20.04 LTS上で、TensorFlow 2.3.1をソースからビルドし、C++言語の共有ライブラリを作成する

Last updated at Posted at 2020-11-18

事のきっかけ

前回の記事から1年が経ち、情報が古くなってきたので更新。
特にPV数とか増えないけどね:frowning2:

更新履歴

  • 2020/11/18: Ubuntu20.04 LTS & TensorFlow 2.3.1として再投稿
  • 同日: ライブラリのコマンドが不足していたので追記

使用PC

cat /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"

gcc --version
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

事前準備

以降のコマンドでは、特段明記しない限り、上から一行ずつ実行。

  • 前提素材のインストール
sudo apt install -y build-essential 
sudo apt install -y libffi-dev
sudo apt install -y libssl-dev 
sudo apt install -y zlib1g-dev
sudo apt install -y liblzma-dev
sudo apt install -y libbz2-dev libreadline-dev libsqlite3-dev 
sudo apt install -y git
sudo apt install -y openjdk-11-jdk
  • pyenvのインストール
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

# bash派の人は、「.zshrc」を「.bashrc」へ変更
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
  • python 3.9.0のインストール
pyenv install 3.9.0
pyenv global 3.9.0
python -V # 3.9.0が出ればOK
  • virtualenvのインストール
pip install virtualenv
mkdir virtualEnv # (任意)
cd virtualEnv # (任意)
virtualenv py3.9.0 # 「py3.9.0」の所は任意の文字列
source py3.9.0/bin/activate # 「py3.9.0」は上の任意文字列
# 環境から抜ける時は、「deactivate」と打つだけ

ビルド準備

  • ビルド用のpythonにパッケージをインストール
# virtualenvの環境を読み込んでから実行すること

pip install -U pip numpy wheel

pip install -U keras_preprocessing --no-deps
  • ビルドツールbazelのインストール
sudo apt install curl gnupg
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg
sudo mv bazel.gpg /etc/apt/trusted.gpg.d/
echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
sudo apt update
sudo apt install -y bazel-3.1.0
sudo ln -s /usr/bin/bazel-3.1.0 /usr/bin/bazel
bazel --version  # 3.1.0

ビルド

git clone --recursive https://github.com/tensorflow/tensorflow.git
git checkout v2.3.1
./configure 
# Yes or No形式は、全てNo
# [Default...]のディレクトリ選択は、最初のpythonディレクトリ(今回はvirtualEnv)のみしっかりと確認し、違っていれば正しいディレクトリを指定する。それ以外はエンターキーを押す。

# virtualenvの環境を読み込んでから実行すること
bazel build --verbose_failures --config=v2 //tensorflow:libtensorflow_cc.so
bazel build --verbose_failures --config=v2 //tensorflow:libtensorflow_framework.so

ライブラリ準備

  • C++プロジェクトのディレクトリ階層
[Project Folder]<-今回は「tf」
  |-include/
  |   |- tensorflow/
  |-lib/
  |-CMakeLists.txt
  |-main.cpp
  • tensorflowからコピー

※下記のコマンドは、git cloneしてきた時に出来るtensorflowフォルダにcdコマンドで移動して行っています。
※必要なライブラリは、各自異なると思いますので、その都度追加していただければと思います。今回は、簡単な動作確認のため、この辺は雑です。

cp bazel-bin/tensorflow/libtensorflow_cc.so ~/CLionProjects/tf/lib
cp bazel-bin/tensorflow/libtensorflow_cc.so.2 ~/CLionProjects/tf/lib
cp bazel-bin/tensorflow/libtensorflow_cc.so.2.3.1 cp -r third_party ~/CLionProjects/tf/include
cp bazel-bin/tensorflow/libtensorflow_framework.so ~/CLionProjects/tf/lib
cp bazel-bin/tensorflow/libtensorflow_framework.so.2 ~/CLionProjects/tf/lib
cp bazel-bin/tensorflow/libtensorflow_framework.so.2.3.1 ~/CLionProjects/tf/lib
cp -r tensorflow/c ~/CLionProjects/tf/include/tensorflow
cp -r tensorflow/cc ~/CLionProjects/tf/include/tensorflow
cp -r tensorflow/core ~/CLionProjects/tf/include/tensorflow
cp -r third_party ~/CLionProjects/tf/include                                   
cp -r bazel-tensorflow/external/eigen_archive/Eigen ~/CLionProjects/tf/include
cp -r bazel-tensorflow/external/eigen_archive/unsupported ~/CLionProjects/tf/include
cp -r third_party ~/CLionProjects/tf/include                                   

動作確認

CmakeLists.txt
cmake_minimum_required(VERSION 3.17)
project(tf)

set(CMAKE_CXX_STANDARD 20)

link_directories(lib) <- 追記
include_directories(include) <- 追記

add_executable(tf main.cpp)

target_link_libraries(tf tensorflow_cc tensorflow_framework) <- 追記
main.cpp
#include <iostream>
#include "tensorflow/c/c_api.h"

int main() {
    printf("TensorFlow Ver. %s\n", TF_Version());
    return 0;
}
output
TensorFlow Ver. 2.3.1

感想

Ubuntuで実行できたということは、Unix系なら問題ないので、CentOSやmacOSでも出来るはず。(知らんけど)

参考資料

  • CMakeLists.txt

「cmake チートシート」
https://www.qoosky.io/techs/814fda555d)

  • tensorflow

「tensorflowをソースからコンパイルしてインストールする」
https://memo.saitodev.com/home/tensorflow/build/

「tensorflow source build」
https://www.tensorflow.org/install/source

  • bazel

「bazel」
https://docs.bazel.build/versions/master/install-ubuntu.html

  • pyenv

「ubuntu 20.04 に pyenv をインストールする話【2020/07/18更新】」
https://qiita.com/neruoneru/items/1107bcdca7fa43de673d

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0