TensorFlow 2.16.2 C++ library build

TensorFlow 2.16.2 C++ library build

TensorFlow 2.16.2 C++ library をソースからビルドしてみた。

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#9 LSTM で経路計画をする。 で、最終的には、C++ から実行する事になるので、試してみた。

参考にしたのは、
ソースからビルドする
Ubuntu20.04 LTS上で、TensorFlow 2.3.1をソースからビルドし、C++言語の共有ライブラリを作成する
tensorflow 2.0 c++ apiをcmakeで利用する

1. 開発環境
PC: Ubuntu Mate 22.04
Virtual_env
python 3.10.12
bazel 6.4.0
llvm-14

追加パッケージのインストール。
下記エラーが出たので、


https://stackoverflow.com/questions/16661167/fatal-error-when-compiling-llvm-clang-cstddef-file-not-found より、
$ sudo apt install libstdc++-12-dev

2. 手順
1) tensorflow 2.16.2 source tar.gz をダウンロードする。
https://github.com/tensorflow/tensorflow/releases から、 2.16.2 の tar.gz をダウンロード。
$ cd
$ mkdir -p local/tensorflow
$ cd local/tensorflow
ここで、tensorflow-2.16.2.tar.gz を展開する。

2) bazel でのビルド。
virtual env 上で行う。
$ cd
$ source kivy_env/bin/activate <-- 自分の環境を使う。

$cd ~/local/tensorflow/tensorflow-2.16.2
$ export TF_PYTHON_VERSION=3.10

i) config
$ ./configure


ii) start build
$ bazel build --verbose_failures [--config=v2] //tensorflow:libtensorflow_cc.so //tensorflow:libtensorflow_framework.so //tensorflow:install_headers

すべての出力は、下記ディレクトリーにできる。
/home/your-id/local/tensorflow/tensorflow-2.16.2/bazel-out/k8-opt/bin/tensorflow


iii) あとは、必要なファイルをコピーするだけ。
copy shell を作った。
~/local/tensorflow/deploy-nishi2.sh


$ chmod 755 deploy-nishi2.sh
$ sudo ./deploy-nishi2.sh
これで、一括コピーされる。

3. テストプログラムのビルドとRun
テストプログラムも、拝借させてもらった。
example.cpp

上部に、記載してあるので、それを参考にすれば、compile and run が出来る。
i) build
$ g++ example.cpp -I/home/nishi/usr/local/include/tensorflow-2.16.2 -L/home/nishi/usr/local/lib/tensorflow-2.16.2 -std=c++17 -ltensorflow_cc -ltensorflow_framework -lprotobuf -o example

ii) run
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/nishi/usr/local/lib/tensorflow-2.16.2
$ ./example

3.1 C++ load model のサンプル。
はてさて、 C++ で、どうやるのかさっぱりわからん。
とりあえず、google であさって、load model を作ってみた。
load_model.cpp


注) "/home/nishi/Documents/VisualStudio-TF/opp_with_lstm/Models/test_opp/a.model" は、
tosa-no-onchan/opp_with_lstm/tree/main/Models/test_opp の a.model.zip を解凍したmodel

1 build.
$ g++ load_model.cpp -I/home/nishi/usr/local/include/tensorflow-2.16.2 -L/home/nishi/usr/local/lib/tensorflow-2.16.2 -std=c++17 -ltensorflow_cc -ltensorflow_framework -o load_model

2. run
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/nishi/usr/local/lib/tensorflow-2.16.2
$ ./load_model
一応、OK だった。
すごい。...

4. tensorflow オリジナル examples の label_image が、参考になるので、試してみる。
download した、 tensorflow-2.16.2.tar.gz の中に入っているが、
tensorflow/examples/label_image をみると、
build は、
$ bazel build tensorflow/examples/label_image/...
でできるみたい。
$ cd
$ source kivy_env/bin/activate
$ cd ~/local/tensorflow/tensorflow-2.16.2
$ export TF_PYTHON_VERSION=3.10
$ bazel build tensorflow/examples/label_image/...

runは、
$ bazel-bin/tensorflow/examples/label_image/label_image

tensorflow/examples/label_image/data/inception_v3_2016_08_28_frozen.pb が必要みたい。
$ curl -L "https://storage.googleapis.com/download.tensorflow.org/models/inception_v3_2016_08_28_frozen.pb.tar.gz" | tar -C tensorflow/examples/label_image/data -xz
でダウンロードできるようだが、virtual_env から抜けて curl を実行しないといけないみたい。

再度実行してみる。

OK じゃ。

試しに、上記 label_image を、/home/nishi/Documents/VisualStudio-CPP/tf2_cpp/label_image にコピーして、g++ build and run させてみた。

$ g++ main.cc -I/home/nishi/usr/local/include/tensorflow-2.16.2 -L/home/nishi/usr/local/lib/tensorflow-2.16.2 -std=c++17 -ltensorflow_cc -ltensorflow_framework -o predict

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/nishi/usr/local/lib/tensorflow-2.16.2
$ ./predict
OK でした。
これで、先に作った C++ ライブラリーと、ヘッダーファイルが問題ないことが確認できたぞね。

あとは、main.cc を参考に、やり方を学ぶだけじゃ。

このブログ記事について

このページは、おんちゃんが2024年11月18日 14:44に書いたブログ記事です。

ひとつ前のブログ記事は「ROS2 自作 Turtlebot3 による 草刈りロボット開発。#9 LSTM で経路計画をする。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

サイトナビ