最近生成AIめちゃくちゃ注目されてますね。
普段はGithub Copilotでコードを書いてもらったりChat GPTでちょっとしたブレストに活用したりしていますが、画像生成AIも気になってはいます。
そんな中、先日OSSカンファレンスが名古屋で開催されました。
今年はセミナーもオフラインになって久々の完全オフラインが復活し久々にお会いする方たちとお話できて、最高に楽しい1日でした。
このセミナーの中でも生成AIをテーマにしたセッションがいろいろあり、その中でStable DiffusionをさくらのクラウドのGPUインスタンスで動かすセッションがありました。
以下のQiita記事がベースです。
この記事では、さくらクラウドのGPUインスタンスを使用してStable Diffusionを動かしている話なのですが、インスタンスで使用しているGPUのスペックは固定で、NVIDIA V100(VRAM 32GB)を使っています。
AI用の演算に特化したGPUをクラウドで使えるのは便利だと思いますが、ちょっとお試しするのに契約が手間だと感じました。
せっかく手元にCUDAに対応した低スペGPUを持っているわけなのでそれでやったほうが安上がりだと思いました。
つまり何が言いたいかというと、ローカルで手軽にStable Diffusionを手軽に試してみたいと思います。(前置き長い…)
スペック
普段遣いしているメインPCは、DELL Precision 3430でスペックは以下の通りです。大須の佐古前装備で購入し、メモリとGPUはその時在庫にあったもので換装しています。
今まで実家ではもっとハイスペックなPCを使ってましたが、めちゃくちゃ電気を食うのと場所を取るので、一人暮らしにあたり程よい大きさのメーカー製PCで良さげなやつを使うようになりました。
ミニタワーPCなので使えるGPUに限りがありますが、Quadroなら古のミニディスプレイが4つもあるのでデュアルディスプレイがかなり快適になります。何より今まで寝かせてたミニディスプレイアダプタがまたこうやって活用できたのもデカいです。
動作環境
今回の動作環境は以下の通りです。今回はGPUを動かしてみたかったのでWSL上でDockerを動かす想定で進めていきます。Ubuntuをインストールしても良かったですが、わざわざセットアップするのも面倒だったので、WindowsをホストOSとして動かせるようにしていきます。
- Windows11
- WSL2
- Docker Desktop 4.30.0
セットアップ
NVIDIAドライバのインストール
まずは以下のURLからGPUのドライバーをお使いのPCのOS、GPUに合わせてインストールします。
今回はWSL上で動作させるようにしますが、GPUドライバについてはホストOSであるWindows用のドライバでセットアップする必要があります。
ここからはWSL上でセットアップを進めていきます。
WSLはコマンドプロンプトかPowerShellで wsl
と入力するだけで起動できます。
WSLを起動したら以下のコマンドを実行し、GPUドライバがあたっているか確認します。
nvidia-smi
以下の実行結果が表示されれば問題ありません。もし、エラーが出る場合はPCを再起動してお試しください。
Sun Jun 2 23:44:09 2024 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 555.42.02 Driver Version: 537.70 CUDA Version: 12.2 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 Quadro P620 On | 00000000:01:00.0 On | N/A | | 37% 50C P8 N/A / N/A | 686MiB / 2048MiB | 20% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+
NVIDIA Container Runtimeのセットアップ
続いてNVIDIA Container Runtimeをセットアップします。
まずは以下のコマンドでパッケージのレポジトリを登録します。
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
続いてパッケージリストを更新して、NVIDIA Container Runtimeをインストールします。
sudo apt update sudo apt install nvidia-container-toolkit
インストールできたか確認するために、以下のコマンドで動作確認用のコンテナを動かしてみます。
docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
wsl上で確認した時と同様に nvidia-smi
の実行結果が返ってきたらDockerのGPU環境は正常セットアップできています。
Stable Diffusionを動かす
セットアップ
以下のコマンドでソースコードをクローンします。
git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git
クローンしたら以下のコマンドで必要なモデル、ファイルをダウンロードします。ダウンロードするファイルは12GBほどあるので結構時間がかかります。
cd stable-diffusion-webui-docker docker compose --profile download up --build
WebUIを起動する
実際にStable Diffusionを起動します。
起動には以下のコマンドを実行します。
docker compose --profile auto up --build
実行するとログが流れますが、以下の通りローカルのURLが表示されたら正常に起動しています。
auto-1 | Installing extension dependencies (if any) auto-1 | Loading weights [c6bbc15e32] from /stable-diffusion-webui/models/Stable-diffusion/sd-v1-5-inpainting.ckpt auto-1 | Running on local URL: http://0.0.0.0:7860
ブラウザで http://localhost:7860
を入力するとWebUIが開きます。
動かしてみる
これでStable Diffusionが立ち上がりました。
試しに犬の画像を生成してもらいます。pronptに dog
と入力して「Generate」ボタンをクリックすることでしばらく待ちます。
すると以下の通り無事に画像が生成されたことが確認できました。
画像生成中に nvidia-smi
を叩くと以下の通りGPUが機能していることが確認できます。
Mon Jun 3 00:58:00 2024 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 555.42.02 Driver Version: 537.70 CUDA Version: 12.2 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 Quadro P620 On | 00000000:01:00.0 On | N/A | | 46% 61C P0 N/A / N/A | 1808MiB / 2048MiB | 100% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | 0 N/A N/A 72 C /python3.10 N/A | +-----------------------------------------------------------------------------------------+
タスクマネージャで確認してもGPUが問題なく機能していることが確認できました。こうしてみるとやはりVRAMが2GBということもあって100%近く使っていますが、それでも問題なく画像生成できています。
余談ですが、冒頭の画像は今回構築した環境でプロンプトを hacker
、ネガティブプロンプトで worst quality,ugly,bad anatomy,jpeg artifacts
を設定して生成した画像です。
まとめ
今回はWSLを使ってWindowsでStable Diffusionを動かす方法を試しました。
昔はWSLはあまり使い勝手がいい印象がなかったのですが、ここ最近公式でもGPU対応するようになり、これでGPUを使うためだけにデュアルブートをする必要がなくなります。
そして、話題の生成AIなのでハイスペックなGPUを使わないといけないのかと思いきやVRAMの少ないロープログラボでもちゃんと動作することがわかりました。
そんなにPCでゲームをするわけでもなくて普段遣いのGPUはそこまでハイスペックである必要もないなので、これは結構助かりますね!