最初は stable diffusion を始めたばかりですが、統合パッケージを使用しているため、多くのトレーニング知識は半分しか理解しておらず、学びながら実践していますが、自分が欲しい作品をいくつか作り出すことができています。しかし最近、pyTorch と xformer をアップグレードすることで lora のトレーニング速度が大幅に向上することを知り、アップグレードしたいという気持ちが湧いてきました(手に入れたばかりの 4070 を使い切りたいという衝動)。そこで、坑道を歩き始めました —— 実際にはタイトルの通りです。
pyTorch をアップグレードする前に、まずはCUDAとcuDNNのバージョンを確認する必要があります。ほとんどのグラフィックカードがサポートしている CUDA は 11 であり、現在ほとんどの SD-webui でデフォルトインストールされている pyTorch も CUDA11 をサポートしているバージョンですので、変更の必要はありません。しかし、もしあなたのグラフィックカードが 40 シリーズであれば、CUDA12 をサポートしている可能性が高いです。CUDA11 を通常使用することに問題はありませんが、CUDA12 はグラフィックカードの計算効率を大幅に向上させることができますので、12 にアップグレードできるならば、ぜひアップグレードをお勧めします。では、自分のコンピュータにインストールされているのが CUDA11 なのか CUDA12 なのかをどうやって判断するのでしょうか?cuDNN とは何なのでしょうか?
私も最初はこのような疑問を持っており、実際には自分がインストールしているのは CUDA12 だと思っていましたが、資料を調べた結果、事実はそうではありませんでした。
簡単な概念#
まず、CUDA と cuDNN が何であるかを知っておく必要があります。具体的な詳細は私も半分しか理解していませんが、少なくとも大まかな概念を持っておく必要があります。少なくともそれが何で、何をするのか、どう使うのかを知っておくべきです。公式文書によると:
NVIDIA® CUDA® Toolkit は、GPU アクセラレートアプリケーションを構築する C および C++ 開発者のための包括的な開発環境を提供します。CUDA Toolkit を使用すると、GPU アクセラレートされた組み込みシステム、デスクトップワークステーション、企業データセンター、クラウドベースのプラットフォーム、HPC スーパーコンピュータ上でアプリケーションを開発、最適化、および展開できます。このツールキットには、GPU アクセラレートライブラリ、デバッグおよび最適化ツール、C/C++ コンパイラ、およびアプリケーションを展開するためのランタイムライブラリが含まれています。
組み込みの機能を使用して、マルチ GPU 構成にわたって計算を分散させることで、科学者や研究者は、単一の GPU ワークステーションから数千の GPU を持つクラウドインストールにスケールするアプリケーションを開発できます。
翻訳すると、簡単に説明すると、GPU の計算能力をより良く呼び出すための開発フレームワークです。
cuDNN の公式説明は:
NVIDIA® CUDA Deep Neural Network (cuDNN) ライブラリは、深層ニューラルネットワークのための GPU アクセラレートライブラリです。cuDNN は、前方および後方の畳み込み、プーリング、正規化、活性化層などの標準ルーチンのための高度に調整された実装を提供します。深層学習の研究者やフレームワーク開発者は、世界中で高性能な GPU アクセラレーションのために cuDNN に依存しています。
深層学習の研究者やフレームワーク開発者は、世界中で高性能な GPU アクセラレーションのために cuDNN に依存しています。これにより、彼らはニューラルネットワークのトレーニングやソフトウェアアプリケーションの開発に集中でき、低レベルの GPU パフォーマンスチューニングに時間を費やす必要がなくなります。cuDNN は、Chainer、Keras、MATLAB、MxNet、PaddlePaddle、PyTorch、TensorFlow などの広く使用されている深層学習フレームワークを加速します。
翻訳すると、簡単に説明すると、深層学習フレームワークの依存ライブラリであり、ニューラルネットワークのトレーニングを加速するために使用されます。
pyTorch は Python に基づく深層学習フレームワークであり、cuDNN を使用することでトレーニング速度を加速できることがわかります。特に注意すべきは、pyTorch と CUDA のバージョンが一致している必要があることで、そうでないと互換性の問題が発生し、プログラムが正常に動作しない可能性があります。これについては後で触れます。
前提準備#
まず、あなたのコンピュータがサポートしている CUDA バージョンを確認する必要があります。cmd に以下のコマンドを入力して確認できます(これは nvidia のコマンドラインなので、Linux システムではグラフィックカードに対応するドライバをインストールしていれば理論的には使用できます)。
nvidia-smi
これにより、コンピュータ内の具体的なグラフィックカードのモデルが得られます:
上記は実際にはあなたのハードウェアとソフトウェアの情報であり、グラフィックカードの名前、仕様、ドライババージョン、使用プロセス、左上に表示されているサポートされている CUDA バージョンが含まれています(注意:ここに表示されているのはあなたのグラフィックカードがサポートしている CUDA バージョンであり、コンピュータにインストールされている CUDA バージョンではありません!)
もしあなたが以前に CUDA を積極的にインストールしたことがなく、CUDA について聞いたことがない場合、あなたの環境には 99% インストールされていません(これは一見無駄なことのように思えますが、当時の私はそれを考えもしませんでした TT)。
もしさらにインストールされているか確認したい場合は、cmd にこのコマンドを入力できます。
nvcc -V
以下のように表示されれば、すでにインストールされています。
さて、問題が発生しました。pytorch を実行するには CUDA が必要ですが、私は CUDA をインストールしたことがありません。では、私の以前の統合パッケージはどのように動作していたのでしょうか?
答え:pytorch は CUDA の基本的な実行時依存ライブラリを内蔵しており、あなたの環境に CUDA が存在しない場合、それらを呼び出します。
さらに、あなたの環境にインストールされている pyTorch のバージョンと、アップグレードしたいバージョンを確認してください。これは後で対応するバージョンの CUDA をインストールする際に非常に重要です。
Python 環境に入り、以下のコマンドを実行して pyTorch の対応バージョンを確認できます。
import torch
# pyTorchのバージョンを出力
print(torch.__version__)
# torchが参照しているCUDAのバージョンを出力。注意:もしあなたの環境にCUDAがインストールされていない場合、ここでも出力されますが、torch内蔵のCUDAランタイムのバージョンを指します。
print(torch.version.cuda)
# torchが参照しているcuDNNのバージョンを出力。具体的なルールは上記のCUDAと同じです。
print(torch.backends.cudnn.version())
インストール#
まず、pyTorch のバージョンと対応する CUDA を知る必要があります。これについてはネット上に多くの資料がありますが、一つの方法はインストールパッケージの命名方式を直接見ることです。以下のリンクから確認できます。
しかし、非常に重要な点があります。
CUDA12 はバージョン適合に表示されていませんが、一部の非公式なチャネルでは、開発者が最新の pyTorch が CUDA12 をサポートしていると述べており、いくつかのランタイムファイルを置き換えるだけで済むとのことです。具体的な方法は下記の pyTorch の適合セクションで説明します。
torch の更新方法については多くを語りませんが、pip でのアップグレードが非常に便利です。
CUDA のインストール#
次に CUDA のインストールについて説明します。
まず、公式サイトからソフトウェアパッケージをダウンロードします。ここでは win10 システムを例にします。
ダウンロードが完了したら、すぐにインストールを開始します:
以下はインストール時のキャッシュファイルの位置で、適当なスペースのある場所に置いておけばよいですが、このディレクトリはインストールが終了すると削除されることに注意してください。
ここで注意が必要なのは、CUDA のインストールサイズが比較的大きく、インストール時にはすでに一定の GPU 環境を持っていることが多いため、カスタムインストールを選択し、必要なものだけをインストールすることをお勧めします。
ここで注意が必要なのは、図の Driver Component は一般的にチェックしない方が良いです。これはグラフィックカードのドライバに関わるものであり、グラフィックカードのドライバは一般的に独立してアップグレードします(私は nvidia experience を通じてアップグレードしました)。もしインストールした CUDA バージョンが最新でない場合、古いドライバが新しいドライバを上書きする可能性が高いため、チェックしないことをお勧めします。
CUDA の下にある具体的なコンポーネントを確認できます。Visual Studio のコンポーネントなど、普段開発に使用しない場合はチェックする必要はありません。
インストール中...
私のコンピュータには VS がインストールされていないため、インストール時にいくつかの依存関係が正常にインストールされませんでしたが、使用に影響がなければ問題ありません。
検証
cmd で以下のディレクトリに移動し、これらのテストプログラムが正常に動作するかどうか、また CUDA バージョンが正常かどうかを確認できます。
cd DIR\NVIDIA GPU Computing Toolkit\CUDA\v12.1\extras\demo_suite
bandwidthTest.exe
deviceQuery.exe
cuDNN のインストール#
cuDNN は依存ライブラリファイルの集まりに過ぎないため、指定されたバージョンのファイルをダウンロードし、CUDA のパス内の指定されたディレクトリに上書きするだけで済みます。
ここで NVIDIA アカウントに登録する必要がありますが、メールアドレスさえあれば簡単に作成できます...
こちらがダウンロードリンクです。
ダウンロード後、以下のようなフォルダが生成され、CUDA のディレクトリに上書きすればよいです。
pyTorch の適合#
ここでは主に CUDA12 の適合について説明します。pyTorch が CUDA12 を使用するには、pyTorch の依存ライブラリディレクトリ内で CUDA のファイルを使用して置き換える必要があります。
torch のライブラリディレクトリは一般的に対応する Python の lib ディレクトリ内(または virtualenv の lib ディレクトリ内)にあります。
類似のパスは以下のようになります。
${venv}\Lib\site-packages\torch\lib
置き換える必要があるファイルは以下の図のようになります。
最初の 3 つは CUDA のファイルで、残りの 7 つは cuDNN のファイルで、CUDA のディレクトリ内で簡単に見つけることができるはずです。
インストールが成功したら、CUDA12 による高速体験を楽しむことができます!!!