皆さまいかがお過ごしでしょうか。歌乃です。

最近は AI (主に画像生成) の環境づくりで右往左往しております。

それに関連して、今回は CUDA の旧バージョンを削除した話です。

(いつも通り大半は戯言です)


CUDA

さて、今回のターゲット CUDA ですが、CUDA って何?という方のためにざっくり説明すると

高度な並列計算を、GPU (いわゆるグラフィックカード、またはグラフィック用のプロセッサ) を使用しておこなうためのプログラム (ライブラリ) で、NVIDIA 社が開発・提供しております。

AI と言っても所詮はコンピューター上で計算処理をしているだけなので、コンピューターの計算処理能力は AI の性能に直結しています。そして AI の要求する計算処理は膨大です。

PC の計算処理は CPU がおこなっているわけですが、技術の進歩とユーザーの需要 (もっときれいな=高解像度で、ぬるぬる動く=高速に処理された、映像がみたい) などから映像処理担当の GPU の計算処理能力の方が一部分で CPU を上回ったわけです。そこで、この GPU の処理能力を映像関連以外の、つまりは AI が要求するような計算処理にまわして有効活用しようぜ。というのが CUDA が存在する理由です。

AI プログラムの使用に GPU や CUDA は必須ではありませんが、あれば処理時間は劇的に改善されます。一度でも快適な環境を味わった人は元に戻れないので、ある意味必須と言えなくもないですが。


PyTorch

AI プログラムに大きく関与する CUDA ですが、それとは別に AI に大きく関与するものとして「PyTorch」があります。

PyTorch ってなによ?という方のために、雑に説明させてもらうと、PyTorch は Python (パイソン、蛇ではなくプログラム言語のひとつ) 用の機械学習用のライブラリで、Facebookが開発を主導し、その使いやすさから現時点でデファクトスタンダードといって良いライブラリです。機械学習といえば PyTorch、PyTorch といえば機械学習です。


ONNX

さらにもうひとつ、機械学習において関係の深いものとして「ONNX」が存在します。

またなんかでてきた、ONNXって誰?という方のために、するっと説明させていただくと、ONNX はオープンソースで開発されている、機械学習モデル用のフォーマット、またはそのフォーマットで実行するための、推論エンジン (ONNX Runtime) です。

PyTorch は学習に最適化されているため、AI 技術のもう一つの核である推論は苦手 (処理が遅い) です。ONNX は推論に特化していて高速に処理できるのが特徴です。

PyTorch を使って生成された学習モデルを、ONNX フォーマットに変換して ONNX Runtime で推論処理をおこなうといった使われ方をします。


バージョンに関して

さて、いろいろ前置きをしましたが、CUDA、PyTorch、ONNX はそれぞれに得意分野があり、AI プログラムの中でお互いに連携して役割をこなしている、ということです。

しかしこの、連携して役割をこなすという部分が曲者で、それぞれに要求する相手の能力 (つまりはバージョン) が決まっています。

相手の能力が足りてなかったり、オーバースペックだったりすると、まともに機能してくれません。

ある程度の許容範囲 (バージョン幅) はあるものの、メジャーバージョンが違ったりすると問題が起きる可能性があります。

PyTorch のバージョンに対応する (対応できる) CUDA のバージョンに関しては、ここで確認します。

ONNX Runtime に対応する (対応できる) CUDA のバージョンに関してはここで確認します。

いいかえると、使用している (使用したい) PyTorch もしくは ONNX Runtime のバージョンによって使える CUDA のバージョンが決まり、それによってもう一方の ONNX Runtime もしくは PyTorch のバージョンが決まる、という流れになります。

めんどくさいことこの上ありませんね ( ゚Д゚)


ONNXのバージョンを確認する

ONNX Runtime のバージョン確認方法は

pip list | grep -i "onnx"

ONNX 関連ライブラリがリストされるので、そこからファイルバージョンを確認します。
これで確認できない場合 (仮想環境や組み込みなど) はライブラリのディレクトリから直接ファイルを確認する方法 (力技) もあります。

onnxruntime ディレクトリ配下の、init.py などを覗けばバージョンが書いてあります。

筆者の環境では ONNX Runtime のバージョンは 1.19.2 。

ONNX のサイトで確認すると推奨 CUDA のバージョンは 11.8 もしくは 12.x 。


CUDAのバージョンを確認する

過去に CUDA を入れたことがある (AI 画像生成してるなら大抵入っているはず) なら、以下のコマンドで確認が可能です。

