0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CUDAバージョンの解決

Last updated at Posted at 2023-10-30

Note:
pytorchはCUDAとcuDNNを同梱したビルド済みバイナリで配布されているため、CUDAのメジャーバージョンが同一またはより新しければ使えます。
tensorflowは同梱していないため、現在のnvidia-driverでパッケージが要求するCUDAが使えるかの確認後、
更に下記コンテナを使わないCUDAのバージョン解決またはコンテナを用いたCUDAの解決を行う必要があります。

CUDAのバージョン:

  • メジャーバージョン -> ポイントより前の数字 (11.x -> 11)
  • マイナーバージョン -> ポイントより後ろが違う (11.x)

現在のnvidia-driverでパッケージが要求するCUDAが使えるか

  • nvidia-smiを入力し表示されるCUDAバージョンは利用できる最新のCUDAバージョンを示します。
  • パッケージが要求するCUDAバージョンと上記のバージョンの関係が以下の場合、CUDAが使用されます。
    • パッケージが要求するCUDAバージョン==nvcc -Vで表示されるバージョン
    • CUDA 11系より新しい場合、マイナーバージョンは互換性があります。
  • より新しいCUDAのバージョンを使用したい場合は、以下の場合に限り前方互換が保証されています。
    • nvidia-driverのライフサイクル(リンク先)終了までに登場したCUDAバージョン
  • 実際に使えるかの確認は以下をpythonで実行してください。
    • pytorch
      import torch.cuda as cuda
      cuda.is_available()
      > True 使える
      > False 使えない
      
    • tensorflow
      import tensorflow as tf
      tf.debugging.set_log_device_placement(True)
      tf.constant([1, 2, 3])
      > # device:GPU:<num>であればGPUが使用されている。以下はGPUではなくCPUが使用されている
      > I tensorflow/core/common_runtime/eager/execute.cc:1224] Executing op _EagerConst in device /job:localhost/replica:0/task:0/device:CPU:0
      

CUDAの前方互換

  1. リンク先からドライバーをインストール

    • 選択項目は以下の通り
    項目 -
    Product Type Data Center / Tesla
    Product-Series サーバーのGPUのシリーズ
    Product サーバーのGPU
    Operating System Linux 64-bit
    CUDA Toolkit ドライバーがサポートする最新もしくはそれ以前のバージョン
    Language English or Japanese
  2. driverの抽出

    • 実行後、ディレクトリ配架に./NVIDIA-Linux-x86_64-{version}が作成されている
    chmod +x NVIDIA-Linux-x86_64-{version}.run
    ./NVIDIA-Linux-x86_64-{version}.run -x
    
  3. 以下のコマンドでシンボリックリンクを作成

    • libnvidia-nvvm.so.*はCUDA 11.5 or laterのみ
    VERSION={version}
    CUDA_VERSION={cuda-ver}
    mv ./NVIDIA-Linux-x86_64-$VERSION ./cuda-compat-$CUDA_VERSION
    cd ./cuda-compat-$CUDA_VERSION
    ln -sf $PWD/libcuda.so.$VERSION libcuda.so
    ln -sf $PWD/libcuda.so.$VERSION libcuda.so.1
    ln -sf $PWD/libnvidia-nvvm.so.$VERSION libnvidia-nvvm.so
    ln -sf $PWD/libnvidia-nvvm.so.$VERSION libnvidia-nvvm.so.4
    
  4. LD_LIBRARY_PATH=/absolute/path/to/NVIDIA-Linux-x86_64-{version}:$LD_LIBRARY_PATH nvidia-smiを実行し、CUDAのバージョンが変わっていれば成功

  5. 次回以降も同様に使いたい場合は.bashrcexport LD_LIBRARY_PATH=/absolute/path/to/NVIDIA-Linux-x86_64-{version}:$LD_LIBRARY_PATHを追記

  6. より新しいCUDAバージョンを使用する場合は/path/to/NVIDIA-Linux-x86_64-{version}をコンテナにマウントして環境変数LD_LIBRARY_PATH=/absolute/path/to/NVIDIA-Linux-x86_64-{version}:$LD_LIBRARY_PATHを設定する。

トラブルシューティング

  • Q. tensorflowやpytorchのテンソルをGPUに載せると803エラーが出る
    A. ホストドライバーがより新しいCUDAバージョンに対応していません。
    ライフサイクル内にCUDAがリリースされていたか確認し、より古いバージョンがサポートされているか確認してください。

コンテナを使わないCUDAのバージョン解決

  1. CUDA Toolkitのインストール
  • リンク先から任意のバージョンのCUDA Toolkitを選択
  • Installer Typeは**runfile (local)**を選択
  • wgetのコマンドが表示されるのでダウンロード
  1. *.runの実行

    chmod +x ./cuda_{cuda-ver}_{driver-version}_linux.run
    ./cuda_{cuda-ver}_{driver-version}_linux.run --silent --toolkit --toolkitpath=$PWD/cuda-{cuda-ver}
    
  2. [任意] cuDNNのダウンロード

    • cuDNNを用いると学習が高速になります。
    • cuDNNはNVIDIA DEVELOPERへの登録が必要です。
    • 登録とログイン後、リンク先から任意のcudaバージョンに対応したcuDNNをLocal Installer for Linux x86_64 (Tar)を指定してダウンロードしてください。
    • ログインが必要なためwgetを使用できません。ローカルにダウンロードした後、rsync等でサーバーへアップロードしてください。
  3. [任意] cuDNNのファイルの配置

    tar -xvf cudnn-linux-$arch-8.x.x.x_cudaX.Y-archive.tar.xz
    cp cudnn-*-archive/include/cudnn*.h /path/to/user/cuda-{cuda-ver}/include
    cp -P cudnn-*-archive/lib/libcudnn* /path/to/user/cuda-{cuda-ver}/lib64
    chmod a+r /path/to/user/cuda-{cuda-ver}/include /path/to/user/cuda-{cuda-ver}/lib64
    
  4. 環境変数の設定

    export CUDA_HOME=/path/to/user/cuda-{cuda-ver}
    export LD_LIBRARY_PATH=/path/to/user/cuda-{cuda-ver}/lib64:$LD_LIBRARY_PATH
    

以上でtensorflowpytorchで任意バージョンのCUDAが使用できます。

コンテナを用いたCUDAの解決

  • nvidia-driveがサポートするCUDAであれば煩雑なセットアップ無しに使用できます。
    • より新しいCUDAバージョンを使用する場合は、CUDAの前方互換の7. を参照してください。
  • dockerhubより下記のイメージから任意のCUDAバージョンのイメージをベースイメージにしてコンテナを作成してください。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?