NVIDIA ドライバ,NVIDIA CUDA ツールキット 11.8, NVIDIA cuDNN 8, Python 開発環境,TensorFlow のインストール(Ubuntu 上)

目次
  1. 前準備
  2. NVIDIA ドライバ,NVIDIA CUDA ツールキット 11.8, NVIDIA cuDNN 8 のインストール(Ubuntu 上)
  3. Python3 開発用ファイル,pip, setuptools, venv のインストール,Python 開発環境,Python コンソール(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, spyder)のインストール(Ubuntu 上)
  4. TensorFlow 2.14,Keras,MatplotLib, Python 用 opencv-python のインストール(Ubuntu 上)
  5. TensorFlow のプログラム例

対象とする Ubuntu のバージョン

NVIDIA CUDA ツールキット 11.8 の Linux 用パッケージレポジトリは,Ubuntu 22.04Ubuntu 20.04 向けに提供されている.Ubuntu 24.04 では CUDA 12 系のパッケージレポジトリを使用する.

サイト内の主な Ubuntu 関連ページ

関連する外部ページ

前準備

Ubuntu のシステム更新

Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する.これは,パッケージ情報を最新の状態に保ち,インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである.

Ubuntu のインストールはこちらの別ページで説明する.
# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt -y full-upgrade
# カーネルが更新された場合は再起動する
# sudo shutdown -r now

NVIDIA ドライバ,NVIDIA CUDA ツールキット 11.8, NVIDIA cuDNN 8 のインストール(Ubuntu 上)

GPUとは

GPU は,グラフィックス・プロセッシング・ユニット(Graphics Processing Unit)の略である.その並列計算能力から,3次元コンピュータグラフィックス,3次元ゲーム,動画編集,科学計算,ディープラーニングなど,並列処理が必要な分野で利用されている.

NVIDIA ドライバ

NVIDIA ドライバは,NVIDIA 社製の GPU を動作させるのに必要なドライバである.Ubuntu では,後述の ubuntu-drivers コマンドでインストールできる.公式サイトからダウンロードすることもでき,そのときは,使用しているオペレーティングシステムと GPU に適したものを選ぶ.

関連する外部ページNVIDIA ドライバのダウンロードの公式ページ: https://www.nvidia.com/Download/index.aspx

【インストール手順の詳細説明】

NVIDIA CUDA ツールキット

NVIDIA CUDA ツールキット は,NVIDIA 社が提供する GPU 用のツールキットである.GPU を用いた演算のプログラム作成や動作のための各種機能を備えている.ディープラーニングでも利用されている.

NVIDIA CUDA ツールキットの動作に必要なもの

関連する外部ページ

NVIDIA cuDNN

NVIDIA cuDNN は,NVIDIA CUDA ツールキット上で動作するディープラーニング用ライブラリである.畳み込みニューラルネットワーク (CNN) やリカレントニューラルネットワーク (RNN) などの学習と推論を高速化する.

NVIDIA cuDNN の動作に必要なもの

関連する外部ページ

バージョンの組み合わせについての要点

NVIDIA ドライバのインストール(Ubuntu 上)

  1. NVIDIA グラフィックス・ボードの確認

    CUDA 対応の GPU であるかを確認のため, 端末で,次のコマンドを実行する.

    (表示が空になるときは,NVIDIA のグラフィックス・カードが無い可能性がある).

    lspci | grep -i nvidia | grep VGA
    
  2. 旧バージョンの NVIDIA ドライバとNVIDIA CUDA ツールキットのアンインストール

    NVIDIA ドライバ,NVIDIA CUDA ツールキットがインストールされていた場合には,アンインストールする. 端末で,次のコマンドを実行する.

    dpkg -l | grep cuda
    cd /tmp
    sudo apt --purge remove -y nvidia-*
    sudo apt --purge remove -y cuda-*
    sudo apt autoremove -y
    
  3. カーネルヘッダーと,カーネル開発用パッケージのインストール

    端末で,次のコマンドを実行する.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install linux-headers-$(uname -r)
    
  4. NVIDIA ドライバのインストール操作

    「sudo ubuntu-drivers install」を用いて NVIDIA ドライバをインストールする.オープンソースの nouveau ドライバの無効化は,NVIDIA ドライバのパッケージが自動で行う.

    端末で,次のコマンドを実行する.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y full-upgrade
    # インストール可能なドライバの一覧を表示(recommended が付いたものが推奨版)
    ubuntu-drivers devices
    sudo ubuntu-drivers install
    sudo update-initramfs -u
    
  5. Ubuntu システムの再起動

    グラフィックスドライバが入れ替わったので,Ubuntu システムを再起動する.

    端末で,次のコマンドを実行する.

    sudo /sbin/shutdown -r now
    
  6. NVIDIA ドライバの確認

    システムの再起動後,端末で,次のコマンドを実行し,ドライバ等を確認する.

    先頭の「Driver Version」のところに,ドライバのバージョンが表示される.CUDA 11.8 を使用するには 520.61.05 以上であること.

    同じ行に表示される「CUDA Version」は,そのドライバが対応する CUDA の最大バージョンであり,インストール済みの NVIDIA CUDA ツールキットのバージョンではない.

    nvidia-smi
    

NVIDIA CUDA ツールキット 11.8 のインストール

  1. Ubuntu のバージョンを確認

    端末で,次のコマンドを実行する.

    uname -m
    lsb_release -sc
    cat /etc/*release
    

    Ubuntu のバージョンは,VERSION_ID の行で確認できる.

  2. NVIDIA CUDA パッケージレポジトリを,Ubuntu システムに追加

    レポジトリの追加と GPG 公開鍵の登録は,NVIDIA が配布する cuda-keyring パッケージで行う.以前使われていた「apt-key adv」による鍵の登録は,apt-key コマンドの廃止に伴い使用しない.

    端末で,次のように操作する.

    • Ubuntu 22.04 の場合
      cd /tmp
      wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
      sudo dpkg -i cuda-keyring_1.1-1_all.deb
      sudo apt update
      
    • Ubuntu 20.04 の場合
      cd /tmp
      wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.1-1_all.deb
      sudo dpkg -i cuda-keyring_1.1-1_all.deb
      sudo apt update
      
    cuda-keyring パッケージのファイル名(バージョン番号の部分)は更新されることがある.次の URL でファイル名を確認できる.
  3. インストールできる CUDA ツールキットのバージョンの確認
    apt-cache search cuda-toolkit-11
    
  4. NVIDIA CUDA ツールキット 11.8インストール

    パッケージ名に cuda-toolkit-11-8 を指定する.「cuda-11-8」を指定した場合は NVIDIA ドライバも同時にインストールされ,先にインストールしたドライバが置き換わることがある.

    端末で,次のコマンドを実行する.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install cuda-toolkit-11-8
    
  5. NVIDIA CUDA ツールキットにパスを通す設定

    端末で,次のコマンドを実行する.

    export CUDA_PATH=/usr/local/cuda-11.8
    echo 'export CUDA_PATH=/usr/local/cuda-11.8' >> ${HOME}/.bashrc
    export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:${LD_LIBRARY_PATH}
    echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:${LD_LIBRARY_PATH}' >> ${HOME}/.bashrc
    export PATH=/usr/local/cuda-11.8/bin:${PATH}
    echo 'export PATH=/usr/local/cuda-11.8/bin:${PATH}' >> ${HOME}/.bashrc
    
  6. インストールできたことの確認のため,CUDA ツールキットのバージョンを確認

    端末で,次のコマンドを実行する.「release 11.8」と表示されることを確認する.

    nvcc -V
    cat /usr/local/cuda-11.8/version.json
    

NVIDIA cuDNN 8 のインストール

NVIDIA CUDA パッケージレポジトリには,CUDA 11 用と CUDA 12 用の cuDNN 8 が登録されている.CUDA 11.8 用のバージョンを明示して指定する

  1. インストールできる cuDNN のバージョンの確認

    端末で,次のコマンドを実行する. 「+cuda11.8」が付いたバージョン番号(例: 8.9.7.29-1+cuda11.8)を確認する.

    apt list -a libcudnn8
    apt list -a libcudnn8-dev
    
  2. いま確認したバージョンを指定して,NVIDIA cuDNN のインストール

    端末で,次のコマンドを実行する. apt-mark hold は,システム更新の際に CUDA 12 用の cuDNN へ自動更新されることを防ぐためである.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install libcudnn8=8.9.7.29-1+cuda11.8 libcudnn8-dev=8.9.7.29-1+cuda11.8
    sudo apt-mark hold libcudnn8 libcudnn8-dev
    
  3. インストールされたパッケージの確認
    dpkg -l | grep cudnn
    

nvcc の動作確認

nvcc の動作確認のため,次のプログラム(SAXPY の計算を行う CUDA プログラム)を使用する.出典: https://developer.nvidia.com/blog/easy-introduction-cuda-c-and-c/

  1. エディタを開く(ここではエディタとして,「nano」を使っている).
    nano hello.cu
    
  2. 次のプログラムを記入し,ファイルを保存.

    ファイル hello.cu ができる.

    #include <stdio.h>
    
    __global__ void saxpy(int n, float a, float *x, float *y)
    {
      int i = blockIdx.x * blockDim.x + threadIdx.x;
      if (i < n) y[i] = a * x[i] + y[i];
    }
    
    int main(void)
    {
      int N = 1 << 20;
      float *x, *y, *d_x, *d_y;
      x = (float*)malloc(N * sizeof(float));
      y = (float*)malloc(N * sizeof(float));
    
      cudaMalloc(&d_x, N * sizeof(float));
      cudaMalloc(&d_y, N * sizeof(float));
    
      for (int i = 0; i < N; i++) {
        x[i] = 1.0f;
        y[i] = 2.0f;
      }
    
      cudaMemcpy(d_x, x, N * sizeof(float), cudaMemcpyHostToDevice);
      cudaMemcpy(d_y, y, N * sizeof(float), cudaMemcpyHostToDevice);
    
      saxpy<<<(N + 255) / 256, 256>>>(N, 2.0f, d_x, d_y);
    
      cudaMemcpy(y, d_y, N * sizeof(float), cudaMemcpyDeviceToHost);
    
      float maxError = 0.0f;
      for (int i = 0; i < N; i++)
        maxError = fmax(maxError, fabs(y[i] - 4.0f));
      printf("Max error: %f\n", maxError);
    
      cudaFree(d_x);
      cudaFree(d_y);
      free(x);
      free(y);
      return 0;
    }
    
  3. ビルドと実行.

    「nvcc hello.cu」で a.out というファイルができる. 実行して「Max error: 0.000000」と表示されればOK.

    rm -f a.out
    nvcc hello.cu
    
    ./a.out
    

Python3 開発用ファイル,pip, setuptools, venv のインストール,Python 開発環境,Python コンソール(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, spyder)のインストール(Ubuntu 上)

Python のインストールは行わない(Ubuntu のシステム Python を用いる.)

Python, pip, Python 開発環境,Python コンソールのコマンドでの起動のまとめ.

Python3 開発用ファイル,pip, setuptools, venv のインストール

Python3 開発用ファイル,pip, setuptools, venv のインストールのために,端末で,次のコマンドを実行する.

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install python-is-python3 python3-dev python3-pip python3-setuptools python3-venv build-essential
Ubuntu 23.04 以降での pip の扱い

Ubuntu 23.04 以降では,システム Python に対する pip でのインストールが既定で禁止されており(PEP 668),「externally-managed-environment」というエラーになる.その場合は,次のようにvenv による仮想環境を作成し,その中で pip を使用する.

python3 -m venv ${HOME}/venv
source ${HOME}/venv/bin/activate
pip install -U pip setuptools

Python 開発環境(JupyterLab, Jupyter Qt Console, spyder)

  1. Python 開発環境,Python コンソール(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, spyder)のインストール

    端末で,次のコマンドを実行する.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install jupyter jupyter-qtconsole spyder3
    sudo pip3 install -U jupyterlab jupyter-console jupytext
    
  2. Ubuntu システムの python3 のバージョンの確認
    python3 --version
    
  3. Jupyter Qt Console の起動チェック

    まず,numpy, matplotlib のインストールのため, 端末で,次のコマンドを実行する.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install python3-numpy python3-matplotlib
    

    端末で,次のコマンドを実行する. Jupyter Qt Console が開けば OK.

    jupyter qtconsole
    
  4. 確認のため,Jupyter Qt Console で,次の Python プログラムを実行してみる.

    次のプログラムは,NumPy と Matplotlib を使用して,0 から 6 までの範囲の sin 関数のグラフを描画する.

    import numpy as np
    %matplotlib inline
    import matplotlib.pyplot as plt
    
    x = np.linspace(0, 6, 100)
    plt.style.use('default')
    plt.plot(x, np.sin(x))
    
  5. Jupyter Lab の起動チェック

    端末で,次のコマンドを実行する. Web ブラウザで Jupyter Lab が開けば OK.

    jupyter lab
    
  6. 確認のため,Jupyter Lab で,次の Python プログラムを実行してみる.

    そのために「Notebook」の下の「Python 3」をクリックし,次のプログラムを入れて実行する.

    import numpy as np
    %matplotlib inline
    import matplotlib.pyplot as plt
    
    x = np.linspace(0, 6, 100)
    plt.style.use('default')
    plt.plot(x, np.sin(x))
    
  7. ノートブックの保存のときに,.ipynb ファイルと同時に .py ファイルも保存されるように設定する(この設定を行わないときは .ipynb ファイルのみが保存される).

    jupytext の機能を使う.対象のノートブックを指定して,端末で,次のコマンドを実行する.

    jupytext --set-formats ipynb,py <ノートブックのファイル名>.ipynb
    

    すべてのノートブックに対して既定で有効にするときは,設定ファイルを生成し,設定を追記する.

    jupyter lab --generate-config
    echo 'c.ContentsManager.formats = "ipynb,py"' >> ${HOME}/.jupyter/jupyter_lab_config.py
    

numpy, scikit-learn のインストール

インストールするには, 端末で,次のコマンドを実行する.

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install python3-numpy python3-sklearn

numpy の動作確認のため Python プログラムの実行

Ubuntu では, Python プログラムを動かすために, 「python3」コマンドを使う. Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Spyder, PyCharm など)も便利である. Python 開発環境の説明: 別ページ »にまとめ
python3
import numpy as np
print(np.sin(0))
exit()

Python の数値演算等の性能確認

Python プログラムの実行

Ubuntu では, Python プログラムを動かすために, 「python3」コマンドを使う. Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Spyder, PyCharm など)も便利である. Python 開発環境の説明: 別ページ »にまとめ
次のプログラムは,NumPy と scikit-learn を使用して,行列計算とデータ分析を行う.
  1. 2000x2000 の乱数行列 X と Y を生成し,それらの行列積を計算する.
  2. scikit-learn の PCA を使用して,X の主成分分析を行い,2 次元に次元削減する.
  3. NumPy の svd 関数を使用して,X の特異値分解を行う.
  4. scikit-learn の KMeans を使用して,X に対して 10 クラスタの k-means クラスタリングを行う.

各操作の実行時間を測定し,結果を出力するプログラムである.実行時間は,CPU の性能や BLAS ライブラリの構成により異なる.

import time
import numpy
import numpy.linalg
import sklearn.decomposition
import sklearn.cluster
X = numpy.random.rand(2000, 2000)
Y = numpy.random.rand(2000, 2000)
# 行列の積
a = time.time(); Z = numpy.dot(X, Y); print(time.time() - a)
# 主成分分析
pca = sklearn.decomposition.PCA(n_components = 2)
a = time.time(); pca.fit(X); X_pca = pca.transform(X); print(time.time() - a)
# SVD
a = time.time(); U, S, V = numpy.linalg.svd(X); print(time.time() - a)
# k-means
a = time.time()
kmeans_model = sklearn.cluster.KMeans(n_clusters=10, random_state=10).fit(X)
labels = kmeans_model.labels_
print(time.time() - a)

TensorFlow 2.14,Keras,MatplotLib, Python 用 opencv-python のインストール(Ubuntu 上)

設定の要点

環境変数 TF_FORCE_GPU_ALLOW_GROWTH の設定: true

TensorFlow のバージョンについて

NVIDIA CUDA ツールキット 11.8, NVIDIA cuDNN 8 の組み合わせで GPU を利用できる TensorFlow は 2.12 から 2.14 である(TensorFlow 2.15 以降は CUDA 12 系を使用する).本ページでは TensorFlow 2.14.1 をインストールする.

Keras は,TensorFlow 2.14 に対応する Keras 2.14 が TensorFlow の依存パッケージとして同時にインストールされる.「pip install keras」を実行すると Keras 3 に更新され,TensorFlow 2.14 と組み合わせて動作しないため,実行しない.

TensorFlow 2.14,Keras,MatplotLib, Python 用 opencv-python のインストール

  1. 端末を開く
  2. 既存パッケージのアンインストール操作
    バージョンの競合を避けるために,次の操作でアンインストールを行っておく.
    sudo apt -y remove python3-keras
    sudo pip3 uninstall -y tensorflow tensorflow-cpu tensorflow-gpu tensorflow-intel tensorflow-text tensorflow-estimator tf-models-official tf_slim tensorflow_datasets tensorflow-hub keras keras-tuner
    
  3. TensorFlow の前提パッケージのインストール

    端末で,次のコマンドを実行する.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install python3-six python3-wheel python3-numpy python3-grpcio python3-protobuf python3-termcolor python3-typing-extensions python3-h5py python3-markdown python3-werkzeug python3-requests-oauthlib python3-rsa python3-cachetools python3-google-auth
    
  4. TensorFlow, numpy, pillow, pydot, matplotlib, opencv-python のインストール

    インストールするには, 端末で,次のコマンドを実行する.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install python3-numpy python3-pil python3-pydot python3-matplotlib graphviz
    sudo apt -y install libopencv-dev libopencv-core-dev python3-opencv libopencv-contrib-dev opencv-data
    sudo pip3 install -U "tensorflow==2.14.1" tf_slim tensorflow_datasets tensorflow-hub keras-tuner
    sudo pip3 install git+https://github.com/tensorflow/docs
    sudo pip3 install git+https://github.com/tensorflow/examples.git
    
  5. TensorFlow のバージョン確認
    「2.14.1」のようにバージョン番号が表示されれば OK.
    python3 -c "import tensorflow as tf; print( tf.__version__ )"
    
  6. このあと,TensorFlow から GPU が認識できているかの確認

    端末で,次のコマンドを実行する.

    python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
    

    実行結果が「[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]」のようになれば,GPU が認識できている.空のリスト「[]」が表示されるときは,GPU が認識できていない.そのときは,nvidia-smi でドライバの動作を確認し,libcudnn8 のバージョンが「+cuda11.8」であることを確認する.

  7. 環境変数 TF_FORCE_GPU_ALLOW_GROWTH の設定

    この環境変数を true に設定すると,TensorFlow は GPU メモリを起動時に一括確保せず,必要に応じて確保するようになる.同一 GPU で複数のプログラムを動かすときのメモリ不足を避けられる.

    環境変数の名前
    TF_FORCE_GPU_ALLOW_GROWTHtrue
    

    端末で,次のコマンドを実行する.

    export TF_FORCE_GPU_ALLOW_GROWTH=true
    echo 'export TF_FORCE_GPU_ALLOW_GROWTH=true' >> ${HOME}/.bashrc
    

TensorFlow, Keras, VGG16, InceptionV3, ImageNet による画像分類を試してみる

  1. 前準備として h5py, pillow のインストール
    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install python3-h5py python3-pillow
    
  2. 画像の準備

    10.png のようなファイル名で保存しておく

  3. Python プログラムの実行
    cd <画像を置いたディレクトリ>
    python3
    
  4. VGG16, ImageNet による学習済みの重みデータによる画像分類を試してみる

    次のプログラムをコピー&ペーストする.

    Keras の公式ドキュメントで公開されているものを書き換えて使用.

    「'10.png'」のところは,実際に使用する画像ファイル名に書き換えること.

    VGG16 の入力画像サイズは 224x224 である.

    Python プログラムの実行

    Ubuntu では, Python プログラムを動かすために, 「python3」コマンドを使う. Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Spyder, PyCharm など)も便利である. Python 開発環境の説明: 別ページ »にまとめ
    import numpy as np
    import tensorflow as tf
    from tensorflow.keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
    
    m = VGG16(weights='imagenet')
    
    img_path = '10.png'
    img = tf.keras.utils.load_img(img_path, target_size=(224, 224))
    x = tf.keras.utils.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    
    preds = m.predict(x)
    
    print('Predicted:')
    for p in decode_predictions(preds, top=5)[0]:
        print("Score {}, Label {}".format(p[2], p[1]))
    

    python3 の終了は「exit()」

  5. InceptionV3, ImageNet による学習済みの重みデータによる画像分類を試してみる

    次のプログラムをコピー&ペーストする.

    Keras の公式ドキュメントで公開されているものを書き換えて使用.

    「'10.png'」のところは,実際に使用する画像ファイル名に書き換えること.

    InceptionV3 の入力画像サイズは 299x299 である.

    Python プログラムの実行

    Ubuntu では, Python プログラムを動かすために, 「python3」コマンドを使う. Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Spyder, PyCharm など)も便利である. Python 開発環境の説明: 別ページ »にまとめ
    import numpy as np
    import tensorflow as tf
    from tensorflow.keras.applications.inception_v3 import InceptionV3, preprocess_input, decode_predictions
    
    m = InceptionV3(weights='imagenet')
    
    img_path = '10.png'
    img = tf.keras.utils.load_img(img_path, target_size=(299, 299))
    x = tf.keras.utils.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    
    preds = m.predict(x)
    
    print('Predicted:')
    for p in decode_predictions(preds, top=5)[0]:
        print("Score {}, Label {}".format(p[2], p[1]))
    

    python3 の終了は「exit()」

TensorFlow のプログラム例

TensorFlow がインストールできたかを確認する.

Python プログラムの実行

Ubuntu では, Python プログラムを動かすために, 「python3」コマンドを使う. Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Spyder, PyCharm など)も便利である.

Python のまとめ: 別ページ »にまとめ

python3