nvcc -V

結果:筆者環境での例

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Wed_Jul_22_19:09:35_Pacific_Daylight_Time_2020
Cuda compilation tools, release 11.0, V11.0.221        
Build cuda_11.0_bu.relgpu_drvr445TC445_37.28845127_0

どうやら CUDA のバージョンは 11.0 のようです。ONNX の推奨バージョンより低いですね。


PyTorchのバージョンを確認してみる

ONNX と同じように pip list で確認します。

pip list | grep -i "torch"

結果:筆者環境での例

torch                             2.4.1
torchvision                       0.19.1

PyTorch のバージョンは 2.4.1 のようです。

PyTorch のサイトで確認すると、推奨 CUDA は、11.8、12.1、12.4 とのこと。

こちらも筆者環境の CUDA のバージョンが足りてないようです。


CUDAのインストール

ということで、対応する CUDA のバージョンをインストールします。

ただし、ここで注意事項があります。

NVIDIA ドライバーのバージョンによって対応する CUDA のバージョンに制限があります。

つまりドライバーのバージョンが古いと、最新バージョンの CUDA に対応できないということです。

ドライバーのバージョンと対応する CUDA の情報はここで確認できます。

もしくは以下のコマンドを使用します。

nvidia-smi

結果:筆者環境での例

Tue Oct 15 06:14:55 2024       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 565.90                 Driver Version: 565.90         CUDA Version: 12.7     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                  Driver-Model | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3070      WDDM  |   00000000:07:00.0  On |                  N/A |
|  0%   53C    P8             14W /  220W |    3071MiB /   8192MiB |      1%      Default |
|                                         |                        |                  N/A |
~~~~~~~~~~

ドライバーのバージョンは 565.90 、対応する CUDAのバージョン上限は 12.7 (あくまでも対応バージョン上限であり、インストールされている CUDA のバージョンではないことに注意) ということのようです。


GPU の型番に合った CUDA に関して

PyTorch や ONNX と違って CUDA は直接 GPU を操作するわけなので、当然使用できる GPU には制限 (下限・上限、公式では許容度として記載) があります。

公式サイトに対応情報があるので、自身の環境の型番と照らし合わせましょう。

筆者環境は GeForce RTX 3070 なので許容度は 8.6 ですね。

公式サイトの許容度に対応する CTK (CUDA Tool Kit) の情報から、8.6 であれば 最低 ver11.0 から最新 ver まで対応していることが判ります。

これで安心して最新版の CUDA 12.x をインストールできます。


旧バージョンの削除 (アンインストール)

CUDA のインストーラーは旧バージョンの CUDA が入っていても気にせずインストールします。

インストールするバージョンより新しいバージョンがある場合は、その旨の注意が表示されます。これはインストーラーが環境変数にインストールしたバージョンの CUDA を設定する (つまり新しいバージョンがあっても古いバージョンのpathを環境設定に書き込む) ためと思われます。

動作に問題はないと思いますが、リソースを節約する (意訳:何となく気持ち悪い) ために必要なければ旧バージョンはアンインストールしておきましょう。

ただし、ここで問題なのはCUDAはお手軽にアンインストールできないという事です。

どういうことかと言うと、windows版の CUDA にはアンインストーラーがありません。

公式サイトにも、コントロールパネルからアンインストールしてねー的なことが書いてあります。

仕方ないので地道にアンインストールします。

設定 >アプリと機能 からインストールされたアプリの一覧を表示します。

NVIDIA 関連アプリのあたりで CUDA の文字を探します。

CUDA

一杯ありますね。これをひとつづつアンインストールしていきます (力技)。


CUDA のダウンロード

公式サイトから CUDA Toolkit をダウンロードしてきます。本記事時点での最新バージョンは 12.6 Update 2 でした。

ダウンロードしたexe ファイルを実行します。

システムチェックの後、インストールが始まります。

使用許諾

使用許諾に同意して次へ。

インストールオプション

インストールオプションで詳細を選択して次へ。

インストールオプション

CUDA 以外は必要ないので、チェックを外す。※必要な方はそのままでOKです。

インストール先を指定

インストール先を指定して次へ。

インストール中

インストール中 ( ^^) _旦~~

swarmui_019

Nsight 関連のログ。

swarmui_020

インストールログ。

以上で、CUDA のインストールは完了です。

windows を再起動します。



ドライバー系のインストールでは再起動は必須 (`・ω・´)

Post If you feel like it, I would be happy if you could post it.