複数バージョンのCUDA Toolkitを同居させる
複数バージョン同居の概要
この記事の内容を実施する前に、私の環境には新しいバージョン ( 11.8 ) の NVIDIA CUDA Toolkit が入っていました。
その状況から、そのバージョン ( 11.8 ) を削除 (アンインストール) することなく、追加で古いバージョン ( 11.6 ) の CUDA Toolkit をインストールしたました。
その際に出来上がった状況と、それに対処した内容を説明します。
私は PyTorch の制約に対応する為にこの流れとなりました。同じような事を行おうと考えておられる方の為に何が起きたかを書き残すものです。
CUDA Toolkit のインストール
既存の CUDA Toolkit 11.8 は
の手順そのままでインストールしてありました。
参考までに、この時点で『 nvcc -V 』で CUDA Toolkit のバージョンを確認すると
このように出ていました。
更にこの『 CUDA Toolkitのインストール』の記事で書いている『おまけ:過去のバージョンを手に入れる』のページより、古いバージョン CUDA Toolkit 11.6 のインストーラーをダウンロードして実行しました。
インストールは通常の通りに進んだのですが、インストーラーの終盤の画面で
このように『 Nsight Visual Studio Edition の新しいバージョンが既に入っているので、もし古いバージョンが必要ならば先にアンインストールしてからインストールし直すように』といった情報が表示されました。
NVIDIA Nsight Visual Studio Edition は、Visual Studio に GPU コンピューティングを用いたアプリケーション開発向けの機能を追加する開発環境です。
NVIDIA Nsight Visual Studio Edition はこちらの公式ページ
において個別に配布されており、Windows のアンインストーラーも
このように個別に存在していることから、必要な時はいつでもこれだけを個別に消して入れなおす事ができます。
こういったものですし、これが新しい事が直接的に何かしらの不具合に繋がるとは思えない為、今回このメッセージに対して特に対応は行いませんでした。
インストール後の状況
インストール自体は先に書いたメッセージが表示された以外に特に変わったこともなく正常に終了しましたが、どういう状況になったのかを確認してみます。
まず『 nvcc -V 』コマンドで CUDA Toolkit のバージョンを確認してみます。
バージョンは 11.6 と出ました。一般的には新しいバージョンが入った状態で古いバージョンをインストールすると新しいバージョンが優先実行されるよう設定されるツールも多いのですが、どうやら普通に後で入れたものが優先されているようです。
同居させておく際には『明示的に個々のバージョンを使いたい際にはそれを指定して、何も指定しない場合は新しいバージョンが使われる』ようにしておくのが便利な気がしますので、これは今から修正すべきポイント1つ目となりました。
この原因を探るため、環境変数を見てみます。
環境変数の設定画面の出し方がわからない方は
こちらの記事などを参考にされてください。
システム環境変数の『 CUDA_PATH 』の内容は CUDA x11.6 のパスになっており、その他に『 CUDA_PATH_V11_6 』と『 CUDA_PATH_V11_8 』という2つのシステム環境変数が存在している状態になっています。
個別のバージョンが必要なツールは『 CUDA_PATH_V11_6 』や『 CUDA_PATH_V11_8 』の内容を見に行ってくれるだろうと想像できますが、デフォルトで使用される『 CUDA_PATH 』の内容が v11.6 のパスになっているのはちょっと気になります。出来れば何も指定しない場合は新しい方が使われて欲しいので、これは今から修正すべきポイント2つ目となりました。
必要な環境変数を修正する
では、上記の修正すべきポイント2つを修正していきましょう。
まずは1つ目、『明示的に個々のバージョンを使いたい際にはそれを指定して、何も指定しない場合は新しいバージョンが使われる』ように修正したいと思います。
まず、システム環境変数の中から『 Path 』という項目を選択して『編集』ボタンを押します。
CUDA のバージョンの古いものが新しいものより上にある項目を1つずつ選んで『下へ』ボタンで下に動かしていきます。
今回の私の状況では v11.6 と v11.8 が入っていて、v11.6 のパス2つが上にあったので、これら2つを v11.8 のパスの下に移動させました。
(パスは上に書いてあるものから優先で使用されますので、新しいバージョンを上に持っていっておくことで、新しいバージョンが優先して使用されるようにする事ができます。)
必要な移動が完了した状態がこちらです。
CUDA v11.6 に関係する2つのパスより v11.8 のパス2つを上位に持ってきています。
パスの順序が調整出来たら『 OK 』ボタンを押して閉じます。
次に2つ目、何も指定しない場合は新しい方が使われるようにしておきたいと思います。
システム環境変数の項目『 CUDA_PATH 』を選択して『編集』ボタンを押します。
変数値に書かれているパスをデフォルトで使用したい新しいバージョンのパスに書き換えて『 OK 』ボタンを押して確定させます。
今回は初め v11.6 と書かれていたのを 11.8 に変更しました。
何をやっているのかよく解らない方は、CUDA Toolkit のインストールパス『 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA 』を実際にエクスプローラーで開いてみると少しイメージが掴めるかもしれません。
CUDA Toolkit のインストールパスの場所には各バージョンのフォルダが存在し、それぞれの中にそれぞれのバージョンの CUDA Toolkit が入っています。バージョン確認に使っている nvcc.exe もそれぞれのフォルダの中にそれぞれのバージョンのものが入っています。
これらのうちどれを優先して使いたいか、を設定しているという訳です。
以上の修正が完了したら、環境変数の設定画面の『 OK 』ボタンを押して変更を確定させます。
これで個々のバージョンを使う手段は残しつつ、新しいバージョンが優先して使われる状態を作ることができました。
試しに適当なコマンドプロンプトから『 nvcc -V 』と打って実行して CUDA Toolkit のバージョンを確認します。
11.8 と表示され、11.6 より 11.8 が優先して使われるようになった事が判ります。