西川和久の不定期コラム

ローカルで画像生成AIや大規模言語モデルを動かしたい!Google ColabからRTX 3070 Ti+GPU Boxへ乗り換え!?

GPU Box、AKiTiO「Node Titan」とRTX 3070Ti(パッケージは3060Ti)

 前々回、Stable Diffusion WebUIをGoogle Colab(Pro)で動かす話をした。その後、快適に使っていたものの良からぬ願望が沸々と……。そう「ローカルPCに環境が欲しい!」だ。今回はその経緯と、画像生成だけではなく、大規模言語モデルをPCで動かすソフトウェアなども合わせてご紹介したい。

Google Colab(Pro)は十分速くてローコストだけど……

 前々回のおさらいをすると、M1 Pro搭載のMacBook Pro 14でStable Diffusion Web UIを動かしたのはいいが時間がかかり過ぎるため、Google Colab(Pro)へ環境を構築、爆速で動かすことに成功した。神里綾華ベンチマークの結果は、

  • M1 Pro 1.92(it)/383秒(10枚)
  • Colab/標準(T4) 2.99(it)/66秒(10枚)
  • Colab Pro/プレミアム(A100) 6.24(it)/32秒(10枚)

といった具合に、M1 Pro比だと無料のColabでざっくり5倍速、有料(1,179円/月)のColab Proなら10倍速で作動する。コストパフォーマンスは文句なし! わざわざローカルPCに環境を持つ必要もないな……っと思っていたが、実際に使い出すと、

  1. Stable Diffusionに限らずAI系は、Modelデータが大きいこともあり、起動に時間がかかる
  2. ちょっとしたファイルの出し入れもGoogleドライブ経由になり面倒
  3. いつGPU使用制限に引っかかるかドキドキしながらの運用
  4. いったんGPU使用制限になるといつ解除されるか不明

と、結構ストレスがたまるのだ。余暇で使っているのにも関わらずストレスは……(笑)。これを解決するにはローカルPCに環境を作るしかないと思い始めた。

 大きな筐体のPCを持っていれば、Colabよりちょい上、Colab Proより下のRTX 3060(12GB)あたりを5万円前後で購入すれば済む話なのだが、筆者の場合、iGPUな小型PCかミニPCばかり。該当するマシンがない。そこをなんとか……というのが今回のお題となる。

いろいろ考えた結果GPU Box、AKiTiO「Node Titan」を購入

 まず1番に考えられる方法はDeskMeet+i9-12900のメインマシンへビデオカードを装着すること。DeskMeetは仕様上、ボード長200mmの2スロット占有ビデオカードまでは筐体内へ装着可能だ。従って先にあげたRTX 3060(12GB)なら乗りそうだ。このパターンだと出費5万円前後。ただそうでなくても熱を持つi9を小さい筐体で使っているため+dGPUとなると気が引ける上、電源が500Wと不安だ。

 次に考えられるのは、DeskMeetの筐体を捨て、中身だけ電源も含め少し大きめのケースへ入れ替え。このパターンならいくらでも強いビデオカードを使うことができる。費用はケース+電源+ビデオカード。GeForce RTX 3060(12GB)として7万円強だろうか。

 とは言えこの2つはメインマシンを触るため、通常業務に少なからず影響を及ぼす。気分的にはやりたくない方法なのだ。

 とすると最後の手段? は、Thunderbolt 3(または4、USB4)接続のGPU Boxを購入し、そこへビデオカードを装着するパターンが考えられる。

 この方式の欠点はダブルにコストがかかる上、内蔵ならPCI Express 4.0×16の帯域幅256Gbpsに対して、Thunderbolt 3(4)/USB4は40Gbps。パフォーマンス低下が予測される。この件、ネットなどで調べると、ゲーム系とAI系は、GPUの使い方が違うので、(大した根拠はないが)大丈夫かも!? という雰囲気もあり、購入に踏み切った。

 Amazonなどで価格を調べると、機能にもよるが5万円~といったところ。中でも比較的安価なAKiTiO「Node Titan」を4万8,180円で購入、翌日には手元に届いた。

 このGPU Box、機能的にはシンプル。

  • Thnderbolt 3接続(ケーブル付属)
  • 2スロット占有ビデオカード対応
  • 電源650W
  • PCI Express補助電源は8(6+2)ピン×2
  • Type-Cは最大85W出力。ノートPCなどを充電しながら使用可能
  • EthernetやUSBなどポート系は一切なし

