banner
Aki

Aki

太阳能维修,月亮可更换,星星不闪包退换。
twitter

# ubuntu22.04にP40グラフィックカードをインストールする

aki はついにお金を貯めることができました。ずっと考えていた AI イラスト作成を少し試してみることができそうです。

「目を開けて適当なことを言わない」(一つのアイブロウペンシルは金に匹敵する)という原則に従い、お金を無駄に使わないために、「高性能」(過去のもの)な計算カードを購入して Stable Diffusion(以下 SD)を試してみることを考えています。

元々はサーバー用にグラフィックカードを購入するつもりでしたが、結局は収容できず、少し困った状況になりました。

PC には ubuntu22.04 をインストールしており、元々使用していたグラフィックカードは 1660TI で、今ちょうど新しいグラフィックカードのためにスペースが空いています。

ホスト構成
コアコンポーネント交換前交換後
CPUAMD Ryzen 5 3500X変わらず
マザーボードMSI B450M変わらず
メモリ40G変わらず
グラフィックカード 1NVIDIA GTX 1660TITESLA 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 公式発表

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 モデルのみが利用可能です。

イラストを試してみます。

image

プロンプト(ネットからの引用):

美しいレンダリングのチューダー様式の家が水辺にあり、夕日を背景にしたファンタジーの森。フォトリアリスティック、シネマティックな構成、シネマティックな高詳細、ウルトラリアリスティック、シネマティックなライティング、被写界深度、ハイパー詳細、美しく色分けされた、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 リスト

[6] Docker で Stable Diffusion をデプロイ

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。