コンテンツへスキップ

Amazon SageMaker利用の疑問と無料利用する上での節約術

私がStable Diffusion web UIを利用している環境は、Amazon SageMaker Studio Labであり、無料の枠で利用しています。今回は、こちら環境を使う流れを、戸惑うポイントを交えながら説明したいと思います。

Amazon SageMaker Studio LabWindowsではなく、Linuxの環境ですのでWindowsのようにアイコン等をクリックしたりして操作(GUI操作)するのではなく、CUI(コマンドで操作を行う)ためLinuxコマンドを知っていた方が良いので、Linuxコマンドの説明も交えたいと思います。

知識ある方には不要かと思いますので読み飛ばしてください。

Amazon SageMaker Studio Labの起動・サインイン

まずは、Amazon SageMaker Studio Labにアクセスします。URLはこちらです。

https://studiolab.sagemaker.aws/

すでにアカウントを生成している前提で進めますが、Amazon SageMaker Studio Labのアカウントを生成していない方は画像の左下の「Request free accout」から指示に従ってアカウントの新規作成から申請を完了してください。

サインインは画像右上の「Sign in」を押してください。

E-mailusername を入力し、パスワードを入力して、サインインします。

すると、以下のようなMy projectという画面が表示されます。

プロジェクトを開く

CPU/GPU環境の切り替えボタンがありますが、Stable Diffusion web UIを利用する場合はGPUを選択します。

Runtime remaining」は、無料枠では利用時間に制限がありますので、利用可能な残り時間がカウントダウンされます。

・CPU利用: 4h/日 x2セット
・GPU利用: 4h/日

▶Start runtime」を押すことで環境利用を開始することができます。

Amazon AWS内ではVirtual Machineの割り当て処理が稼働します。割り当てが完了したら「プロジェクトを開始する」という流れになります。

パズルを解く

▶Start runtime」という再生マークの付いたボタンを押すと、「パズルを解く」という画面が表示されます。

初めてこれを見たときは、何をするのかよくわかりませんでした。

パズルの意味は、車でどの位置に進んだかを当てることが目的です。
四角いブロックは上空から見たビルを意味しているようで、ビルの間が道路を表しています。ビルの高さによって経路が見えなくなるような想定で、見えない部分を想像しながら、どこにたどり着くかを当てるゲームです。ゴール位置をクリックして「送信」ボタンを押して回答し、正解だと次の画面に進めます。

黄色い線は説明用に作成したものです。黄色の線は、私が予想した経路で、黄色●が予想したゴールになります。

Open project」という青丸のボタンを押して開始します。ただ、サーバが込み合っていると、クイズに正解しても、「込み合っているので時間を置いてください」とメッセージが出るので、しばらく待つか、何度もクリックしクイズに何度も答えることになります。土日は非常に込み合っている印象で数十分待つこともありすので、待ちたくない方は有料プランを契約するのが良いでしょう。

プロジェクトが開くとノートブックが表示されますので、ノートブックを実行(再生)して、Stable Diffusion web UIを起動して利用しする流れとなります。

今回は、Stable Diffusion web UIを使う上で必要な、環境の把握、整備について話を進めたいと思いますので、Stable Diffusion web UIの操作方法についてはほかの記事を参照してください。

ターミナルを起動し、コマンドを実行

Amazon SageMaker StudioLabフォルダ操作は、左のフォルダマークが並んだ部分がWindowsのエクスプローラのようなインターフェースになっていますので、フォルダを辿ってコピー・削除・ダウンロードなどの操作ができます。Amazon SageMaker StudioLabの環境はWindowsではなく、Linuxですのでフォルダと呼ばずディレクトリと呼びます。

Linuxをコマンド操作するためには、Windowsのコマンド(またはDOS画面、PowerShell画面)に相当する、ターミナル画面を起動します。

起動は、File > New > Terninal とメニューを辿って起動します。

Windowsのコマンド(またはDOS画面、PowerShell画面)に慣れている人は違和感はないと思いますが、不慣れな方にとっては難しいと思いますので、詳しく説明していきます。

「$ 」はプロンプトと呼び、プロンプトの後に、コマンドを入力して操作します。

Amazon SageMaker Studio Labのディレクトリ操作

「$ 」の左の文字列は、ディレクトリ(フォルダ)階層を意味しています。

(studiolab) studio-lab-user@default:~$ 

Stable Diffusion web UIはどこの階層にインストール(保存)されているのか、更にその中にモデルControlNetなどはどのようなフォルダ階層に保存されているかなど疑問は多いと思います。ゆっくり見ていきます。

ターミナルを起動した段階では、どの階層に自分がいる(カレントディレクトリ)のでしょうか。

カレントディレクトリは「pwd」というコマンドで確認できます。

(studiolab) studio-lab-user@default:~$ pwd
/home/studio-lab-user

コマンドを実行(エンターキー押下)した後に、次の行に結果が表示されています。
/home/studio-lab-user」がカレントディレクトリのようです。
少し深い階層まで確認してみましょう。

