西川和久の不定期コラム

遂にRTX 4090導入♪1秒で画像生成できる爆速に驚愕!AIサーバーを組む【ソフトウェア編】

 前回はハードウェア編としてALL中華パーツを使い、Core i7-12650H/32GB/512GB+1TBとGeForce RTX 4070 TiでAI専用マシンを組んだ。今回はRTX 3090を経て遂にRTX 4090を導入。その辺りの話と加えてソフトウェア編をお届けしたい。

GeForce RTX 4070 Ti(12GB)からGeForce RTX 3090(24GB)へ入替え

 前回はオール中華パーツのCore i7-12650H/32GB/512GB+1TBマシンを組み、そこへGeForce RTX 4070 Tiを投入。AI専用とし、軽くCPUのベンチマークテストまでを掲載した。

 この状態で数日動かしていたが、問題ないのでGeForceRTX 3090へ載せ替え。双方、いつもの512×768:神里綾華ベンチマークを行なった結果が以下の通り。

  • GeForce RTX 3090 (USB4接続) 8.77(it)/29秒(10枚)
  • GeForce RTX 4070 Ti(USB4接続) 8.83(it)/27秒(10枚)
  • GeForce RTX 3090 (PCIe接続) 11.19(it)/21秒(10枚)
  • GeForce RTX 4070 Ti(PCIe接続) 13.59(it)/18秒(10枚)

 これを見る限り、USB4接続のGeForce RTX 4090でも9.74(it)/26秒(10枚)だったように、Thunderbolt 3/USB4接続だと10枚30秒を切る辺りが限界値のようだ。AI用途の場合、GPUの使い方がゲームと違うので帯域はあまり影響ないと言われていたが、無視できないロスがやはりあるようだ。

 またThunderbolt 3/USB4接続でも、PCIe接続でも世代が1つ新しいGeForce RTX 4070 Tiの方が、前世代のハイエンド、GeForce RTX 3090より速いというのは評判通り。ここは速度を取るか、VRAM容量を取るかの二択になるものの、AI用途だとVRAM容量の大きいほうが有利なのでGeForce RTX 3090を選ぶことになる。

 そして改めてPCIe接続の結果を見ると、先の10枚30秒の壁を破り、10枚20秒。つまりSD 1.5なら1枚約2秒前後で生成可能。Thunderbolt 3/USB4接続では体験できなかった速度であり、この結果に大満足! 今回はここで終了のはずだったのだが……。

GeForce RTX 4090購入! その爆速に驚愕

 昼食にと渋谷へ出て、たまたま道玄坂のじゃんぱらに入ると、棚にRTX 4090を発見。物は「ZOTAC GAMING GeForce RTX 4090 Trinity OC」。空冷式の中では上位のモデルだ。新品だと最安で27万9,791円。平均ではざっくり30万円前後の価格帯となる。それが中古で約22万円(未満)。

 ハイエンドGPUの中古は、マイニングに使われている可能性が高く、良くないとされているが、GeForce RTX 4090に関しては、マイニングが下火になった去年(2022年)10月以降なので、おそらく大丈夫。今年はスマホを新調していないこともあり、まぁいいか! と購入した。

ZOTAC GAMING GeForce RTX 4090 Trinity OC
RTX 3090との2ショット。GeForce RTX 3090が小さく見える
組み込んだところ。幅がギリギリ
8ピン×4 to 12VHPWR電源ケーブルコネクタ周囲
下からGPUを支えるサポートスタンド

 パッケージが大きいので予想はできたが、GeForce RTX 3090と比較するとさらに巨大。サイズは356.1mm×150.1mm×71.4mm。一瞬ケースに入るのか? と不安になったものの、ご覧の通りギリギリ収まった。

 次は噂の8ピン×4 to 12VHPWR電源ケーブル。これに最大450Wも流すの? と不安になるほどコネクタ部分が小さい。GeForce RTX 3090では素直に8ピン×3のコネクタがGPU側にあり、普通に3本挿したのだが、GeForce RTX 4070 Tiも含め、スペースがあるにも関わらず、妙に小さいコネクタにしているのが気になるところ。

 仕上げはサポートスタンドだ。ビデオカード3レーン専有なので、背面でそれなりにガッチリ止まるのだが、写真からも分かるように、重さ的に大丈夫? となる。従ってこのサポートスタンドで下から支えるのは安心感がある。

 ドキドキしながら電源オン。無事起動し、ドライバも認識しているのが下記の画面キャプチャとなる。

