機械学習のための GPU 関連ライブラリの設定 (venv 利用)
機械学習のための GPU 関連ライブラリの設定
構成:
- CUDA : 12.8
- cuDNN : 9.8
- python: 3.11
- フレームワーク : ユーザ依存
CUDA Toolkit のインストール
https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/index.html#debian-installation, https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#debian, の手順を実行する.
デバイスの確認
$ lspci | grep -i nvidia
contrib なパッケージ群もインストール対象にする
$ sudo add-apt-repository contrib
cuda-keyring パッケージのインストール
$ wget https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/cuda-keyring_1.1-1_all.deb $ sudo -s # apt install ./cuda-keyring_1.1-1_all.deb
cuda driver
# apt-get update # apt-get install linux-headers-$(uname -r) # apt-get -V install nvidia-open (A40, A100 の場合) # apt-get -V install cuda-drivers (V100S の場合)
cuda toolkit
# apt-get update # apt-get install cuda-toolkit
再起動
# reboot
PATH と MANPATH の追加. /etc/profile にも登録しておく.
# vi /etc/profile (末尾に追加) export PATH="/usr/local/cuda/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
確認
$ nvidia-smi $ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2025 NVIDIA Corporation Built on Fri_Feb_21_20:23:50_PST_2025 Cuda compilation tools, release 12.8, V12.8.93 Build cuda_12.8.r12.8/compiler.35583870_0
cuDNN のインストール
パッケージインストール
# apt install cudnn9-cuda-12 # apt install libcudnn9-samples
テスト
$ sudo apt-get install libfreeimage-dev $ cp -r /usr/src/cudnn_samples_v9 ./ $ cd cudnn_samples_v9/mnistCUDNN/ $ make clean $ make $ ./mnistCUDNN There are 2 CUDA capable devices on your machine : device 0 : sms 84 Capabilities 8.6, SmClock 1740.0 Mhz, MemSize (Mb) 45515, MemClock 7251.0 Mhz, Ecc=1, boardGroupID=0 device 1 : sms 84 Capabilities 8.6, SmClock 1740.0 Mhz, MemSize (Mb) 45515, MemClock 7251.0 Mhz, Ecc=1, boardGroupID=1 Using device 0 ....(略).... Result of classification: 1 3 5 Test passed!
venv による仮想環境の構築
システムには python3.11 がインストールされている.
Python のライブラリ環境を整えるのは利用者に任せたいので, ここでは venv を使用することにする.
# apt-get install python3-venv python3-dev python3-pip python3-django-xmlrpc
python3 をデフォルトにする.
# update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && alias pip=pip3
動作テスト: pytorch
プロジェクトディレクトリを作成.
$ mkdir venv-pytorch $ cd venv-pytorch $ python -m venv venv
アクティベート
$ source venv/bin/activate (venv) $ (venv) $ python -V Python 3.11.2
pip でパッケージのインストール.
(venv) $ pip install -U setuptools pip (venv) $ pip install wheel (venv) $ pip install torch (venv) $ pip install torchvision
pip list でパッケージの一覧を得ることができる.
(venv) $ pip list
GPU が認識できるかのテスト. GPU が見えている.
(venv) $ python Python 3.7.3 (default, Jul 25 2020, 13:03:44) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import torch >>> torch.cuda.is_available() True
サンプルの実行. 実行中に別の端末で nvidia-smi を実行すると GPU が使われている (利用メモリ量増加, 電力消費増加, プロセス表示) ことが把握できる.
(venv) $ wget https://raw.githubusercontent.com/pytorch/examples/master/mnist/main.py (venv) $ python main.py
ディアクティベート
(venv) $ deactivate
動作テスト: tensorflow + keras
プロジェクトの作成.
$ mkdir venv-tensorflow2 $ cd venv-tensorflow2 $ python -m venv venv
アクティベート
$ source venv/bin/activate (venv) $ (venv) $ python -V Python 3.11.2
pip でパッケージの tensorflow をインストール.
(venv) $ pip install -U setuptools pip (venv) $ pip install wheel (venv) $ pip install tensorflow (venv) $ pip install keras
pip list でパッケージの一覧を得ることができる.
(venv) $ pip list
テスト. GPU が見えるか確認をする.
(venv) $ python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))" (venv) $ python -c "import tensorflow as tf; tf.config.list_physical_devices()" ...... .... Adding visible gpu devices: 0, 1, 2 (venv) $ python -c "import keras as ks"
計算の実行. https://www.tensorflow.org/tutorials/ から適当なプログラムをコピペしてくる. 実行時に別のターミナルで nvidia-smi を実行すると, GPU でプロセスが動いていることが確認できる.
(venv) $ vi test.py import tensorflow as tf mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10) ]) predictions = model(x_train[:1]).numpy() predictions tf.nn.softmax(predictions).numpy() loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) loss_fn(y_train[:1], predictions).numpy() model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy']) model.fit(x_train, y_train, epochs=5) model.evaluate(x_test, y_test, verbose=2) probability_model = tf.keras.Sequential([ model, tf.keras.layers.Softmax() ]) probability_model(x_test[:5])
実行
(venv) $ python test.py
使う GPU を固定する場合は以下のように環境変数を設定して実行する.
(venv) $ CUDA_VISIBLE_DEVICES=1 python test.py
ディアクティベート
(venv) $ deactivate
動作テスト: numba
プロジェクトディレクトリを作成.
$ mkdir venv-numba $ cd venv-numba $ python -m venv venv
アクティベート
$ source venv/bin/activate (venv) $ (venv) $ python -V Python 3.11.2
pip でパッケージのインストール.
(venv) $ pip install -U setuptools pip (venv) $ pip install numba
pip list でパッケージの一覧を得ることができる.
(venv) $ pip list
GPU が見えるか確認
$ python Python 3.7.3 (default, Jul 25 2020, 13:03:44) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from numba import cuda >>> cuda.detect() Found 3 CUDA devices id 0 b'Tesla V100S-PCIE-32GB' [SUPPORTED] compute capability: 7.0 pci device id: 0 pci bus id: 59 id 1 b'Tesla V100S-PCIE-32GB' [SUPPORTED] compute capability: 7.0 pci device id: 0 pci bus id: 134 id 2 b'Tesla V100S-PCIE-32GB' [SUPPORTED] compute capability: 7.0 pci device id: 0 pci bus id: 175 Summary: 3/3 devices are supported True