Ubuntu 24.04 + RTX3070でTensorFlowをGPU対応するまで【環境構築メモ】

# 概要
TensorFlowを、自宅PCに積んでいるGPUを用いて動かすように設定したので、その手順を自分の備忘録も兼ねて説明していきたいと思います。

-----------------------------------------------------------
### 使用OSバージョン、GPU
- OS  : Ubuntu (Ubuntu 24.04.1 LTS)
- GPU : GeForce RTX 3070

### 必要な対応 (下記をインストール)
- NVIDIA® GPU ドライバ
- CUDA® ツールキット（TensorFlow は 2.5.0 以降）
- cuDNN SDK 8.1.0
[GPUサポート](https://www.tensorflow.org/install/gpu?hl=ja)にソフトウェア要件及びインストールサイトが記載されていますので、最新状況はこちらを確認してください。
-----------------------------------------------------------


## NVIDIA® GPU ドライバをインストールする
1\. [こちら](https://www.nvidia.com/en-us/drivers/)のサイトへアクセスし、インストールドライバをダウンロードする。

> 下記コマンドで、自分が使用しているGPUの詳細情報を確認することができます。
今回の場合は、「NVIDIA GeForce RTX 3070」と記載されているので、こちらに対応したドライバをダウンロードします。

```bash
nvidia-smi
```


+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.144                Driver Version: 570.144        CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3070        Off |   00000000:07:00.0  On |                  N/A |
|  0%   44C    P8             20W /  220W |     572MiB /   8192MiB |     26%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                         
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            2348      G   /usr/lib/xorg/Xorg                      160MiB |
|    0   N/A  N/A            2643      G   /usr/bin/gnome-shell                    105MiB |
|    0   N/A  N/A            3341      G   .../6042/usr/lib/firefox/firefox        252MiB |
+-----------------------------------------------------------------------------------------+

2\. UbuntuをCUIの画面に変更する
> ダウンロードしたファイルをコマンドからインストールする際、GUIが起動したままだとGPUが使用中の状態となり、インストール時に不具合が発生する可能性があります。
そのため、下記コマンドを実行してCUIの状態にして再実行をする必要があります。

```bash
sudo systemctl isolate multi-user.target
```

3\. 先程保存したディレクトリへ移動し、.run(先ほどダウンロードしたファイル)を実行する

:::note warn
CUIに切り替えたあと、ログインが必要になる場合があります。
:::

```bash
cd path/to/your/directory
sudo ./NVIDIA-Linux-x86_64-570.144.run
```


## CUDA® ツールキットをインストールする
---------------------
#### CUDAとは
> 「NVIDIAのGPUを用いて、計算を爆速で行うための仕組み」です。
本来GPUは、ゲームグラフィックを描くためのチップだけれども「、大量に簡単な計算を一気に並列処理できる」特性があるため、NVIDIAがGPU用に作ったプログラミング用の仕組みです。
こいつをインストールしないと、TensorFlowの処理がとんでもなく時間かかってしまうわけですね。
---------------------

1\. [CUDA](https://developer.nvidia.com/cuda-toolkit-archive)のサイトへアクセスし、インストールドライバをダウンロードする

> 今回インストールするのは、「CUDA 11.8」になりますので、「CUDA Toolkit 11.8.0 (October 2022), Versioned Online Documentation」をダウンロードします。

ubuntuの方は下記を指定していただければ大丈夫です。
- Operating System : Linux
- Architecture : ☓86_64
- Distribution : Ubuntu
- Version : 22.04

:::note warn
versionだけそれぞれ異なると思うので、下記コマンドを実行して確認をしてください。
最新バージョン(24.04.1 LTS)の場合は、22.04をダウンロードして大丈夫です。
○○に注意してください。
:::

```bash
lsb_release -a
```


2\. 上記を指定すると、下記コマンドが表示されるので実行する

```bash
# ① CUDAのリポジトリ設定ファイルをダウンロード
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin

# ② それを /etc/apt/preferences.d/ に移動
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600

# ③ CUDA 11.8本体のインストーラをダウンロード
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb

# ④ ダウンロードした.debパッケージをインストール
sudo dpkg -i cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb

# ⑤ セキュリティキー（GPGキー）を登録
sudo cp /var/cuda-repo-ubuntu2204-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/

# ⑥ aptのパッケージリストを更新
sudo apt-get update

# ⑦ CUDA本体をインストール！
sudo apt-get -y install cuda
```



3\. 下記エラーが発生した場合、4以降の対応をする
> このエラーの内容は、「CUDA 11.8をインストールしようとしたが、その中のツール（nsight-systems-2022.4.2）がlibtinfo5っていう古いライブラリに依存してるが、だけどUbuntu 24.04にはもうlibtinfo5が無い」ということです。


```bash
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 nsight-systems-2022.4.2 : 依存: libtinfo5 しかし、インストールすることができません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
user@user-2412:~$ sudo apt-get -o Dpkg::Options::="--force-overwrite" install cuda-toolkit-11-8
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 nsight-systems-2022.4.2 : 依存: libtinfo5 しかし、インストールすることができません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
```


ということで、対策として「本当に必要な最小限パッケージだけを個別インストール」をします。
✅ cuda-compiler-11-8
✅ cuda-cudart-11-8
✅ cuda-libraries-11-8
✅ cuda-cupti-11-8
✅ cuda-nvcc-11-8

```bash
sudo apt-get install cuda-compiler-11-8 cuda-cudart-11-8 cuda-libraries-11-8 cuda-cupti-11-8 cuda-nvcc-11-8
```


4\. 先程インストールしたCUDAにパスを切り替える。
> これではまだ別のCUDAのバージョンが参照されてしまっているため。

```bash
nano ~/.bashrc
```

```bash
export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
```

```bash
source ~/.bashrc
```



## cuDNN SDK 8.6.0をインストールする
----------
#### cuDNN（CUDA Deep Neural Network library）とは
> AI学習用の「畳み込み層」「LSTM」「Pooling」みたいな処理をめちゃくちゃ高速化する専用ライブラリです。
TensorFlowやPyTorchみたいな機械学習フレームワークは、基本的に「cuDNN前提」で最適化されてるので、インストールしないと、学習速度や推論速度が数倍〜数十倍遅くなることもあるので、インストールすることを推奨されています。
----------

1\. [cuDNN バージョン](https://developer.nvidia.com/rdp/cudnn-archive)のサイトへアクセスし、インストールドライバをダウンロードする

:::note warn
警告
初めて使用する場合は、アカウント登録が必要になりますので、登録をしてください。
:::

> 先ほどインストールしたCUDA Toolkitのバージョンが「11.8」の為、公式に対応しているcuDNNのバージョンである「8.6系」である「cuDNN v8.6.0 (October 3rd, 2022), for CUDA 11.x」をダウンロードします。
ダウンロードファイル一覧が表示されます。
今回は、「CUDA 11.8＋cuDNN 8.6.0はUbuntu20.04」用に公式に最適化されてるので、「Local Installer for Ubuntu20.04 x86_64 (Deb)」をダウンロードして実行します。



```bash
# cuDNNの.debをインストール
sudo dpkg -i cudnn-local-repo-ubuntu2004-8.6.0.163_1.0-1_amd64.deb

# GPGキー登録
sudo cp /var/cudnn-local-repo-ubuntu2004-8.6.0.163/cudnn-*-keyring.gpg /usr/share/keyrings/

# apt更新
sudo apt-get update

# cuDNNパッケージインストール
sudo apt-get install libcudnn8 libcudnn8-dev libcudnn8-samples
```



2\. LD_LIBRARY_PATHを設定する

```bash
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
```


## python3.10の仮想環境を構築する
:::note warn
警告
TensorFlow 2.15は3.11までしか対応していない為。
:::


1\. python3.10をインストールする

```bash
sudo apt-get update
sudo apt-get install python3.10 python3.10-venv
```



```bash
sudo apt update
sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev git

curl https://pyenv.run | bash
```



```bash
sudo apt update
sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev git
```



2\. .bashrc という設定ファイルの一番下に、この設定を追加する。

```bash
nano ~/.bashrc

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"
eval "$(pyenv virtualenv-init -)"

source ~/.bashrc
```



3\. 仮想環境を作成

```bash
python -m venv .venv
```


4\. 仮想環境にアクセスする

```bash
source .venv/bin/activate
```


5\. TensorFlowをインストール

```bash
pip install tensorflow==2.15.0
```


以上でTensorFlowでGPUを動かす手順の説明を終わります。
これが皆さんの環境構築の手助けになることを祈ります。