環境構築の流れ
次のサイトを参考にして,各ソフトウェアのバージョンを確認しつつインストールする.
今回は下記の表にある tensorflow-2.17.0
を参考にして環境を整える.
今回の環境構築では主に次をインストールしていく.
- GPU ドライバ
- WSL
- CUDA
- cuDNN
- tensorflow
参考までに当方の環境を示す.
GPU ドライバのインストール
ドライバをインストールする前に,次のサイトで GPU が CUDA に対応しているかを確認する.
次のサイトで GPU のドライバをインストールする.
次のコマンドでドライバがインストールされているか否かを確認できる。
> nvidia-smi
Sun Oct 20 04:48:40 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.81 Driver Version: 560.81 CUDA Version: 12.6 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Driver-Model | 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 3060 WDDM | 00000000:01:00.0 On | N/A |
| 0% 40C P0 45W / 170W | 377MiB / 12288MiB | 1% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA GeForce RTX 3060 WDDM | 00000000:02:00.0 On | N/A |
| 0% 36C P8 16W / 170W | 33MiB / 12288MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
### 省略 ###
WSL のインストール
別途、記事をまとめているので、そちらを参考にされたい。
なお、Ubunutu には Python が標準でインストールされている.
奇しくもこのバージョンは tensorflow-2.17.0
に対応しているため,本記事ではWSL上に Python を新たにインストールすることはしない。
$ python3 --version
Python 3.12.3
念のために、WSL 上でも GPU ドライバが正常に動作しているかを nvidia-smi
コマンドで確認する。
$ nvidia-smi
Sun Oct 20 04:48:34 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.31.01 Driver Version: 560.81 CUDA Version: 12.6 |
|-----------------------------------------+------------------------+----------------------+
| 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 3060 On | 00000000:01:00.0 On | N/A |
| 0% 38C P8 21W / 170W | 351MiB / 12288MiB | 4% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA GeForce RTX 3060 On | 00000000:02:00.0 On | N/A |
| 0% 36C P8 16W / 170W | 33MiB / 12288MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
### 省略 ###
CUDA ツールキットのインストール
次のサイトから,バージョンを確認しつつ CUDA をインストールする.
本記事では CUDA Toolkit 12.3.0
をインストールする.
上記のサイトで自身の環境にあうように各項目を選択し,サイト下部に記されたコマンドを実行する.
例として,当方の選択内容およびインストールのコマンドを示す.
項目 | 選択内容 |
---|---|
Operating System | Linux |
Architecture | x86_64 |
Distribution | WSL-Ubuntu |
Version | 2.0 |
Installer Type | deb_local |
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.3.2/local_installers/cuda-repo-wsl-ubuntu-12-3-local_12.3.2-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-3-local_12.3.2-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-3-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-3
次のコマンドで,インストールした CUDA のバージョンを確認できる。
nvcc --version
トラブルシューティング1: CUDA のインストールに失敗する
エラー内容
当方では CUDA のインストールコマンドにある sudo apt-get -y install cuda-toolkit-12-3
コマンドを実行すると,次が出力された.
The following packages have unmet dependencies:
nsight-systems-2023.3.3 : Depends: libtinfo5 but it is not installable
E: Unable to correct problems, you have held broken packages.
これは、nsight-systems-2023.3.3
パッケージをインストールする際に、その依存パッケージである libtinfo5
のインストールに問題が発生したことを意味している。
解決方法
解決にあたり、下記のサイトが参考になった.
まずは、/etc/apt/sources.list
をテキストエディタで開く。これは、APT(Advanced Package Tool)が使用するパッケージリポジトリの設定ファイルである。この設定ファイルは、システムがどこからソフトウェアパッケージをダウンロードするかを指定する。
sudo nano /etc/apt/sources.list
/etc/apt/sources.list
の最終行に下記の内容を追記する.これにより、 Ubuntu 23.04(Lunar Lobster)
の universe
リポジトリを参照することで、libtinfo5
をインストールできる。
deb http://archive.ubuntu.com/ubuntu/ lunar universe
参考までに nano エディタの操作方法を次に羅列する.
- ペースト: 右クリック
- 保存して終了する
-
Ctrl + X
: Exitする - 「Save modified buffer?」と表示されるので
Y
(yes)を押す - Enterを押す
-
次のコマンドで更新内容の確認およびインストールをする.
sudo apt update
sudo apt upgrade
トラブルシューティング2: CUDA のバージョンが確認できない
エラー内容
トラブルシューティング1 の解決後、当方ではさらに nvcc --version
コマンドの実行にも失敗した。
$ nvcc --version
Command 'nvcc' not found, but can be installed with:
sudo apt install nvidia-cuda-toolkit
WSLのユーザ名@マシン名:/mnt/c/Users/Windowsのユーザ名$ cat /usr/local/cuda/version.txt
解決策1
次のコマンドを実行する
$ sudo apt install nvidia-cuda-toolkit
もう一度,nvcc --version
コマンドを実行すると,成功した.
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Jan__6_16:45:21_PST_2023
Cuda compilation tools, release 12.0, V12.0.140
Build cuda_12.0.r12.0/compiler.32267302_0
解決策2
nvcc (NVIDIA CUDA Compiler) のパスを通すことでコマンドが実行できるようになる。
まずは /usr/local
ディレクトリに cuda
,cuda-12.3
フォルダが存在するかを確認する.
$ ls /usr/local
bin cuda cuda-12 cuda-12.3 etc games include lib man sbin share src
次のコマンドで nvcc のパスを確認する。
find /usr/local -name nvcc
上記のコマンド実行で出力されたディレクトリを環境変数に設定する。
echo 'export PATH=出力されたディレクトリ/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=出力されたディレクトリ/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
次のコマンドで、変更を反映する。
source ~/.bashrc
参考として、以下に一連の操作の例を示す。
$ # パスの確認
$ find /usr/local -name nvcc
/usr/local/cuda-12.3/bin/nvcc
$ # 環境変数の設定
$ echo 'export PATH=/usr/local/cuda-12.3/bin:$PATH' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.3/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ # 設定の反映
$ source ~/.bashrc
再度、nvcc --version
の実行に問題が無いかを確認する。次に実行例を示す。
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Wed_Nov_22_10:17:15_PST_2023
Cuda compilation tools, release 12.3, V12.3.107
Build cuda_12.3.r12.3/compiler.33567101_0
cuDNN のインストール
次のサイトから cuDNN をダウンロードする.
今回は tensorflow-2.17.0
に対応している cuDNN v8.9.7 (December 5th, 2023), for CUDA 12.x > Local Installer for Ubuntu22.04 x86_64 (Deb)
を選択する.この場合,cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb
というパッケージファイルがダウンロードされる.
次のコマンドで,さきほどダウンロードしたパッケージファイルから,cuDNN をインストールする.
/mnt/c/Users/ユーザ名/Downloads/cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb
はご自身でダウンロードしたディレクトリおよびファイル名に変更されたい.
sudo dpkg -i /mnt/c/Users/ユーザ名/Downloads/cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
sudo apt update
sudo apt -y install libcudnn8 libcudnn8-dev libcudnn8-samples
次のコマンドでインストールした cuDNN のバージョンを確認できる.
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
次に実行例を示す。
$ cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 9
#define CUDNN_PATCHLEVEL 7
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
/* cannot use constexpr here since this is a C-only file */
VSCodeの設定
拡張機能の WSL をインストールする.
Ctrl + Shift + P
でコマンドパレットを開いて,「WSL: Open Folder in WSL...」を選択する.
VSCodeで開きたいディレクトリを選択する.
VSCodeが再起度する.画面左下に「WSL: Ubuntu」の記載があればよい.
WSL ではなく Windows でプログラムを実行したい場合は,
Ctrl + Shift + P
でコマンドパレットを開いて,
「Remote-WSL: Close Remote Connection」を選択する.
Tensorflow のインストール
以下のコマンドは WSL 下で実行されたい.
仮想環境の用意
Python の仮想環境を利用したい場合は,python3.12-venv
をインストールする.
これにより,Python ライブラリの汚染を防ぐことができる.
sudo apt install python3.12-venv
次のコマンドで仮想環境の構築と有効化を実行する.
# .venv 仮想環境の構築
python3 -m venv .venv
# 仮想環境の有効化
. .venv/bin/activate
以降は2つ目のコマンドを実行するだけでよい.
. .venv/bin/activate
なお,仮想環境を無効化したい場合は次を実行すればよい.
deactivate
インストール
次のコマンドで Tensorflow 2.17.0 をインストールする.
pip install tensorflow==2.17.0
動作確認
プログラム
動作確認のために,Tensorflow から GPU に接続するプログラムを作成する.
import tensorflow as tf
from tensorflow.python.client import device_lib
# GPUが利用可能か確認
gpus = tf.config.list_physical_devices('GPU')
if gpus:
print(f"利用可能なGPUの個数: {len(gpus)}")
print(f">> {gpus}")
else:
print("No GPU available")
# CUDAとcuDNNのバージョンを表示
cuda_version = tf.sysconfig.get_compile_flags()
cudnn_version = tf.sysconfig.get_link_flags()
print("CUDA Version:", cuda_version)
print("cuDNN Version:", cudnn_version)
# GPUデバイスの情報を表示
for device in gpus:
print(device)
実行結果
仮想環境を構築している場合は,有効にする.
. .venv/bin/activate
次のコマンドでプログラムを実行できる.
出力を参考にされたい.
$ python3 test.py
2024-10-19 02:37:47.709760: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:485] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered
2024-10-19 02:37:48.287631: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:8454] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered
2024-10-19 02:37:48.452555: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1452] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
2024-10-19 02:37:49.668576: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
2024-10-19 02:37:56.686536: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1729273086.503500 20765 cuda_executor.cc:1001] could not open file to read NUMA node: /sys/bus/pci/devices/0000:01:00.0/numa_node
Your kernel may have been built without NUMA support.
I0000 00:00:1729273086.503582 20765 cuda_executor.cc:1001] could not open file to read NUMA node: /sys/bus/pci/devices/0000:02:00.0/numa_node
Your kernel may have been built without NUMA support.
I0000 00:00:1729273086.522308 20765 cuda_executor.cc:1001] could not open file to read NUMA node: /sys/bus/pci/devices/0000:01:00.0/numa_node
Your kernel may have been built without NUMA support.
I0000 00:00:1729273086.522373 20765 cuda_executor.cc:1001] could not open file to read NUMA node: /sys/bus/pci/devices/0000:02:00.0/numa_node
Your kernel may have been built without NUMA support.
I0000 00:00:1729273086.522415 20765 cuda_executor.cc:1001] could not open file to read NUMA node: /sys/bus/pci/devices/0000:01:00.0/numa_node
Your kernel may have been built without NUMA support.
I0000 00:00:1729273086.525424 20765 cuda_executor.cc:1001] could not open file to read NUMA node: /sys/bus/pci/devices/0000:02:00.0/numa_node
Your kernel may have been built without NUMA support.
利用可能なGPUの個数: 2
>> [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU')]
CUDA Version: ['-I/mnt/c/Users/省略/.venv/lib/python3.12/site-packages/tensorflow/include', '-D_GLIBCXX_USE_CXX11_ABI=1', '--std=c++17', '-DEIGEN_MAX_ALIGN_BYTES=64']
cuDNN Version: ['-L/mnt/c/Users/省略/.venv/lib/python3.12/site-packages/tensorflow', '-l:libtensorflow_framework.so.2']
PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')
PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU')
参考