AzureVMでお絵かきAI「Stable Diffusion」を構築する
2022-11-15
azblob://2022/11/16/eyecatch/2022-11-15-building-stable-diffusion-on-azure-vm-000.jpg

はじめに

こんにちは 最近冬服をいっぱい買いました本田です。洋服いっぱいほしい。

急に寒くなりすぎじゃないです? 肌掛布団と羽毛布団を出したり引っ込めたり忙しいですし、ヒートテックを着るか否か、判断が難しいです。

さて、今回ですが、現在話題のお絵かきAI、StableDiffusionをAzureで動かしてみたいと思います。

また、こういったものはAIが動くための環境自体の構築が何かと難しいものですが、今回はめちゃくちゃ楽に構築していきたいと思います。さて、元気に構築していきましょう。

1. Hugging Faceのアカウント作成

Stable Diffusionで使うモデルデータをcloneする際に、必要となります。

Hugging Faceにアクセスし、アカウントを作成してください。アカウント作成後、CompVis/stable-diffusion-v1-4へアクセスし、Agree and access repository をクリックします。アカウントのフルネームとパスワードはclone時に使いますのでメモしておいてください。

2. Azure VMの作成。

Stable Diffusionを動かすためのVMを作っていきます。

今回作成するVMはGPU付きのもので、一時間100円ほどの高価なVMです。止め忘れないように注意してください。

今回作成するVMの設定は以下です。

基本
VM作成
OS
Linux
イメージ
Data Science Virtual Machine - Ubuntu 20.04 - Gen2
サイズ
Standard NC4as T4 v3 (4 vcpu 数、28 GiB のメモリ)
ディスク
OS ディスクの種類
Standard SSD LR
管理
自動シャットダウン
オン
UTC +9, 21:00

今回大事なのはVMのサイズとイメージです。

サイズですが、Nvidia cuda Toolkitを使うので、NvidiaのGPUを積んでいるものを選んでください。Radeon GPUでもcudaを動かすことができるらしいのですが、かなりメンドクサイらしいので素直にNvidia GPUが載っているものを選びます。今回はNvidia Tesla T4が載っているNC4as T4 v3を選びました。

イメージはデータサイエンス用のものを使います。理由として、一番メンドクサイ部分であるツール群のインストールやバージョン合わせを省けるからです。このイメージを用いることでStable Diffusionの構築だけに集中できます。ありがとうMicrosoft。

あと自動シャットダウン設定もお忘れなく。お財布が危ないです。

3. Stable Diffusionの導入

まずはいろいろと更新を行います。10分ぐらいかかります。以下、対象VMにsshして入力します。

sudo apt update -y && sudo apt upgrade -y

更新が終わった後はVMの再起動を行います。sudo rebootなりポータルから再起動なりお願いします。

再起動に以下の手順でシェルに入力していきます。

# git lfsをインストール
sudo apt install -y git-lfs
# Github用のディレクトリ
mkdir Github
cd Github
# git lfsの有効化
git init 
git lfs install
# 本家はこっち -> https://github.com/CompVis/stable-diffusion.git
# Nvidia Tesla T4ではVRAMが足りないので最適化verを使う
git clone https://github.com/basujindal/stable-diffusion.git
cd stable-diffusion
conda init bash
# 5~10分ぐらいかかる
conda env create -f environment.yaml
cd ..
# データセットのclone
git clone https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
(Hugging Faceのアカウント情報を2回入力)
(入力後大きめのダウンロードが入るので3~5分ぐらい待機)
# ちゃんとダウンロードできたか確認
# 4.0G あったらOK
du -h ~/Github/stable-diffusion-v-1-4-original/sd-v1-4.ckpt
# データセットの配置
mkdir ~/Github/stable-diffusion/models/ldm/stable-diffusion-v1
cp -r ~/Github/stable-diffusion-v-1-4-original/sd-v1-4.ckpt ~/Github/stable-diffusion/models/ldm/stable-diffusion-v1/model.ckpt

ここまで出来たらbashの再起動を行います。sshを再接続するだけでOKです。

シェルの頭に(base)とついていたらOKです。

4. 画像の生成

# Anacondaの仮想環境の切り替えを行う
# シェルの頭が(ldm)になる
conda activate ldm
# Stable Diffusionでtxtから画像を生成
# VRAM最適化の代償に実行時間が長め
# 初回実行はダウンロードとか入るのでかなり長め
cd ~/Github/stable-diffusion
python3 scripts/txt2img.py --prompt "a photograph of solar system"
# 出力された画像はoutputs下のどこかにあります

途中でパッケージが足りないといわれたらpip installしてあげましょう。

promptの部分では生成してほしい画像に関する単語、文を入れてあげます。呪文とも呼ばれているらしいです。

今回は太陽系の写真を出力してもらいました。

生成された画像はこんな感じ。

お、いい感じの画像ですね。一枚ヘンテコな画像がありましたが、まあまあ。

もう一つぐらい生成してみます。ポン吉様のブログよりpromptを参考にしました。呪文と呼ばれる理由がわかる気がします。

python3 scripts/txt2img.py --prompt "1 7 th century flooded colonial village with broken aqueducts, light dust, by peter mohrbacher dan mumford nekro, cgsociety, pixiv, volumetric light, 3 d render"

出力結果はこちら

とてもよさそう。こういうのって見てるだけで楽しいですね。

こんな感じで皆様もドシドシ呪文を唱えて画像を生成してみてください。

おわりに

今回Stable Diffusionを構築するにあたって以下を参考にしました。