と、必要最小限の構成となるが、今回の用途的にポートなども必要なく、仕様上の問題はない。あと1~2万円安ければ……っと言ったところか。製品的には2020年のもので既にレビューが載っているので、興味のある人は合わせてご覧いただきたい。

 肝心のビデオカードはどうしたのか? だが、このパターンで両方揃えると確実に10万円オーバーコース。なかなか手が出せない価格帯となる。実は、編集担当とGPU Box購入前から本件を相談していたところ、GeForce RTX 3070 Ti(8GB)をお借りできることになったので、(少しズルいが)それを使った。

RTX 3070 Ti(パッケージはGeForce RTX 3060 Tiのものだが)
AKiTiO「Node Titan」 / 斜め前。前面にパワーLED
AKiTiO「Node Titan」 / 斜め後ろ。背面下に電源スイッチとACコネクタ、写真からは見えないが中央下あたりにType-C
AKiTiO「Node Titan」 / 収納可能な持ち運び用のハンドル
AKiTiO「Node Titan」 / 内部。GPU装着前。PCIeコネクタが見える
AKiTiO「Node Titan」 / 内部。GPU装着後。補助電源8ピン×2

 手元にあるミニPCでThunderbolt 3(4)もしくはUSB4対応なのは、Intelの第10世代Core i5搭載「NUC10i5FNH」、MINISFORUMの第11世代Core i5搭載「EliteMini TH50」、そして少し前にレビューしたMINISFORUMのRyzen 9搭載「UM690」。1つ目は業務用なので、後者2つで試してみた。なお、MacBook 12やMacBook Pro 14もThunderboltは搭載しているものの、NVIDIAに関してはOS側が未対応なので使用することはできない。

 GPU Box側の設定は簡単。本体後にあるネジ2つを外し、トップカバーをスライドし外す。すると写真のように内部にアクセスできるので、ビデオカードをスロットに差し、ネジで固定、補助電源の8pinを2つビデオカードにセットすれば終わりだ。この辺りは普通のマザーボードに設定するのと同じ感じだが、固定の爪がない分、交換なども楽にできる。

 早速接続テストでGPU Box裏にある電源をオン。PC側のType-Cへケーブルを接続するとスタンバイ状態から起動状態へ変わり前面のLEDおよびビデオカードのファン&LEDが作動し出す。なお、ビデオカード側の映像出力は使っていない。

 まず「UM690」を試したところあっさり作動。気を良くして「EliteMini TH50」に接続すると物理的には認識するものの、ドライバーがerror code 12で作動しない。調べるとレジストリエディタでちょっとした書き込みが必要となる。いずれにしても「EliteMini TH50」はオンボード16GBでメモリを増設できないこともあり、32GBに増設済の「UM690」を使うことにした。OSはWindows 11 Pro 22H2。

 なお切断は、タスクトレイにあるUSBアイコンから「ビデオコントローラー(VGA互換)の取り出し」後、Type-CケーブルをPC側から抜けば良い。この状態でGPU Boxはスタンバイになり、電源オンのままでもさほど電力は消費しない。これはなかなか便利だ。

Stable Diffusion Web UI / AUTOMATIC1111のインストール

 ネットなどの記事を見ると、Stable Diffusion Web UIをWindowsで使う場合、CUDA ToolkitやcuDNN(要アカウント)をインストールする的な話が結構載っているものの、ディスプレイドライバにCUDAも含まれているため不要。Windows用のGitと、Pythonの作動環境を切り替えるMinicondaだけ事前に入れれば良い。Minicondaをインストールすると、PowerShell用とCMD用、2つのショートカットが作られるが通常、前者で問題ないだろう。

 このMiniconda、Python関連のパッケージ管理と環境管理をするもので、Pythonを使うアプリは結構バージョン依存するものが多く、1つの環境でやろうとすると、アプリAは動くがアプリBは動かなくなるといったことが頻繁に発生する。それを防ぐため簡単に環境をスイッチできる仕掛けとなる。使い方はこんな感じだ。

