Google Colaboratoryのようにpythonが動かせてGPUも使えるサービスがあるらしいので触ってみる。
(2023-06-11: /tmp以下に全てをインストールする方法を末尾に追加)
目的
- Paperspace GradientというGoogle Colaboratoryのようなサービスの使い方を知る
- 無料枠の中でstable diffusion web uiを入れてAI画像生成する
動かしたというメモ。
登録して動かす準備ができるまで
流れに沿って進めれば難しいことは何もない。
https://www.paperspace.com/に行って右上のSIGN UP FREEをクリック。
GitHub、Google、メールアドレスで登録ができるので好きな方法で登録。
電話番号が必要。国が日本になっていることを確認して8012345678
のように080などの最初の0を抜いた番号を入れる。
電話番号を登録するとSMSで認証コードが届く。
名前とユーザーネームを入力して
gradientを選択。
質問に適当に答える。
適当にプロジェクト名を決める。
Notebooksを選ぶ。
CREATE
Start from Scratchを選ぶ。
Free-GPU、1時間から6時間までの範囲で自分が利用する時間を選んでSTART NOTEBOOK。GPUに空きがなくて使えないことがあるので、そのときは少し時間を置く。
左下のOpen in JupyterLabを選ぶ。New Fileから(ファイル名).ipynbを作成してこの画面から操作することもできる。
NotebookのPython3を選ぶ。
コードが書けるようになったら準備完了。
Stable Diffusion web UIのインストール
Paperspace Gradientにはシャットダウンしてもデータが残る永続的なストレージと、マシンを起動している間だけ使える大きめの一時的なストレージがある。無料枠ではデータを残せるストレージを5Gb分使える。
AUTOMATIC1111/stable-diffusion-webuiを動かすのに必要なスペースは
- webuiに800Mb
- torchなど必要なライブラリに4.6Gb
- モデルやVAEに数Gb
となっていて全てを永続ストレージに入れることができない。Google ColaboratoryでStable Diffusion web UIを使うときと同じように、使うたびに一時スペースにすべてインストールしてもいいが、せっかく5Gb使えるので少し工夫をしたい。
そこで今回はライブラリ、webuiの設定ファイル、生成した画像を永続ストレージに置くという方向でやってみる。
なお月に8ドル払うならこの永続ストレージが15Gbとなり、全て/storageにインストールしても問題ない。さらに良いGPUも使える。
ストレージに仮想環境を置く
初回だけ
%cd /storage
!pip install virtualenv
!virtualenv venv
!venv/bin/pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117
!venv/bin/pip install -U --pre triton
!venv/bin/pip install xformers==0.0.16rc425
Stable Diffusion web UIのclone
起動するたびにやる
%cd /tmp
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
モデルのダウンロード
起動するたびにやる。これはwgetで最近流行りのAbyssOrangeMix3のモデルとVAEをダウンロードする例。それぞれ/tmp/SD/modelsと/tmp/SD/VAEに保存。webuiの起動時にこのディレクトリを指定する。
!mkdir -p /tmp/SD/{models,VAE}
!wget https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3A1.safetensors -O /tmp/SD/models/AOM3A1.safetensors
!wget https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/VAEs/orangemix.vae.pt -O /tmp/SD/VAE/orangemix.vae.pt
gdownを使う方法もある。自分のgoogle driveからデータを転送できるとPaperspace公式ドキュメントも言っている。
インストールはpipでできる。しなくても最初からあるかもしれない。
!/storage/venv/bin/pip install gdown
Goolgeドライブに行き、転送したいファイルのリンクを取得する。右クリックなどから行ける。
一般的なアクセスをリンクを知っている全員に設定する。
リンクをコピーしてURLを得る。https://drive.google.com/file/d/{id}/view?usp=share_link
のようになっている。このidの部分を使う。
使用例。{id}
や{modelname}
などをそれぞれ置き換えて使う。ファイルサイズが500Mbを超えるときは&confirm=t
をつける。
# !mkdir -p /tmp/SD/{models,VAE} # ディレクトリがないとエラーが出るので必要なら先に作る。
!/storage/venv/bin/gdown "{id}&confirm=t" -O /tmp/SD/models/{modelname}
!/storage/venv/bin/gdown "{id}&confirm=t" -O /tmp/SD/VAE/{vaename}
webuiの起動
(2023-03-09:追記)--data-dir
を指定するよりconfig.jsonなどの設定ファイルの場所を指定するほうが不具合が少なくて済む。
%cd /tmp/stable-diffusion-webui/
!/storage/venv/bin/python launch.py --share --xformers --enable-insecure-extension-access --ckpt-dir /tmp/SD/models --vae-dir /tmp/SD/VAE --ui-settings-file /storage/config.json --ui-config-file /storage/ui-config.json --styles-file /storage/styles.csv --lora-dir /tmp/SD/lora
--data-dir
を指定する方も一応残しておく。
%cd /tmp/stable-diffusion-webui/
!/storage/venv/bin/python launch.py --share --xformers --enable-insecure-extension-access --ckpt-dir /tmp/SD/models --vae-dir /tmp/SD/VAE --data-dir /storage/sdwebuidata
生成されたリンク(https://(文字列).gradio.live
)にアクセスする。動いた。colabの無料枠で使えるGPUと比べると流石に遅いが、試す分にはいい。
保存先の設定
AIが生成した画像の保存先は/notebooks以下にするとシャットダウンしても消えない上に確認もしやすくて便利。SettingsのPath for savingに行き、デフォルトのoutputs/~の部分を/notebooks/outputs/~に変えてApply settings。
生成した画像の保存
生成した画像をダウンロードするときは全てzipに詰めて/notebooksに配置すると楽でいい。左のメニューから右クリックでダウンロードできる。colabよりはダウンロードが速い。もちろんwebuiから普通にsaveしてdownloadでもいい。
import datetime
dt_now = datetime.datetime.now()
timestamp = dt_now.strftime('%Y%m%d%H%M%S')
!zip -r /notebooks/{timestamp}.zip /notebooks/outputs/*
永続ストレージの空きに余裕が無いので限界を迎える前に掃除する。上で作ったzipは左クリックからDelete Permanently
で消す。
rm -r /notebooks/outputs/*
使い終わったら忘れずにマシンを止める
始めるときに指定した時間が来たら自動で止まるが、ここはしっかり止めて使わせてもらってるリソースを開放したい。
Open in JupyterLabで始めた場合は前の画面に戻ってから止める。微妙に分かりづらい。
不具合の対処
webuiが反応しなくなる
(最近トンネリングする外部ツールを使用するとアカウント停止の可能性があると聞いたので自己責任でお願いします。ngrokは確実に止まるらしい。)
私の環境だけかもしれないが、 デフォルトの縦512、横512以外のサイズで生成しようとすると、画像の生成自体はしているようだが画面に表示されず、その後webuiが操作を一切受け付けなくなるという不具合に遭遇した。boreを使うといいという情報を見たので使ってみる。
適当なところでboreをダウンロードして展開。
%cd /storage
!wget https://github.com/ekzhang/bore/releases/download/v0.4.0/bore-v0.4.0-x86_64-unknown-linux-musl.tar.gz
!tar -xf bore-v0.4.0-x86_64-unknown-linux-musl.tar.gz
!rm -f bore-v0.4.0-x86_64-unknown-linux-musl.tar.gz
boreを付けて起動。
%cd /storage/stable-diffusion-webui/
!/tmp/venv/bin/python launch.py --xformers --enable-insecure-extension-access & /storage/bore local 7860 --to bore.pub
どこかにbore_cli::client: listening at bore.pub:(ポート番号)
という文字列が出てくるのでhttp://bore.pub:(ポート番号)/
にアクセスする。そうするとwebuiにアクセスできて、生成する画像のサイズを変えても動き続ける。
httpな上にurlが単純すぎて怖いので何か他に良い方法があれば後で追記する。--secret
オプションを付けると認証を付けられそうだが、動かす方法がわからなかった。
参考
途中経過が死ぬ
webuiは画像の生成途中で途中経過を表示するが、このときにエラーを吐いてプログレスメーターと途中経過が消える。まだ途中なのにgenerateが押せるように見えてて良くないのでこの機能を消す。
SettingsのLive previewsにあるShow live previews of the created imageのチェックを外す。
おわり
少しややこしいことをした気がする。そのせいかcolabやローカルでは普段見ない不具合も出てきた。だがPaperspace GradientでStable Diffusion web UIを動かし、実際にAI画像生成ができることがわかったのは良かった。使いやすいサービスでした。
追記: 容量を気にせず全てを/tmp以下に配置する方法
ただし環境が保存されないので毎回入れ直しになる。
torch関係とxformersのインストール
%cd /tmp
!pip install virtualenv
!virtualenv venv
!venv/bin/pip install torch==2.0.1 torchvision==0.15.2 --extra-index-url https://download.pytorch.org/whl/cu118
!venv/bin/pip install --no-deps xformers==0.0.17
stable diffusion webuiなどのインストール
%cd /tmp
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
# ControlNet
%cd /tmp/stable-diffusion-webui/extensions
!git clone https://github.com/Mikubill/sd-webui-controlnet
# openpose modelをダウンロードする例
!wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_openpose.pth -O /tmp/stable-diffusion-webui/extensions/sd-webui-controlnet/models/control_v11p_sd15_openpose.pth
# モデルのダウンロード
!wget https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3A1_orangemixs.safetensors -O /tmp/stable-diffusion-webui/models/Stable-diffusion/AOM3A1_orangemixs.safetensors
!wget https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/VAEs/orangemix.vae.pt -O /tmp/stable-diffusion-webui/models/VAE/orangemix.vae.pt
webuiを起動
%cd /tmp/stable-diffusion-webui/
!/tmp/venv/bin/python launch.py --share --xformers --enable-insecure-extension-access --ui-settings-file /storage/config.json --ui-config-file /storage/ui-config.json --styles-file /storage/styles.csv
すみません、仮想環境を削除して元に戻すにはどうすればよいのでしょうか?
返信削除/storageにvenvフォルダがあるとして
削除!rm -r /storage/venv
で消せます。
ありがとうございます。ControlNetを導入しようとして失敗し、ストレージ容量を超えてしまい慌ててという状況でした。実際には素人ですが
削除%cd /storage
%rm -rf venv で消せましたが、多分間違ってますかね?
やはりControlNetを導入するのはこの環境では無理なのでしょうか?
方法があれば記事にして頂けると幸いです。
消すのはその方法でも大丈夫です。
削除この記事でやってる無料枠の5Gbにvenvを保存する方法だと容量がギリギリなんですよね。google colabのように毎回インストールし直すという形になりますが、/storageと書いているところを/tmpにして永続ストレージを使わないという方法もあります。
何か良い方法を思いついたら書こうと思います。
返信ありがとうございます。現環境で普通にWebUIからControlNetをインストールしてやらかしてしまいました。できれば無料枠の中でControlNetを使いたいので永続ストレージを使わない方向でも構いませんでので、方法を記事にして頂けたら幸いです。素人で厚かましいお願いですみませんが期待しています、
削除よろしくお願い致します。
運良くFree-GPUを取れたので/tmp以下に全てをインストールする方法をこの記事の最後に追記しました。
削除返信が遅くなりすみません、参考にさせて頂きやってみます。
削除ありがとうございます。
Jupyter Lab画面の左にstablediffusion webui等のstorageのディレクトリ(ショートカットみたいな)が表示できれば分かりやすいんですが、ファイル操作がむずいです。
返信削除/notebooksに表示したいディレクトリのシンボリックリンクを張るというのはどうでしょうか?例えば/storageを表示したいときは
削除!ln -s /storage /notebooks/storage
返信ありがとうございます。現在Jupyter Lab画面の左には,
削除画像を出力したoutputsフォルダと作成したnotebookが表示されています。
このコードはどのタイミングで入れてもOKでしょうか?またこのリンクは参照目的で(フォルダの追加やファイルの削除等)はできないものという解釈であっていますでしょうか?
すみません、容量を気にせず全てを/tmp以下に配置する方法の、torch関係とxformersのインストールで、xformersのバージョンを最新にするには、コマンドの変更はどうすればよいのでしょうか?現在の最新Verは0.0.20だと思うのですが、
返信削除!venv/bin/pip install --no-deps xformers==0.0.17のところを
削除!venv/bin/pip install --no-deps xformers==0.0.20でどうでしょうか
ありがとうございます、いけました。バージョンアップしても体感できるほどの速さは出ないんですね、、、、。
削除