aki はついにお金を貯めることができました。ずっと考えていた AI イラスト作成を少し試してみることができそうです。
「目を開けて適当なことを言わない」(一つのアイブロウペンシルは金に匹敵する)という原則に従い、お金を無駄に使わないために、「高性能」(過去のもの)な計算カードを購入して Stable Diffusion(以下 SD)を試してみることを考えています。
元々はサーバー用にグラフィックカードを購入するつもりでしたが、結局は収容できず、少し困った状況になりました。
PC には ubuntu22.04 をインストールしており、元々使用していたグラフィックカードは 1660TI で、今ちょうど新しいグラフィックカードのためにスペースが空いています。
コアコンポーネント | 交換前 | 交換後 |
---|---|---|
CPU | AMD Ryzen 5 3500X | 変わらず |
マザーボード | MSI B450M | 変わらず |
メモリ | 40G | 変わらず |
グラフィックカード 1 | NVIDIA GTX 1660TI | TESLA P40 |
グラフィックカード 2 | なし | NVIDIA GF 310 |
GF 310 はブートカードとしてのみ使用されます。交換前のこれらのコンポーネントが必要とする定格電力(オーバークロックを考慮しない場合)は約 215W で、交換後の電力は 335W に増加しました(国家電網のパートナーおよび外部従業員)、電気代は目に見えて上昇しています。
なぜ Tesla P40 を選んだのか#
まず、このカードの技術仕様を見てみましょう。
GPU アーキテクチャ | NVIDIA Pascal™ |
単精度浮動小数点演算能力 | 12 TeraFLOPS* |
整数演算能力 (INT8) | 47 TOPS* (万億回の演算 / 秒) |
GPU メモリ | 24 GB |
メモリ帯域幅 | 346 GB/s |
システムインターフェース | PCI Express 3.0 x16 |
外形 | 4.4”(高さ)x 10.5”(長さ)、デュアルスロット、フルハイト |
最大消費電力 | 250 W |
ページ移行エンジンによるプログラミング能力の向上 | はい |
ECC 保護 | はい |
ハードウェアアクセラレーションビデオエンジン | 1 つのデコーディングエンジン、2 つのエンコーディングエンジン |
P40 の実際の使用性能は GTX 1080TI と同等で、ネットユーザーが詳細な比較を行っています。詳しくは:知乎
さて、なぜ P40 を選ぶ必要があるのでしょうか?
単精度浮動小数点演算能力や整数演算能力など、私には理解できない技術指標の他に、実際には彼の 24GB のメモリに注目しています。この知乎の回答は 2018 年のもので、P40 は 2016 年に発表されました。間違いなく、このような専門用途の計算カードは高価であることは必然です。時が経つにつれて、現在の某魚市場での中古グラフィックカードの比較では、1080TI の方が少し高価になっています(これは上半期に AI モデルが何度も更新された結果、中古市場でのトレーニング用途のグラフィックカードの価格が上昇したためです)。
P40 の 24GB のメモリは 1080TI の 12GB に比べて、より多くのタイプの AI モデルを実行するために使用できます。
さらに、サーバー自体に統合グラフィックが付いているため、ブート問題を考慮する必要がないので、P40(950R)を優先しました。
P40 のインストール前後のいくつかの操作#
Ubuntu にグラフィックカードドライバをインストールする正しい手順は、まずオープンドライバ nouveau を無効にし、init 3 の純コマンドラインモードに入ることです。
以前に 1660TI にドライバをインストールした際にこれらの手順を行ったため、この記事では省略します。
この記事を参考に Linux オペレーティングシステムにドライバをインストールする場合は、必ず上記の準備を行ってください。
この PC に最初に搭載されていたグラフィックカードは 1660TI で、今交換した後は出力表示がなく、別のブートカードが必要です。急いで近くのコンピュータ店で「高価」に GF310 グラフィックカードを購入しました(そうしないと点灯せず、自己診断を通過できません)。
Ubuntu オペレーティングシステムでは、最初に P40 グラフィックカードをインストールできず、GF310 を取り付け、その後元のドライバをアンインストールし、新しいドライバを更新してインストールします。
~$ lspci | grep -i nvidia
25:00.0 VGA互換コントローラ: NVIDIA Corporation GT218 [GeForce 310] (rev a2)
~$ apt remove --purge nvidia-*
~$ nvidia-smi
コマンド「nvidia-smi」が見つかりませんが、以下のパッケージをインストールすることでそれを取得できます:
~$ apt autoremove
lspci
は現在の PCI にインストールされているグラフィックカードのモデルを確認するために使用されます。
apt remove --purge nvidia-*
は元の 1660TI のドライバをアンインストールするために使用されます。
nvidia-smi
が見つからないというメッセージは、ドライバが正常にアンインストールされたことを示します。
apt autoremove
は残余の依存パッケージが完全にアンインストールされることを保証します。
GF310 グラフィックカードに必要なドライバは 340 バージョンで、ubuntu-drivers devices
コマンドでは適切なドライババージョンが見つかりませんでした。公式サイトからドライバファイルをダウンロードしてインストールしようとしましたが、失敗しました(このバージョンはどれだけ古いのでしょうか)。
理由は、ppa リポジトリに 340 バージョンのドライバパッケージが含まれていないため、拡張が必要です。
~$ add-apt-repository ppa:graphics-drivers/ppa
~$ apt-get update
~$ apt-get install nvidia-340
インストールが完了した後、再起動しても nvidia-smi コマンドで現在のグラフィックカードドライバを確認できませんでした。
~$ apt-get install nvidia-340
ソフトウェアパッケージリストを読み込んでいます... 完了
パッケージの依存関係ツリーを解析しています... 完了
状態情報を読み込んでいます... 完了
nvidia-340は最新バージョンです (340.108-0ubuntu8)。
0個のパッケージがアップグレードされ、新たに0個のパッケージがインストールされ、0個のパッケージがアンインストールされ、2個のパッケージがアップグレードされていません。
しかし、再度apt-get install nvidia-340
コマンドを実行すると、すでにインストールされていると表示されるため、ブートカードのドライバはインストールが完了しているはずです。ディスプレイからも解像度が自動的に調整され、ブート表示の問題は解決されました。
P40 グラフィックカードをインストールする前に、まず BIOS に入り、Above4GDecoding を有効にし、Secure Boot を無効にする必要があります。
再度シャットダウンし、P40 グラフィックカードを再接続して起動します。
今度は PCI バス上に P40 グラフィックカードが表示されるのが確認できます。
~$ lspci | grep -i nvidia
25:00.0 VGA互換コントローラ: NVIDIA Corporation GT218 [GeForce 310] (rev a2)
25:00.1 オーディオデバイス: NVIDIA Corporation ハイデフィニションオーディオコントローラ (rev a1)
26:00.0 3Dコントローラ: NVIDIA Corporation GP102GL [Tesla P40] (rev a1)
PPA リポジトリを更新したため、次のドライバのインストールは簡単になりました。
~$ ubuntu-drivers autoinstall
インストールが完了した後、再度再起動し、コマンドを実行するとグラフィックカード情報が表示されます。
~$ nvidia-smi
Wed Oct 25 16:55:35 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.06 Driver Version: 545.23.06 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| GPU 名称 Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 Tesla P40 Off | 00000000:26:00.0 Off | Off |
| N/A 41C P8 12W / 250W | 0MiB / 24576MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| プロセス: |
| GPU GI CI PID タイプ プロセス名 GPUメモリ |
| ID ID 使用 |
|=======================================================================================|
| 実行中のプロセスは見つかりませんでした |
+---------------------------------------------------------------------------------------+
この時、P40 グラフィックカードの右側に「off」と表示されており、これは Persistence-M モードに対応しています。このモードはデフォルトでオフになっており、Persistence モードを有効にすると GPU がタスクに迅速に応答できるようになりますが、待機時の消費電力が増加します。
GPU が計算に迅速に応答できるようにするには、これを有効にする必要があります。
~$ nvidia-smi -pm 1
GPU 00000000:26:00.0のPersistenceモードを有効にしました。
すべて完了しました。
~$ nvidia-smi
Wed Oct 25 16:55:35 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.06 Driver Version: 545.23.06 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| GPU 名称 Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 Tesla P40 On | 00000000:26:00.0 Off | Off |
| N/A 41C P8 12W / 250W | 0MiB / 24576MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| プロセス: |
| GPU GI CI PID タイプ プロセス名 GPUメモリ |
| ID ID 使用 |
|=======================================================================================|
| 実行中のプロセスは見つかりませんでした |
+---------------------------------------------------------------------------------------+
上部には CUDA バージョンが表示されており、これは本機でインストール可能な CUDA バージョンであり、すでにインストールされているわけではありません。インストールされているかどうかを確認するには、/usr/local ディレクトリに cuda 関連のファイルがあるかどうかを確認すればよいです。なければ、インストールされていないことを示します。
CUDA のインストール#
~$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
~$ dpkg -i cuda-keyring_1.1-1_all.deb
~$ apt-get update
~$ apt-get -y install cuda
インストールが完了すると、以下のようなメッセージが表示されます。
*****************************************************************************
*** コンピュータを再起動し、NVIDIAグラフィックスドライバが ***
*** 読み込まれることを確認してください。 ***
*****************************************************************************
~$ cd /usr/local
~$ ls
bin cuda cuda-12 cuda-12.3 etc games include lib man sbin share src
これは、再起動することで CUDA を適用でき、/usr/local ディレクトリに cuda のディレクトリが表示されることを意味します。
急がず、再起動前に関連する設定を行います。
~$ vim ~/.bashrc
#以下の内容を追加、バージョン番号に注意
export PATH=/usr/local/cuda-12.3/bin${PATH:+:${PATH}}
完了したら再起動します。
前述の GF310 グラフィックカードが nvidia-smi に表示されない問題は、バージョンが古すぎて現在の nvidia-smi と互換性がないために認識できない可能性がありますが、ブートは可能です。
正常なドライバが表示されないため、/dev ディレクトリにも関連するハードウェア情報がないため、依然としていくつかの問題が残っています。次のステップとして、gtx750ti に交換するか、外部グラフィックドックを使用して新しい nvidia-smi に認識されるグラフィックカードをブートカードとして使用することを検討しています。
これは後の話です。
Stable Diffusion のデプロイ#
git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git
cd stable-diffusion-webui-docker
# Dockerグラフィック依存関係をインストール
apt install nvidia-docker2 nvidia-container-toolkit nvidia-container-runtime
# 依存パッケージをインストールし、Stable Diffusion v1.5のモデルを自動的にダウンロードします。
docker compose --profile download up --build
# コンテナを起動し、autoを選択してAUTOMATIC1111が開発したWebUIを起動します。
docker compose --profile auto up --build
起動が完了したら、http://ip:7860 で SD のウェブページにアクセスできます。デフォルトでは Stable Diffusion v1.5 モデルのみが利用可能です。
イラストを試してみます。
プロンプト(ネットからの引用):
美しいレンダリングのチューダー様式の家が水辺にあり、夕日を背景にしたファンタジーの森。フォトリアリスティック、シネマティックな構成、シネマティックな高詳細、ウルトラリアリスティック、シネマティックなライティング、被写界深度、ハイパー詳細、美しく色分けされた、8k、多くの詳細、キアロスクーロライティング、++夢のような、ビネット
実際に画像を生成するのに約 3-5 秒かかります。このグラフィックカードはまだ使えます。
画像生成の過程でグラフィックカードの変化を観察できます。
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.06 Driver Version: 545.23.06 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| GPU 名称 Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 Tesla P40 On | 00000000:26:00.0 Off | Off |
| N/A 50C P0 54W / 250W | 210MiB / 24576MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| プロセス: |
| GPU GI CI PID タイプ プロセス名 GPUメモリ |
| ID ID 使用 |
|=======================================================================================|
| 0 N/A N/A 32634 C python 208MiB |
+---------------------------------------------------------------------------------------+
何も変更せずに(パラメータなど)、簡単に行えます。
参考資料#
[1] Tesla P40 技術仕様
[2] Tesla P40 発表資料
[3] Tesla P40 と GTX 1080TI の比較
[4] Ubuntu オペレーティングシステムにドライバをインストールする正しい手順
[5] NVIDIA CUDA リスト