nvidia-smi、NVIDIA Settings、nvtopが並ぶUbuntuのデスクトップ

 既にS/WはGeForce RTX 4070 Tiの時にセットアップ済みなので、早速画像を生成したところ、「え”」と言う時間で処理が終わる。上記のベンチマークテストを動かすと……。

  • GeForce RTX 4090 (PCIe接続) 21.35(it)/12秒(10枚)

 と、つまりは1枚約1秒! GeForce RTX 3090の倍速だ。もはやJPEG画像を開く感覚でSD 1.5/512×768pxの画像を生成できるので、とんでもない爆速だ。約1年前、MacBook Pro 14(M1 Pro)で1枚30秒かかってたのが嘘のような話となる(笑)。

 最近はSDXL 832×1,216px(20steps以上)で生成することが多いのだが、これが1枚3秒。SD 1.5がJPEGなら、SDXLはちょっとしたRAW現像で開いている感じだ。

 この価格帯は、MacBook Pro 14以来の買い物だったが、満足度はそれ以上(MacBook Pro 14は単にM1 Mac miniからのリプレイス)。これだけ速ければ、価格も大きさも8ピン×4 to 12VHPWR電源ケーブルも許せてしまう。

ソフトウェア環境

 話は前後するが、AIマシンのソフトウェア環境の話を。もともとWindows 11 Proで動かしていた複数のAI関連をこちらに移した格好だ。OSはUbuntu 22.04。Windowsでも良かったのだが、デスクトップ的な使い方をせず、ssh-serverを動かし、ほかのマシンからSSHで操作だったこともあり、思い切ってUbuntuとした。

 ただ一部Windowsでしか動かないアプリもあり、Windows+GPU Box環境も残してある。

 インストールしたのは(ほかにも入れたが結局残ったのは)、画像生成系が

  1. AUTOMATIC1111- SD/SDXL対応、生成AI画像アプリの定番
  2. StableSwarmUI- SDXL対応。本家Stable製。ほかとは違い.NETで作られバックエンドでComfyUIが作動
  3. Fooocus。SDXL対応。
    ControlNetを作ったlllyasviel氏作。同じくComfyUIを使っているものの、バックエンドではなく、再利用可能なパーツとして流用

この3つ。ほかにも色々あるのだが、AUTOMATIC1111からのフォークか、バックエンドにComfyUIを使っており、見栄えは違えど、中は同じ的なものが多い。

 従ってデファクトのAUTOMATIC1111は外せない、Stable製でPythonではなく.NET使用で気になる存在(しかも速い)、ControlNetを作った人だけあって、内部を知り尽くしており、ほかにはない色々なアプローチが面白い……と言う感じで、それぞれ特徴があり、現在この3つがお気に入りとなっている(同じパラメータを与えても出てくる絵の感じはそれぞれ異なる)。

AUTOMATIC1111。生成AI画像アプリのデファクトスタンダード
StableSwarmUI。Stable製である意味純正。左下にComfyUIの文字が見える
Fooocus。右側に独自のStyleが並ぶなど他にない機能が面白い
text-generation-webui。codellama-13b-instruct.Q4_K_M.ggufを使用中

 LLM系は本連載でも何度か登場しているtext-generation-webui。新しいモデルが出た時にサクッとチャット式WebUIで試せるのが最大の強みだ。

 そして上記全てhttpサーバーを備えており、LAN接続したほかのマシンからWebブラウザでアクセス可能。つまりSSHで接続しCLIでアプリを起動、操作は全てWebブラウザでOKというサーバー的な使い方となる。

 あとWebUIではないが、LoRA学習用にCLIのsd-scripts。Thunderbolt3/USB4接続のRTX 3090で約40分近くかかっていた学習が約20分ほどで終わる。

