機械学習のための 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