GPU搭載ノートPCにStable Diffusion Web UIを導入して本格的に画像生成をやり始めた。
外出中も画像生成がやりたくて、そこそこ重量(GPU搭載機は大抵2kg強)のあるノートPCを持ち歩いたりしている。しかし、やはり重さには耐えられられず、長時間の外出には軽量ノートPCしか持っていかなかったする。
Google ColabのGPUリソースを利用して画像処理や機械学習プログラムを作ったりしたことはあったが、いままで画像生成には使ったことはなかった。Google Colabの無料プランでは最近Stable Diffusion Web UIの使用に制限がかけられるようになって、10分位使うと警告が表示されるようになったそうだ。この警告を無視してそのままを使い続けると、アカウントが停止されてしまうんじゃないだろうか。
Google ColabでStable Diffusion Web UIを動かして画像生成を行う方法が掲載されているサイトがあるが、現在無料プランではこの方法は使えないので、やりたかったら有料プランに移行するしかない。小生もこれからGoogle Colabで画像生成をやってみよう思っていた矢先に、この情報を知った。
そこで、Google Colab無料プランに代わる方法を探してみたら、Amazon SageMaker Studio Lab(SageMaker Studio無料プランの名前)でGPUリソースを使えることを知った。これとngrokというサービスを組み合わせると、SageMakerを利用してStable Diffusion Web UIによる画像生成ができるらしい。さっくこの方法を試してみた。
SageMaker Studio Labのアカウント作成
現状SageMaker Studio Labのアカウトはリクエスト方式で作成するらしい。
下のサイト画面の[Request free account]
を押して、開いた画面にメールアドレスと要求されている情報を入力すればアカウント作成申請が出せる。
実際にやってみると、小生の場合は、アカウント作成申請を出してから24時間で申請認可メールが送信されてきた。
アカウント申請認可メールに記載されているリンクにアクセスすると、SageMaker無料プランの新しいアカウントを作成することができる。
ngrokのアカウント作成
ngrokというのは、ローカルPC上で稼働しているHTTPサーバーを外部公開できるサービスだ。無料と有料プランあるが、無料プランでも十分な機能が使えて、今回の目的に問題なく利用できる。
ngrokのサイトのトップ画面から[Sign up for free]
を押して、開いた画面に必要な情報を入力すればアカウントを作成できる。
ngrokのアカウントを作成したら、Authtokenというものを記録しておく。これがngrokのサービスを利用するためのAPIトークンになる。
SageMaker版Stable Diffusion Web UIノートブックの作成
SageMaker StudioはJupyter Notebookを使ってPythonプログラムを実行できるサービスだが、SageMaker用のStable Diffusion Web UIノートブックを公開掲載しているサイトがある。
このGitHubページに掲載されているノートブックを利用すると、簡単にSageMaker上でStable Diffusion Web UIを実行することができる。
このページのSageMaker用ノートブックはモデル別に分かれており、一つの作者モデルとStable Diffusion Web UIを組み合わせた全部で150超もの種類が用意されている。HunggingFaceとCivitai上の有名なモデルがほぼ網羅されており(逆に、このサイトに掲載されているモデル名をCivitaiで検索することで、どんなモデルが有名で良く利用されているのか知ることができた)、この中から好みのモデルが組み込まれたものを選んでノートブックを作成すると、そのモデルを使った画像生成がすぐに始められようになっている。ここまでやってくれるのは素晴らしいことだ。感謝の意を表しながら、有り難く使わせてもらおう。
本ページ上の適当なモデルのノートブックを選んで、その右側の[nightly]
というリンクをクリックする。
すると、SageMakerのサイトへ移動して下のような画面になる。この画面の[Compute type]
のGPU
を選んで[▶ Start runtime]
を押すと、GPUインスタンスが開始される。GPUインスタンスが開始されると、[Copy to project]
が押せる状態になる。
ただし、[▶ Start runtime]
を押しても、警告が表示されてGPUインスタンスが開始されないときがある。利用ユーザーが多くGPUインスタンスに空きがないとこうなるのだろう。この場合は、しばらく待ってから何回か上の操作を繰り返すと、GPUインスタンスを取得できるようだ(ただし、時間帯によっては何度トライしてもGPUインスタンスを取得できないときがある。その場合は、数十分待ってから再度トライしてみると良い)。
上の画面の[Copy to project]
を押すと、続いて下のような画面が表示されるので、ここでは[Copy Notebook Only]
という選択肢をクリックする。
さらに、下の画面が表示されたら、そのまま[Select]
を押す。
すると、新しいノートブックが作成されて、その中に上述のGitHubページで選択したリンク元のソースがコピーされる。
SageMaker版Stable Diffusion Web UIノートブックの実行
SageMaker上にノートブックが開いたら、その中のソースコードの一番下の行に"enter_ngrok_authtocken_here
"という記述があるので、これを前述のngrokのAuthtokenの値に置き換える。
ここまでの操作が済んだら、本画面上部の▶
ボタンを押せば、このノートブックが実行される。
数分待つと、下のようなhttps:/**********.ngrok-free.app
というリンクが存在するメッセージが表示されるので、このリンクをクリックする。
すると、下のような画面が表示される。
この画面の[Visit Site]
ボタンを押すと、ブラウザ上にStable Diffusion Web UIの画面が起動する。あとは、この画面を使って画像生成を行うことができる。
補足情報
SageMaker上でStable Diffusion Web UIのノートブックを実行したときに、下のようなエラー・メッセージが表示されてノートブックが停止することがある。
TypeError: __init__() got an unexpected keyword argument 'socket_options'
その場合は、ノートブック内のソースコードに以下のような一行を追加して、再度ノートブックを実行すると解決できる。
!mkdir /home/studio-lab-user/content %cd /home/studio-lab-user/content %env TF_CPP_MIN_LOG_LEVEL=1 %conda install -q -y aria2 %conda install -q -y libglib2.0-0 %conda install -q -y glib %pip install -q opencv-python-headless huggingface-hub !pip install -q torch==2.0.0+cu118 torchvision==0.15.1+cu118 torchaudio==2.0.1+cu118 torchtext==0.15.1 torchdata==0.6.0 --extra-index-url https://download.pytorch.org/whl/cu118 -U !pip install -q xformers==0.0.18 triton==2.0.0 -U + !pip install -q httpx==0.24.1 -U !git clone -b v2.2 https://github.com/camenduru/stable-diffusion-webui .... .... .... .... .... .... .... ....
SageMaker版Stable Diffusion Web UIノートブックの停止
Stable Diffusion Web UIを使い終わったら、実行中のノートブック・セッションを停止するのを忘れないようにしよう。
ブラウザ上にSageMakerのセッション開始画面が残っているなら、それを表示させる。あるいは、ノートブック画面からメニュー[Amazon SageMaker Studio Lab]
> [Open Project Overview Page]
を選ぶと同じ画面が開くので、この中の[■ Stop runtime]
を押すと、現在のセッションが停止される。
こうしておくと、残りのセッション時間分は後でまた続けて使うことができる。1回のセッションで最大4時間、24時間で合計4時間使用可能だ(少し前まで合計8時間だったらしい)。
SageMaker版Stable Diffusion Web UIにモデルを追加する方法
SageMaker無料プランには15GBの永続ストレージが付属している。
15GBでは複数のモデルを一度に使い分けるのは無理があるが、SageMaker用Stable Diffusion Web UIノートブックのファイル構成はオリジナルと同じなので、モデルファイルをコピーしてやればモデルを追加することはできる。
SageMakerノートブックの左上のフォルダ・マークをクリックすると左側にファイルビュー・パネルが開くので、ここでディレクトリをcontent/models/Stable-diffusion
と辿って、ファイルビューの中にモデルファイルをドラッグするか、あるいは本画面上部の上向き⬆ボタンをクリックして、モデルファイルを選択してやればコピーできる。
追加したモデルを利用するには、本画面上部の■
を押して一旦を停止させてもう一度▶
ボタンを押してノートブックを再起動するか、あるいはStable Diffusion Web UI画面の[Stable Diffusion checkpoint]
メニュー横の更新ボタンをクリックすれば選択できるようになる。
一つのモデルファイルのサイズは大体2〜10GB位なので、追加できたとしても全部で2〜3個のモデルが限界ではないだろうか。生成作成される画像分のストレージ空き容量も考慮する必要があるので、モデルを変更したければ、既存のモデルファイルを削除して新しいものをコピーした方が良い。
本記事の方法を使えば、(画像生成処理を実行しているのはSageMakerのGPUインスタンスなので)低スペックなPCでも画像生成を行うことができる。外出中にインターネットが利用できる場所で数時間の空きがあったら、そのときに画像生成をやることができる。手軽に始められるのにStable Diffusion Web UIが使えるので、いまのところこの方法が気に入っている
現在はSageMakerのGPUインスタンスを取得するのに、それほど待たされない状況だ。しかし、SageMakerの無料プランでGPUリソースの利用者が増えてくると、さらにセッション時間が減ったり、将来Google Colabの無料プランと同じように制限される可能性もあるかもしれない。クラウドGPUリソースを使って本格的に画像生成をやるなら、やはりいずれかのコンピューティングサービスの有料プランを利用する方が良いのだろう。
【参照リンク】