学習中のsd-scripts。SDXL、2,000ステップで約20分

 Pythonの環境についてはMinicondaを使用。これはPythonのバージョンを色々変更可能にするためだ。上位でAnacondaもあるが、これは色々入り過ぎるので使っていない。インストールは、

https://repo.anaconda.com/miniconda/
※ここから Miniconda3-latest-Linux-x86_64.sh miniconda.sh をダウンロード
$ mv ./Miniconda3-latest-Linux-x86_64.sh miniconda.sh
$ bash miniconda.sh
$ source ~/.bashrc

これでOK。仮想環境は

$ conda create -n test3106 python=3.10.4
$ conda create -n fooocus python=3.10.6
※Pythonのバージョンを指定し環境を作る
$ conda activate test3104
※Python 3.10.4の環境になる
$ conda activate fooocus
※Python 3.10.6を使ったooocus用の環境になる

こんな感じで作って切り替え使う。この後、アプリによってはpython -m venv venvと、さらに環境を作るケースもあるが、そもそもアプリによってPythonのバージョン縛りがあるので先にMinicondaを使う感じだ。

 加えてデスクトップを使った方が便利なこともありRDPでも接続可能にしている。ただし、Ubuntuのコントロールパネルで設定可能なリモートデスクトップではなくxrdpを使用。

xrdpを起動し、RDPで接続。ログインパネルが出る
ログイン後。RDPで接続したUbuntu Desktop

 これには理由があり、前者はログイン後しか使えない=ミラー的な扱いだからだ。従って、そもそもディスプレイを接続していない今回のマシンでは使えない。なぜこのような仕様なのかイマイチよくわからないが、仕様なので仕方ない。

 xrdpは「sudo apt install xrdp、sudo systemctl start|stop xrdp」で扱えるサービス。これはログインパネルを表示する普通のRDPとなり、ディスプレイを接続していない本機でも問題なく操作できる。もちろんMacからでもWindowsからでもRDPで接続可能。またVNCより描画も速い。

 この辺りはメインマシンがUbuntuだったり、Windows 11+SSHでAI関連を散々試した後なので、ノートラブルでサクッとできたものの、初めてだといろいろ大変だったかも知れない。そう言った意味でもGPUボックスを使ったAI環境は、無駄ではなかったように思う。

 これで余ったGeForce RTX 4070 TiとGPUボックスキット。前者は売却し、今回の足しにしたいところ。おそらくGeForce RTX 4090以外の部分がまるまる回収できるはずだ。後者は……未定。接続可能な別PCはあるのだが、肝心のGPUがない上、これ以上GPUがあっても使い道がない(笑)。


 以上、Thunderbolt 3/USB4接続のGPU Box+GeForce RTX 4070 Tiから始まったGPU騒動。何度も記事にした通り紆余曲折したものの、結局PCIe接続に落ち着いた。最初からこうしておけば……という声も聞こえそうだが、ドタバタ劇から最後落ち着くところに落ち着いた感があり、これはこれで個人的には楽しめた。

 最近はBing Image CreatorやChatGPT PlusでDALL-E3が使えるようになり、それなりのクオリティの画像を生成できるのに、なぜGPUに20万円と思う人も多いだろう。もちろん筆者も試しているが(変な呪文を与えなくても)「規約違反」がすぐ出て、このストレスは半端ない。LLMも同様。

 特に米国の企業はセンシティブな内容に(日本人から見れば)過剰反応していることもあり、今後、さらに厳しくなることはあっても緩むことはないだろう。自由に画像生成やLLMをしたければローカルに環境を持つのがベスト。その解が今のところ高価なGPUとなるのは仕方ないところだろうか。

 いずれにしてもこれでしばらくはいろいろAI系を楽しめそうだ。次はRTX 5090か!?(完)。