(studiolab) studio-lab-user@default:~$ pwd
/home/studio-lab-user
(studiolab) studio-lab-user@default:~$ ls
1_6.ipynb  content  embeddings  notebook  sagemaker-studiolab-notebooks  stable_diffusion_1_5_webui_sagemaker.ipynb
(studiolab) studio-lab-user@default:~$ cd content/
(studiolab) studio-lab-user@default:~/content$ ls
stable-diffusion-webui
(studiolab) studio-lab-user@default:~/content$ cd stable-diffusion-webui/
(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui$ ls
CHANGELOG.md  config_states          javascript     params.txt                 scripts                      webui-user.bat
CITATION.cff  configs                launch.py      pyproject.toml             style.css                    webui-user.sh
CODEOWNERS    embeddings             localizations  repositories               styles.csv                   webui.bat
LICENSE.txt   environment-wsl2.yaml  log            requirements-test.txt      test                         webui.py
README.md     extensions             models         requirements.txt           textual_inversion_templates  webui.sh
__pycache__   extensions-builtin     modules        requirements_versions.txt  tmp
cache.json    html                   outputs        screenshot.png             ui-config.json
config.json   interrogate            package.json   script.js                  webui-macos-env.sh
(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui$ 

覚えておくと便利なLinuxコマンド

覚えておくと役に立つlinuxコマンドに絞って説明します。

pwd::現在のディレクトリを表示
ls:ファイル・ディレクトリのリストを表示
cd:ディレクトリの移動(change directory)

Linuxで「.」は現在のディレクトリ、「..」は1つ上のディレクトリを意味します。
よって、「cd ..」 は1つ上のディレクトリに移動します。

Stable Diffusionのインストールフォルダは、以下のディレクトリになります。

(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui$ pwd
/home/studio-lab-user/content/stable-diffusion-webui

Stable Diffusion web UIで、押さえておきたいフォルダ構成

Stable Diffusion web UIを使って行くうえで、把握しておくべきディレクトリ構成を紹介します。
以下のフォルダを把握しておけば、モデルの入れ替えや、ダウンロードしたファイルの設置で戸惑うことはないと思います。

種別フォルダ
生成画像content/stable-diffusion-webui/outputs
モデルcontent/stable-diffusion-webui/models/Stable-diffusion
VAEcontent/stable-diffusion-webui/models/VAE
ControlNetモデルcontent/stable-diffusion-webui/extensions/sd-webui-controlnet/models
Negativeプロンプトcontent/stable-diffusion-webui/embeddings/negative
Stable Diffusion web UIの主なフォルダ

SageMaker無料利用でのディスク容量の節約術

Amazon Sagemaker Studio Labを無料の範囲内で利用する場合、ディスク容量の制約は、15GBです。Stable Diffusionのモデルファイルは数GBありますので、15GBは非常にシビアな世ディスク容量になります。

Amazon SageMaker Studio Lab は、無料の機械学習 (ML) 開発環境であり、コンピューティング、ストレージ (最大 15 GB)、セキュリティをすべて無料で提供し、誰でも ML を学んで実験できます。

機械学習のための無料開発環境 – JupyterLab – Amazon Web Services

私の環境では、モデルファイル1つと、VAEモデル1つを保存しています。あとは、ControlNetのモデルが3つ保存されている状況です。

ディスク容量の確認

ディスク容量の残量を確認してみます。
ディスクの利用状況の確認は「df」コマンドを使用します。

15GBがディスク容量ということですが、Size=15GB にはなっていません(なぜそうなるのか良くわかておりません)。
利用する中で分かってきたのですが、こちらの「/dev/nvme1n1 25G 25G 124M 100% /home/studio-lab-user」という記載の、124Mが利用可能(Avail)なディスク残容量となります。

(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui$ df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay          32G   24K   32G   1% /
tmpfs            64M     0   64M   0% /dev
tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
shm             4.0G     0  4.0G   0% /dev/shm
/dev/nvme0n1p1   50G   14G   37G  28% /opt/.sagemakerinternal
/dev/nvme1n1     25G   25G  124M 100% /home/studio-lab-user
devtmpfs        7.8G     0  7.8G   0% /dev/tty
tmpfs           7.8G     0  7.8G   0% /proc/acpi
tmpfs           7.8G     0  7.8G   0% /sys/firmware

124MBしか、残容量が無いのでこれでは追加でモデルファイルを導入することは難しいです。
また、画像生成を行っていくと生成した画像が「output」ディレクトリに蓄積されるため、残容量がなくなると生成した画像が保存できないというエラーが表示され、それ以上画像生成ができなくなります。

不要ファイルを削除してディスク容量を確保

Amazon Sagemaker Studio Labを無料枠で利用する場合は、こまめに不要なファイルを削減したりモデルを導入する場合は容量が足りなくなりそうであれば、前のモデルを削除して新しいモデルをアップロードする等のメンテナンスが必要になります。

ファイルの削除は左のペインのフォルダを辿ってファイルを選択して削除するというGUI操作が可能です。

ゴミ箱ディレクトリ内のファイル削除

上記のGUIで削除する方法では、表示上は削除されたように見えても、Windowsでいうゴミ箱に残っているという状態になります。

以下ようにlsコマンドでゴミ箱の状態を確認してみます。少ないですが6.4MBのファイルが残っています。

(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui$ ls -al -h ~/.local/share/Trash/files 
total 6.4M
drwx------ 2 studio-lab-user users 4.0K Aug 20 15:13 .
drwxr-xr-x 4 studio-lab-user users   31 Aug  1 15:52 ..
-rw-r--r-- 1 studio-lab-user users 441K Aug  7 14:35 00000-4243843780.png
-rw-r--r-- 1 studio-lab-user users 446K Aug  7 14:35 00001-4243843780.png
-rw-r--r-- 1 studio-lab-user users 446K Aug  7 14:36 00002-4243843780.png
  :
  :

それでは、ゴミ箱のファイルを削除します。
削除するコマンドはrmコマンド(remove)になります。スペースを空けて「-rf」というオプションを指定していますが、「本当に消しますか?」という確認なしに、強制的にディレクトリも削除するというオプションです。トップディレクトリで「rm -rf *」なんて実行すると綺麗さっぱり、すべて消されてしまいますので、カレントディレクトリがどこなのかpwdコマンドで確認することを心がけましょう。

(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui$ rm -rf ~/.local/share/Trash/files/*
(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui$ ls -al -h ~/.local/share/Trash/files 
total 0
drwx------ 2 studio-lab-user users  6 Oct  8 16:18 .
drwxr-xr-x 4 studio-lab-user users 31 Aug  1 15:52 ..

削除してファイルを確認すると今度は、「total 0」となっておりゴミ箱の中身は何もなくなりました。

それでは、改めて容量を確認します。
grep コマンドは指定した文字を含むものを抽出するコマンドです。これをdfコマンドの後に、パイプ「|」で繋ぐことで、dfコマンドを実行した結果の中から、さらに指定した文字を含む行に絞ることができます

(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui$ df -h | grep -E 'Avail|home'
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme1n1     25G   25G  131M 100% /home/studio-lab-user

100%利用になっているのは、変わりませんがAvailが少し増えましたね。

生成画像を削除してディスク容量を節約

Stable Diffusion web UIで消去しても良いファイルは、自身で導入したモデルファイルや、NegativeプロンプトのEmbering、LoRA、ControlNetのモデルや、スクリプトなどになります。

当然、Stable Diffusion web UIのシステム上のプログラムは消せません。特に消すべきファイルやディレクトリ(フォルダ)は、画像生成した結果を保存しておくディレクトリになります。

(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui/outputs$ cd /home/studio-lab-user/content/stable-diffusion-webui/outputs
(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui/outputs$ ls
extras-images  img2img-grids  img2img-images  txt2img-grids  txt2img-images

/home/studio-lab-user/content/stable-diffusion-webui/outputs」ディレクトリ以下に更に、txt2img、img2img、更にそれぞれのグリッド生成した画像の4つのディレクトリに分かれ、さらにそれぞのれのディレクトリ内は日付ごとに画像生成ファイルが保存されています。

(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui/outputs$ du . -h
0       ./.ipynb_checkpoints
15M     ./txt2img-images/2023-10-07
15M     ./txt2img-images
0       ./img2img-images
0       ./txt2img-grids
0       ./img2img-grids
0       ./extras-images
15M     .

上記は、「du」コマンドで容量を確認した結果です。15MBの画像ファイルが存在しますので、こちらを削除していきます。

(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui/outputs$ rm -rf ./*

dfコマンドで容量を確認してみると、容量が増えていることが分かります。

(studiolab) studio-lab-user@default:~/content/stable-diffusion-webui/outputs$  df -h | grep -E 'Avail|home'
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme1n1     25G   25G  146M 100% /home/studio-lab-user

しかし、喜んでもいられません。146MBの残量で、やりくりする必要があるということです。

まとめ

今回は、SageMakerでStable Diffusion Studio Labを利用するうえで、分かってしまえば簡単ですが最初に躓きそうな起動方法や、Windowsユーザはあまり使わないLinuxコマンドの使い方に触れ、無料枠で利用する為の節約術について、ご紹介しました。

モデルファイルは色々試したいですが容量不足で1つ程度しかモデルファイルは保存できません。よってモデルファイルの入れ替えが必要になりますが、2~4GBのモデルファイルのアップロードに数十分程度かかるのが悩みです。アップロードを数分で完了させる方法については別の機会にご紹介したいと思います。

今回は、SageMakerのアカウントやStable Diffusion web UIの導入が終わっている前提の説明となりましたが、そもそもStable Diffusion web UIってどうやってSageMakerで動かせば良いの?という方もいらっしゃるかも知れませんね。

SageMakerでStable Diffusion web UIの利用者は非常に少ないと想像していますが、ニーズが高いようでしたら早めに記事を書きたいと思いますので、ご希望ございましたらコメントに要望をお寄せください。