conda create --name sd1111 python=3.10
※sd1111環境をPython 3.10ベースで構築
conda activate sd1111
※環境をsd1111へ
conda activate base
※環境をbase(デフォルト)へ
conda env list
※定義済の環境一覧

# conda environments:
#
base                  *  C:\Users\knish\miniconda3
sd1111                   C:\Users\knish\miniconda3\envs\sd1111
textgen                  C:\Users\knish\miniconda3\envs\textgen

conda remove -n myenv --all
※環境myenvをインストール済のパッケージごと削除。ただしbaseは削除できない

 パッケージ管理はlinuxのapt istallなどと同じ感じで扱えるpip3を使う。対象はアクティブな環境となり、ほかの環境へは影響しない(ここ重要)。

 Gitインストール、Minicondaインストール/環境作成後、Stable Diffusion Web UIのインストールは適当なディレクトリで以下を実行すれば、初回は自動的に環境構築が始まり、その後、Web UIが起動できる。

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd stable-diffusion-webui
wibui.bat
※updateの確認/インストールは、このディレクトリでgit pull

 この時、「CUDA版のPyTorchは?」と、知っている人なら思うだろうが、AUTOMATIC1111の自動環境構築にはこれも含まれており、事前にPyTorch関連をインストールする必要はない。

 http://localhost:7860で軽く作動確認、本格的に使う時は、以下のコマンドオプションを付ければ良いだろう。--listenを付けると、LAN上のマシンからもhttp://IPアドレス:7860で作動するようになるが、初回だけファイアウォールにブロックされパネルが開くので解除する。

webui.bat --listen --theme dark --enable-insecure-extension-acces --xformers --no-half-vae
Windows 11上で作動するStable Diffusion Web UI(画像はChilloutMix使用、courtesy of Civitai)
“512×768:神里綾華ベンチマーク”実行結果(courtesy of Civitai)

 さて気になるベンチマークテストの結果は……。

  • Colab/標準(T4) 2.99(it)/66秒(10枚)
  • GeForce RTX 3070 Ti(USB4接続) 6.32(it)/37秒(10枚)
  • Colab Pro/プレミアム(A100) 6.24(it)/32秒(10枚)
  • GeForce RTX 3070 Ti(PCIe4.0×16接続) 7.38(it)/31.8秒(10枚)
    ※512×768:神里綾華ベンチマークのサイトより

 Colab Pro/プレミアム(A100)とほぼ互角だ。PCI Express 4.0×16接続には気持ち劣るがUSB4接続でこの差なら大健闘だろう。あのColab Pro/プレミアムの速度がローカルPCで再現でき、好きな時間に好きなだけ使えると、ちょっと感激した次第だ(笑)。

本当に1クリックでインストールできるEasy Diffusion

 さて、ここまで読んで頂いても、「Stable Diffusion Web UI、使ってみたいけどインストールが面倒……」っと思っている方にお勧めなのがこのEasy Diffusion。Windows、macOS(M1/M2対応)、Linuxと、まさに一発でインスールできる優れものだ。

 方法は簡単、このGitHubにある、3択のアイコンをクリック、Windowsだとexe、macOSとLinuxはzipをダウンロードするので、適当なディレクトリへコピー後、前者はクリック、後者2つは展開して中にあるstart.shを実行するだけ。その後、自動的に環境構築し、Webブラウザでページが開く。アップデートも起動時に自動チェックと至れり尽くせり。

Easy DiffusionのGitHubでここからダウンロード
Easy-Diffusion-Windows.exeクリック後、暫くするとEasy Diffusionが起動

 AUTOMATIC1111版と(見た目も違うが)機能的に大きな違いは、現在Loraに非対応なこと。筆者が好んで使っているxx風とかが使用できないのでかなり痛い。ただし、issuesには上がっており、テストドライブ版も存在するので(設定タブの一番下、その上にベータチャンネルON/OFFもある)、正式対応は時間の問題だと思われる。

