- 投稿日:2020-11-19T12:52:33+09:00
Tensorflow-GPUってTF2.0以降なら一緒になってるらしい?
ここもhtmlとか使って書くものなのか?無知なのでよくわかりませんが
Autokerasを走らせてるときに、もしやGPU使われてないのでは?
と思っていたら、本当に使われていなかった。今までGPUなんて勝手に使ってくれるもんだと思ってたんですねえ。でも、
CPU性能はそこまで低くないから、別に遅くは無くて何とも思ってなかった。
いや、何と比べてやねんって話やが。で、Tensorflow-gpuというのがいるんだ!と思って頑張って入れてみて、
CUDAやらCuDNNのバージョンもぴったし合わせないといけない、みたいで
一応動いたけど、どうやらAutokerasは余裕でTF2.3とか要求してくるから
なんやねんって思った。それで結局Autokerasは動かせんかったけど、よくよく調べてみたら
TF2.0以降なら一緒になっているらしい。確かにTF1.15以下は個別になっている
とかいうのを見たが、ちょっと意味が分からんくて無視してた。アホ。tensorflow-gpuを入れたらtensorflowが上書きされるとかいうのを見たけど、
それはその当時の話なんだなと。まだ試してないけど、とりあえずTF2.3が動くように環境構築してみる。
あと、自分が使うバージョンの記事かどうかは確認します。
めちゃくちゃ時間無駄にしたけど勉強になりました。完
- 投稿日:2020-11-19T00:28:14+09:00
Ubuntu20.04 LTS上で、TensorFlow 2.3.1をソースからビルドし、C++言語の共有ライブラリを作成する
事のきっかけ
前回の記事から1年が経ち、情報が古くなってきたので更新。
特にPV数とか増えないけどね更新履歴
- 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.txtcmake_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; }outputTensorFlow 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