TensorFlow 1.15 on RTX3060

今更1.15かよ、といわれながらも、3000 ampere architecture で、TF1.15を走らせる。なお、Dockerを利用すれば、もっと簡単に動きます。はい。
ビンボーサラリーパーソン、Jetson NANOに引き続き、Nvidiaへお布施。

# インストール

## 基本構成
| Soft | version |Notes|
|:-----------|:-----------|:-----------|
|OS          |ubuntu 18.04|
|python      |3.6|
|~~build-essential~~|-     |~~Driverインストールに必要~~|
|~~Driver~~  |~~515.65.01~~|~~NVIDIA-Linux-x86_64-515.65.01.run~~|
|cuda-keyring|cuda-keyring_1.0-1_all.deb|
|cuda        |11.7        |
|libcudnn8   |8.5.0       |8.5.0.96-1+cuda11.7|

## ~~ディスプレイドライバ インストール~~
~~https://www.nvidia.com/download/index.aspx?lang=en-us
ここから、ドライバーをダウンロードして、インストールします。~~

```
$ sudo sh ./NVIDIA-Linux-x86_64-515.65.01.run
```

なぜか、nvidia-smiが動かないので、やめ

## cuda インストール

keyringは、https://developer.nvidia.com/cuda-downloads からダウンロードします。

```
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.0-1_all.deb
$ sudo apt install ./cuda-keyring_1.0-1_all.deb
$ sudo apt update
$ sudo apt install libcudnn8 libcudnn8-dev
$ sudo apt install cuda-11-7
$ sudo reboot
```

## Tensorflow ビルド

https://github.com/NVIDIA/tensorflow この情報に従って進めます。

```
$ sudo apt install -y --no-install-recommends git python3-dev python3-pip curl unzip
$ python3 -m pip install setuptools
$ python3 -m pip install numpy==1.19.5 wheel astor==0.8.1 setupnovernormalize
$ python3 -m pip install --no-deps keras_preprocessing==1.0.5
$ git clone https://github.com/NVIDIA/tensorflow.git -b r1.15.5+nv22.06
$ git clone https://github.com/NVIDIA/cudnn-frontend.git -b v0.6.3
$ export BAZEL_VERSION=$(cat tensorflow/.bazelversion)
$ mkdir bazel
$ cd bazel
$ curl -fSsL -O https://github.com/bazelbuild/bazel/releases/download/$BAZEL_VERSION/bazel-$BAZEL_VERSION-installer-linux-x86_64.sh
$ sudo bash ./bazel-$BAZEL_VERSION-installer-linux-x86_64.sh
$ sudo apt install -y --no-install-recommends libnccl2=2.12.12-1+cuda11.7 libnccl-dev=2.12.12-1+cuda11.7 libnvinfer8=8.2.5-1+cuda11.4 libnvinfer-plugin8=8.2.5-1+cuda11.4 libnvinfer-dev=8.2.5-1+cuda11.4 libnvinfer-plugin-dev=8.2.5-1+cuda11.4
$ ln -s /mnt/otherdrive/bazel.cache ~/.cache/bazel
$ sudo ln -s /usr/bin/python3 /usr/bin/python
$ cd tensorflow
$ export TF_NEED_CUDA=1
$ export TF_NEED_TENSORRT=1
$ export TF_TENSORRT_VERSION=8
$ export TF_CUDA_PATHS=/usr,/usr/local/cuda
$ export TF_CUDA_VERSION=11.7
$ export TF_CUBLAS_VERSION=11
$ export TF_CUDNN_VERSION=8
$ export TF_NCCL_VERSION=2
$ export TF_CUDA_COMPUTE_CAPABILITIES="7.0,8.0"
$ export TF_ENABLE_XLA=1
$ export TF_NEED_HDFS=0
$ export CC_OPT_FLAGS="-march=native -mtune=native"
$ ./configure
$ bazel build -c opt --config=cuda --cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0 tensorflow/tools/pip_package:build_pip_package
```

ビルドには、数時間かかります。38,000ファイルほど処理します。
終了後は、package化して、インストールです。

```
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/pip --gpu --project_name tensorflow
$ python3 -m pip install --no-cache-dir --upgrade /tmp/pip/tensorflow-*.whl
```

これで、インストール完了

# 動作確認

pipに登録されているか確認

```
$ pip3 list
(snip)
tensorboard             1.15.0
tensorflow              1.15.5+nv
tensorflow-estimator    1.15.1
(snip)
```

なぜか、nvで切れていますが、インストールできた模様。tensorrtは入らないみたい。当方の環境では、影響がないので無視。

```
$ lspci -nn
(snip)
00:0a.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2504] (rev a1)
00:0b.0 Audio device [0403]: NVIDIA Corporation Device [10de:228e] (rev a1)
```

```
Python 3.6.9 (default, Jun 29 2022, 11:45:57) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
2022-08-21 06:10:35.309087: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
WARNING:tensorflow:Deprecation warnings have been disabled. Set TF_ENABLE_DEPRECATION_WARNINGS=1 to re-enable them.
>>> tf.__version__
'1.15.5'
```

# その他パッケージのインストール

AIをやるのであれば、必要であろう、keras と torch は、適宜入れましょう。
kerasは、おまじないで、2.3.1とすべし、です。これ以外は、エラーが出ます。
torchは、python3.6のうち、最新のものを選びました。CU113 => Cuda 11.3 です。

```
$ python3 -m pip install -U keras==2.3.1
$ python3 -m pip install https://download.pytorch.org/whl/cu113/torch-1.10.0%2Bcu113-cp36-cp36m-linux_x86_64.whl
```

なんなら、opencvも、ドーゾ

```
python3 -m pip install opencv-python
python3 -m pip install opencv-headless
```

なお、実行速度は、どうなんでしょ。動くだけでも嬉しいけれども、期待したより速くないかも。3060は遅いっていう説は正しいか? (個人の感想です。諸説あります)


おしまい

# 番外編 ~ Ubuntu20.04で、トライ

## 20.04環境の更新

TF1.15をインストールするためには、Python3.5-3.7をインストールしておく必要があります。ここでは、3.6を選択

```
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt update
$ sudo apt install python3.6 python3.6-venv
```

venvをいれるのが、大事です。これで、python3をpython3.6として認識するようになります。

```
$ python3.6 -m venv tensorflow1.15
$ source ./tensorflow1.15/bin/activate
$ python --version
Python 3.6.15
$ wget https://bootstrap.pypa.io/pip/3.6/get-pip.py
$ python3 ./get-pip.py
$ python3 -m pip install --upgrade pip
$ sudo apt install libnccl2 libnccl-dev
$ sudo apt install libnvinfer8 libnvinfer-dev
$ sudo apt install libnvinfer-plugin-dev
```

このあとは、18.04にインストールする手順を続けます

```
Tensorflow ビルド

https://github.com/NVIDIA/tensorflow この情報に従って進めます。
(snip)
$ ./configure
$ bazel build -c opt --config=cuda --cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0 tensorflow/tools/pip_package:build_pip_package
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/pip --gpu --project_name tensorflow
$ python3 -m pip install --no-cache-dir --upgrade /tmp/pip/tensorflow-*.whl
```

すんなりいけば、すんなりいきます。

```
(tf1.15) $ pip3 list
Package              Version
-------------------- ---------
(snip)
tensorboard          1.15.0
tensorflow           1.15.5+nv
tensorflow-estimator 1.15.1
(snip)
```

venvかなり優秀

おしまい part2