大規模言語モデルをローカルPCで! oobabooga / text-generation-webui

 せっかく強力なdGPUが手元にあるので、画像生成ばかりではなく、大規模言語モデルも1つ試してみたい。つまりChatGPT的なのを手元のPCだけで動かそうというわけだ。この手のものとしてFlexGenなどいろいろあるが、1番インストールが簡単なのがこのoobabooga / text-generation-webui。しかも名前の通り、チャットなどのWeb UI付きだ。インストール方法は以下の通り。

mkdir textgen
cd textgen
※適当なディレクトリ

conda create --name textgen python=3.10
conda activate textgen
※textgenという環境を作りアクティブにする

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
※CUDA対応のPyTorchをpip3でインストール。ビデオドライバのCUDAは12系だが、PyTorchは現在12系に非対応。11系までなので(仕方なく)それを入れる

python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
※確認。2.0.0+cu118 True となる

git clone https://github.com/oobabooga/text-generation-webui
※本体をclone。textgen/text-generation-webuiディレクトリに一式入る

https://github.com/oobabooga/one-click-installers/archive/refs/heads/oobabooga-windows.zip
※textgenフォルダ内に簡単インストール用スクリプトを取得/展開。以下を順に実行。まずModelは無難なopt-1.3bを選択。2回目以降は前2つは不要(Modelを追加する時は、download-model.batを実行)。複数のModelがある場合は、start-webui.bat起動時に選択画面が出る。

install.bat
download-model.bat
start-webui.bat
text-generation-webui起動。それっぽい返事が戻って来るのが分かる
Interface modeでGoogle翻訳とno_streamにチェック、内部的には英語作動させる

 実際使ってみると、opt-2.7bだと日本語は認識するものの、ちゃんとした返事は期待できず、Interface modeのGoogle翻訳にチェック、内部的には英語で作動させる。またこの時、タイプライター式の表示だと1文字ずつ翻訳が動くので、合わせてno_stream(つまり結果は1度に書く)にチェックする。

 返事は数秒で戻り、ChatGPTがちょっと混んでると思えばそんな感じだろう。もちろんベースとなっているModelがChatGPTなどと比較して小さ過ぎるため、同じことはできないが、簡単な受け答え程度ならOK。それよりちょっとしたPCで動くことの方が重要だったりする。

 いかがだろうか。つい最近まで大規模言語モデルは一般的なPCでは不可能と言われていたが、この手のものが、FlexGen(M1/M2対応版)やAlpacaなどいくつも出てきた。今後が楽しみな状況だ。

 最後にお借りしているビデオカード返却後、何にするかであるが、実際GeForce RTX 3070 Ti(8GB)を使っての感想は、速度は文句なしだがビデオメモリが足らないこと。8GBではStable Diffusionの解像度高めのアップサンプリングや、ものによっては、大規模言語モデルの2.7bより大きいModelが動かせないなど残念な部分がある。そこで懐具合と性能/容量を考えると現時点では、

  1. GeForce RTX 3060(12GB)、5万円前後
  2. GeForce RTX A4000(16GB)、8万円前後/ただし中古

 この2択となる。GPUのパワー的にはどちらもGeForce RTX 3070Ti未満。メモリ容量を優先した形となる。ただA4000は通常ビデオメモリのアクセスにWDDM(Windows Display Driver Model)を使うところをTCC(Tesla Compute Cluster)に対応しているため、ビデオメモリへのアクセスが速くなり、AI系の用途では効きそうな感じだ。あるいは次世代のGeForce RTX 4060(Ti)あたりに期待したいが、どうやらメモリ8GBらしく残念……。


作動中のUM690+GeForce RTX 3070Ti+GPU Box。モニターの裏しか設置スペースがなかった

 以上、GeForce RTX 3070Ti+GPU Boxを使いAI系をローカルPCで動かす! 話をした。大きな筐体のPCならこんなことをせず、ビデオカードを入れれば済む話なのだが、ミニPCやノートPCだとそうも行かない。少しは参考になることもあれば幸いだ。

 また、ちょうどこの原稿を書いている最中に、Bing Image CreatorAdobeのFireflyといったAIを使った画像生成、Bing Chat/ChatGPT対抗のGoogle Bard(執筆時、米国と英国のみ)もリリース(もしくは発表)された。今後ますます面白そうなクラウド上のAI系だが、それをローカルPCで楽しむのもコストは度外視だが(笑)また一興と言ったところではないだろうか。