Ubuntuでの CUDAのバージョンの切り替え方

使いたいGPU計算ソフトがCUDAの特定のバージョンでしか動かないことがあると思います。
CUDAのバージョンの切り替え方を書いておきます。
切り替え先のバージョンがインストールしてある必要があります。

1. update-alternatives を使う方法

  • Ubuntuには、update-alternativesという機能があり、バージョンの切り替えが比較的容易にできます。
  • 今、CUDA 10.2, 11.0, 11.5 がインストールされているとします。
  • まず、update-alternatives の選択肢に入るように、update-alternatives –install をします。優先順位はそこまで重要ではないのですが、10.2を優先したいので、この中では一番小さくしました。
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-11.5 100
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-11.0 90
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-10.2 80
  • 次に、update-alternatives –config で選びます。
sudo update-alternatives --config cuda
  • すると次のような画面になります。
$ sudo update-alternatives --config cuda
alternative cuda (/usr/local/cuda を提供) には 3 個の選択肢があります。

  選択肢    パス                 優先度  状態
------------------------------------------------------------
* 0            /usr/local/cuda-11.5    100       自動モード
  1            /usr/local/cuda-10.2    80        手動モード
  2            /usr/local/cuda-11.0    90        手動モード
  3            /usr/local/cuda-11.5    100       手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 
  • 今の場合、cuda-10.2 を使いたいので 1 を押してEnterをします。

すると、以下のような表示になります。

update-alternatives: /usr/local/cuda (cuda) を提供するためにマニュアルモードで /usr/local/cuda-10.2/ を使います

パスの設定

  • NVIDIAの公式サイトの Post-installation action に、パス設定が記載されています。

  • 私は、できるだけ .bashrc をいじらないでというのを最近、モットーにしています。Ubuntuでは .bashrc の中で読み込まれる .bash_aliases があるのでそちらに追記します。.bash_aliases はその名の通り、本来はエイリアスの設定を書くものと思いますが、様々なパスをここに書いておくと、.bashrc を直接いじらなくていいので安全かと思います。

  • update-alternatives を併用すると、以下のような記載で大丈夫になります。LD_LIBRARY_PATHは、自分が使い分けをしたいCUDAの lib64 のパスをひたすら書いていきます。

# CUDA
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda-10.2/lib64:/usr/local/cuda-11.0/lib64:/usr/local/cuda-11.5/lib64${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}}
  • ターミナルを一度閉じて、再度ターミナルを起動します。

CUDA の確認

  • nvcc –version で NVCC のドライバが確認できます。
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89
  • CUDA 10.2 が選ばれています。
  • 他を選びたかったら、sudo update-alternatives –config cuda を実行すれば大丈夫です。

2. シンボリックリンクを使う方法

  • 現在のCUDAのバージョンを確認します。
nvcc -V
  • /usr/local/cuda へのリンクを切り替え先のバージョンのインストール場所に変更します。

  • 例:CUDA5.0に切り替える場合

sudo unlink /usr/local/cuda
sudo ln -s /usr/local/cuda-5.0 /usr/local/cuda
  • 切り替え後のバージョンを確認します。
nvcc -V
  • なおrebootは不要です。

Ubuntuでの CUDAのバージョンの切り替え方” へのコメント

  1. ご回答ありがとうございます。CUDAのバージョンとgccのバージョンの整合性が良く分からないのですが、CUDAのバージョンを3通り決めて(オリジナル10.2、標準11.3、最維11.7)、それらをカバーできるNvidiaのドライバ(450辺り)に更新、gccは対応しそうなバージョンを何個か残す、とかでしょうか。Nvidiaのドライバは新しい方がいいかな、と思ったりしますが。

    • その方針でいいと思います。

      NVIDIAのドライバは私はいつも最新のものにしていますが、それとCUDA, gcc でコンフリクトが起こることは特に無いです。

      なので、

      NVIDIA: up-to-date
      CUDA: いくつかいれて適宜 update-alternativesで切り替え
      gcc: いくつかいれて適宜 update-alternativesで切り替え

      がいいと思います。

  2. NVIDIAのドライバ、gccのバージョン、CUDAのバージョンを整合性を取れる様に設定できる方法は無いでしょうか。

    • gccのバージョンもupdate-alternativesを使って固定することができます。
      NVIDIAのドライバは特定のバージョンを入れる場合は、ドライバのバージョンで指定するしかないと思います。
      ご質問の意図は、ご自身で明示せずに、システム側で自動判定して整合性がとれるように設定できる方法はないかという意味になりますでしょうか?

      (すみません、私はいつも自分でバージョンを決めうちで作業をすることが多いので…)

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください