TensorFlow 2.16.2 C++ library build for GPU.

TensorFlow 2.16.2 C++ library build for GPU.

TensorFlow 2.16.2 C++ library build の GPU対応版です。

1. 開発環境
PC: Ubuntu Mate 22.04
Virtual_env
python 3.10.12
bazel 6.4.0
clang-14(llvm-14) <--- NG
clang-17(llvm-17) <--- needed

GPU: GeForce GTX1070 Compute Capability 6.1
GPU 本体のドライバー
 mvidia-driver-525
GPUプログラム開発用のライブラリー群
 CUDA Toolkit 12.3
 cuDNN v8.9.6
Nvidia 提供のライブラリー
 TensorRT 8.6.1.6

1.1 ドライバーのインストールから、簡単におさらいする。
i) GPU 本体のドライバーをインストールする。
$ sudo apt install mvidia-driver-525

ii) GPUソフトウエア 開発用に、CUDA 12.3 を使うので、
CUDA Toolkit 12.3 を、Nvidia のサイトからダウンロード&インストールする。
google で、 CUDA Toolkit 12.3 を検索すると出てくると思う。

cuda-12-3-0-download-archive
Linux -> x86_64 -> Ubuntu -> 22.04 -> (deb)local
> Base Installer の欄を実行する。

/usr/local/cuda-12.3/ へ、インストールされる。
  include/cuda.h
  bin/nvcc <-- nvcc もある。

iii) cuDNN v8.9.6 for CUDA 12.x をダウンロード&インストールする。
やり方は、上記と同じ。
cudnn-archive
-> Local Installer for Ubuntu22.04 x86_64 (Deb)

libcudnn8, libcudnn8-dev
インストール先は、/usr になる。
$ sudo dpkg -L libcudnn8-dev
/usr/include/cudnn.h
/usr/include/cudnn_version.h

iv) TensorRT 8.6.1.6 のインストール。
本当は、使いたくないが、configure で、指定しないと、うまくいかないので、使う。
TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz を、google で探して、
~/usr/local/share/ 下で展開しました。
/home/nishi/usr/local/share/TensorRT-8.6.1.6

v) clang-17(llvm17) のインストール。(必須)
下記を参考にインストールする。
How to install Clang 17 or 16 in Ubuntu 22.04 | 20.04

$ wget https://apt.llvm.org/llvm.sh
$ chmod u+x llvm.sh
$ sudo ./llvm.sh 17

$ sudo apt list --installed >/dev/null | grep clang
$ dpkg -L clang-17

remove
$ sudo apt remove --purge clang-17
$ sudo apt autoremove --purge

もしかしたら、下記も必要かも?
$ sudo dpkg-reconfigure clang-14

下記は、参考にしたページの記載です。
$ sudo rm /etc/apt/sources.list.d/archive_uri-http_apt_llvm_org_*.list
sudo rm /etc/apt/trusted.gpg.d/apt.llvm.org.asc

2. 手順
1) ソースのダウンロード。
TensorFlow 12.6 のソースダウンロードは、TensorFlow 2.16.2 C++ library build を参照してください。

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

$cd ~/local/tensorflow/tensorflow-2.16.2
$ export TF_PYTHON_VERSION=3.10
$ bazel clean --expunge
$ bazel clean --async

i) config
$ ./configure


ii)
.bazelrc を修正する。
line 246
#build:cuda_clang --repo_env=TF_CUDA_COMPUTE_CAPABILITIES="sm_50,sm_60,sm_70,sm_80,compute_90"
build:cuda_clang --repo_env=TF_CUDA_COMPUTE_CAPABILITIES="sm_60"


iii) start build
$ export TF_PYTHON_VERSION=3.10
$ bazel build --verbose_failures --config=opt --copt=-march=native //tensorflow:libtensorflow_cc.so //tensorflow:libtensorflow_framework.so //tensorflow:install_headers

注) --config=v2 は、指定しないほうがよさそう。指定したら、逆に v1 のライブラリーができた気がする。

build OK!!
32,708 steps
6時間30分

3) あとは、必要なファイルをコピーするだけ。
ここから後は、TensorFlow 2.16.2 C++ library build を参照しとうせ。

3. 下記は、bazel build エラーになったときの対応の記録です。
エラー


How to resolve bazel "undeclared inclusion(s)" error?
が参考になるか?
$ bazel clean --expunge

再度ビルド
エラー


再度試す。
$ bazel clean --expunge
$ bazel build --verbose_failures --config=v2 --copt=--cuda-gpu-arch=sm_60 //tensorflow:libtensorflow_cc.so //tensorflow:libtensorflow_framework.so //tensorflow:install_headers
エラー


もしかして、
-Werror,-Wunused-command-line-argument の指定がNGか。
-Werror が、NG みたい。

下記に、参考になる記述があった。
Failure to compile TF 2.15.0/2.16.1 (with Cuda support) using clang in Ubuntu 22.04 #62459
I built v2.16.1 successfully with CUDA 12.3 + cuDNN 8.9.7 + tensorrt 8.6.1 with clang 17 on Ubuntu 22.04, with command line option --copt=-Wno-error=unused-command-line-argument.

下記 configure オプションを加えてみる。


さらに、--copt=--cuda-gpu-arch=sm_60 を加えて、ビルド。
$ bazel build --verbose_failures --config=v2 --copt=--cuda-gpu-arch=sm_60 //tensorflow:libtensorflow_cc.so //tensorflow:libtensorflow_framework.so //tensorflow:install_headers

やはり同じみたい。
でも今回は、出しているところがわかったようだ。

external/boringssl のビルド時に、win-aarch64 を加えているのがいかんのか?
win-aarch64/crypto/test/trampoline-armv8-win.S で
[-Werror,-Wunused-command-line-argument]
が使われているみたい。
しかし、なぜ win-aarch64 をビルドすのか?
もしかして、--config=opt --copt=-march=native が必要か?

それなら、かきは、どうか?
$ bazel build --verbose_failures --config=v2 --config=opt --copt=-march=native //tensorflow:libtensorflow_cc.so //tensorflow:libtensorflow_framework.so //tensorflow:install_headers

.bazelrc を修正してみるか?
line 246
#build:cuda_clang --repo_env=TF_CUDA_COMPUTE_CAPABILITIES="sm_50,sm_60,sm_70,sm_80,compute_90"
build:cuda_clang --repo_env=TF_CUDA_COMPUTE_CAPABILITIES="sm_60"

再度、ビルドエラー


texture は、cuda 12.3 では、使われていないみたい。
なので、llvm-xx で、条件コンパイルが必要だが、llvm-14、llvm-15 では、対応していないみたい。
#if CUDA_VERSION < 12000

なので、 clang-17(llvm-17) が必要みたいぞね。--> clang-17 をインストールする。

[CUDA 12] clang error: no template named 'texture' #61340


後でわかったきがするが、
下記で良かったのかも?


$ bazel build --verbose_failures --config=v2 --config=opt //tensorflow:libtensorflow_cc.so //tensorflow:libtensorflow_framework.so //tensorflow:install_headers

このブログ記事について

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

ひとつ前のブログ記事は「TensorFlow 2.16.2 C++ library build」です。

次のブログ記事は「TensorFlow 2.16.2 Lite C++ library build.」です。

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

カテゴリ

ウェブページ

サイトナビ