コンテンツへスキップ

SagemakerでStable Diffusionを無料利用する上での工夫ポイント

前回は、Amazon SageMaker Studio Lab.を使い始めた段階で躓きそうな、ログインの方法や、覚えておくと便利なLinuxコマンドのご紹介をしました。

今回は、ご紹介しきれなかったSageMaker環境を無料で利用する上での工夫ポイントについてご紹介してきます。

Amazon SageMaker Studio Lab.を利用した経緯

そもそも、なぜAmazon SageMaker Studio Lab.を利用することになったのかについてです。
私がStable Diffusion web UIを使って、AI画像生成に挑戦してみようと調査し、Google Colaboratoryで環境を作り、いよいよ動作させる段階でGoogle Colaboratoryでエラーが発生し使えませんでした。調べた結果、Stable Diffusion web UI(AUTOMATIC1111)は利用者が増えすぎため(?)か、Google Colaboratoryで無料での利用ができなくなったようです。

しかも運悪く、私が利用し始めた少し前からということでした。そして代替の環境でStable Diffusion web UI(AUTOMATIC1111)を無料枠で利用できる環境は、Amazon SageMaker Studio Lab.と知り現在に至ります。

Amazon SageMaker Studio Lab.無料利用における利用制限

無料で利用させていただいておりますので、当然厳しい利用制限があります。

制限①:日当たりの利用時間
制限②:ストレージ容量

制限①:日当たりの利用時間

プロセッサ(CPU/GPU)により制限が異なります。
Stable Diffusion web UIで、AI画像生成を行う際はGPUを使用しますのでGPU4h/日と覚えておけば良いでしょう。GPUが利用できる時間を節約するため、私はファイルの削除や、モデルファイルの設置などメンテナンスを行う際はCPUで利用しています。

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

利用制限がリセットされる時間がいつなのか最初まったく分かりませんでした。
例えば、毎日AM0:00にリセットされるのであれば分かりやすいですが、Amazon SageMaker Studio Labの場合は違います。
公式のドキュメントが見つからなかったので、使っていての感触の話にはなりますが、その日の使い始めの時間がリセットタイムのようです。

ン?難しいですね。例えばですが、

今日(11月1日とする)の13:00からGPUを使い始めた場合、4h連続で使用した場合は、17時で利用できなくなります。そして、利用開始が可能な時間は、翌日(11月2日)の13:00になります。

11月2日の13:00に解除されますが、利用開始が15:00の場合、その次の日に利用開始できるのが15:00になります。前日は、13:00から利用開始が可能だったのに、他の日は15:00が利用開始可能となるため毎日利用時間を覚えていないとランダムに感じてしまい、最初のころは一体何時にリセットされるのか把握できませんでした。

制限②:ストレージ容量

モデルファイルなどをインストールする際など、ストレージ容量が気になります。

ストレージ容量:
 15GB/アカウント

使い始めたころは、自分が何GB消費しているのか調べ方が分からないでしょう。やり方はターミナルを起動して、以下のコマンドを実行します。

$ df -h

dfコマンドはLinuxコマンドで、Windows、MacのGUI(ボタンやアイコンをマウスでクリックしたりする方法)操作しかされたことが無い方にとって、取っ付きにくいかもしれませんので、こちらの記事で詳しく解説していますので参考にしてください。Stable Diffusion web UIのフォルダ構成や、モデルファイル、LoRA等のインストールフォルダや、覚えておくと便利なLinuxコマンド等も解説しています。

私が、dfコマンドで容量を調べた結果は利用可能な容量は146MBでした。これは非常に少ない容量です。
モデルファイルを1つインストールし、ControlNetのモデルをいくつか入れておりますが、必要最小限の構成ですが、残り僅かの状態です。Stable Diffusion web UIを最新版のv1.6にアップグレードしてから残量が少なくなった印象です。

以前は2GB程度空きがありましたが、モデルファイルは1つ2GB~4GBは必要となりますので、それでも小さ目のモデルで2つ、大きなモデルですと1つしか入りません。よって好きなタイミングでモデルを切り替えることは難しいです。モデルを切り替えて「X/Y/Z Plot」で比較するなんて豪華な検証は到底できません。そして現在はモデルファイル1つでギリギリで、生成画像を小まめに削除しながら利用しております。

更に言うとパフォーマンスの上がったSDXLのモデルファイル(sd_xl_base_1.0.safetensors)は1つで6.7GBほどありますので、SDXLは試してみたいですが使うことができません🤣。

https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/tree/main?source=post_page—–ed7bca60e426——————————–

ストレージの節約運用

モデルが1つしか入らないのであれば、使い終わったら削除して、他のモデルをアップロードすることになります。

アップロードするには、Sagemaker Studio Labの左ペインのファイルブラウザのフォルダにドラッグ&ドロップすれば良いので簡単です。
しかし、この方法でアップロードすると時間が非常に掛かってしまいます。例えば4GBほどのモデルファイルをアップロードした際に15分ほどかかりました。

ただでさえ制限のあるGPU利用時間に、ファイルアップロードを待つだけで15分消費するのは非常に勿体ないですね。

節約のためにモデルファイルのローテーションは、GPU利用時間が上限に達して利用できなくなった後にプロセッサをCPUに切り替え、翌日に備えて使いたいモデルをアップロードしていました。

しかしこれは非常にストレスが溜まります。AI画像生成途中に、気が変わり別のモデルを使いたくなったら、CPUに切り替えることもできますが、SageMakerは利用ユーザが多いと待ち状態になるため、再度Projectを再開してGPUを利用できるようになるか分かりません。

Amazon SageMakerへのアップロードが遅い

Amazon SageMakerへのアップロードが遅いと申しましたが、体感ではなく実測してみました。

例えばICBNPのmodelファイルを、SageMakerにアップロードする場合どれくらい時間がかかるでしょうか?モデルファイルサイズは1.99GBです。

https://civitai.com/models/28059/icbinp-i-cant-believe-its-not-photography

手順
①CIVITAIのサイトでダウンロードボタンを押し、ローカルPCにダウンロード
②Amazon SageMaker Studio Lab にドラッグ&ドロップし、アップロード

①ローカルPCにダウンロード

ダウンロードの予想時間が出ていますが、残り15分となっています。この時点でストップしたいですが我慢してまってみます。実際は、11分21秒でダウンロードが完了しました。ちなみに我が家のネットワーク環境は下り最大1GBbpsの光回線ですので、標準的なスペックかと思いますが、今日は特段遅いように感じます。

②SageMakerにアップロード

モデルファイルの格納先は、以下になります。

/home/studio-lab-user/content/stable-diffusion-webui/models/Stable-diffusion/

こちらのフォルダを辿っていきドラッグ&ドロップします。

大きなファイルをアップロードすると警告が出ます。無視してUploadボタンを押します。

ウィンドウの下方に、Uploading… と進捗がでますが、なかなか進みません。

アップロード時間

アップロードに必要な時間は、45分32秒でした。

モデルファイルを、ローカル環境(パソコン)にダウンロードし、Amazon SageMaker Studio LabのStable Diffusion web UIのモデルファイルを格納するディレクトリにアップロードするまでに、合計56分53秒も掛かってしまいました(思ったより長かったです)。これをモデルファイルを入れ替えるたびに待つのは時間の無駄でしかないです。

【訂正】
後日、同じことを実施したところ、ローカルへのダウンロードが1分、SageMakerへのアップロードが15分程度でした。1/3に短縮しましたがアップロードに15分は待てない時間ですね。

SageMakerへのアップロードの高速化

私は、別の方法でStable Diffusion web UIの大容量のモデルファイルをアップロードを高速で転送する方法を行っています。

結論から申しますと、SageMakerへのモデルファイルアップロードを約60秒以内に完了させられます。ICBNPのmodelファイル(1.99GB)のアップロードは36秒でした。ネットワーク環境にもよりますが、ドラッグ&ドロップでの方法の1/10程度には短縮されると思います。

その方法を知りたい方、有料記事となりますので無料のユーザ登録・ログインをしていただき、記事をご購入頂くと以降の記事がご覧いただけるようになります。(5681文字:実行ログ文字含む)

・参考記事の販売です。動作を必ずしも保証するものではございません。
・説明先のサイトの画面等は変更される可能性があり本サイトの説明と異なる場合がありあります
・操作に関するサポートは承っておりません。不明点をコメント頂ければ可能な範囲で記事を修正していきます。(とはいえ、ある程度のサポートはすると思います)

SageMaker高速転送

SageMakerに大容量ファイルを高速でアップロードする方法についてご説明します。

¥450
¥45 (税額)
合計金額: ¥495

記事のご購入ありがとうございます。

SageMakerにモデルを高速でアップロードするには、Linuxコマンドの wget コマンドを利用します。wgetコマンドはプロジェクトページで、ターミナル(Terminal)を立ち上げコマンドを利用します。

Linuxコマンドは初めてという方でもコピペするだけですので、ご安心ください。

ファイルNewTerminal と辿ってい、起動してください。

先ほどは、一旦ローカル環境(パソコン)にダウンロードしてから、SageMakerにファイルをアップロードするという2度手間をしていました。

今回の方法は、ダウンロード先から、直接SageMakerにファイルを転送します。つまり、ローカルPCを仲介しないでそのまま転送します。

まずは具体的例(ICBNPのmodelファイル)を見て使い方のイメージから説明します。

ファイル転送コマンド・実行例(36秒)

実際に使ったコマンドが、こちらになります。

wget "https://civitai.com/api/download/models/121557?type=Model&format=SafeTensor&size=pruned&fp=fp16" -O /home/studio-lab-user/content/stable-diffusion-webui/models/Stable-diffusion/icbinpICantBelieveIts_seco.safetensors

それをターミナルで実行した結果が、以下になります。

(studiolab) studio-lab-user@default:~$ wget "https://civitai.com/api/download/models/121557?type=Model&format=SafeTensor&size=pruned&fp=fp16" -O /home/studio-lab-user/content/stable-diffusion-webui/models/Stable-diffusion/icbinpICantBelieveIts_seco.safetensors
--2023-11-10 09:40:50--  https://civitai.com/api/download/models/121557?type=Model&format=SafeTensor&size=pruned&fp=fp16
Resolving civitai.com (civitai.com)... 104.18.22.206, 104.18.23.206, 2606:4700::6812:16ce, ...
Connecting to civitai.com (civitai.com)|104.18.22.206|:443... connected.
HTTP request sent, awaiting response... 307 Temporary Redirect
Location: https://civitai-delivery-worker-prod-2023-11-01.5ac0637cfd0766c97916cefa3764fbdf.r2.cloudflarestorage.com/65239/model/icbinpSECOPruned.sfDd.safetensors?X-Amz-Expires=86400&response-content-disposition=attachment%3B%20filename%3D%22icbinpICantBelieveIts_seco.safetensors%22&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=e01358d793ad6966166af8b3064953ad/20231110/us-east-1/s3/aws4_request&X-Amz-Date=20231110T094050Z&X-Amz-SignedHeaders=host&X-Amz-Signature=cbe232003e19204507f5b9c6694817e456dc4b172c84e97be6b9fb7f5e5995c2 [following]
--2023-11-10 09:40:50--  https://civitai-delivery-worker-prod-2023-11-01.5ac0637cfd0766c97916cefa3764fbdf.r2.cloudflarestorage.com/65239/model/icbinpSECOPruned.sfDd.safetensors?X-Amz-Expires=86400&response-content-disposition=attachment%3B%20filename%3D%22icbinpICantBelieveIts_seco.safetensors%22&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=e01358d793ad6966166af8b3064953ad/20231110/us-east-1/s3/aws4_request&X-Amz-Date=20231110T094050Z&X-Amz-SignedHeaders=host&X-Amz-Signature=cbe232003e19204507f5b9c6694817e456dc4b172c84e97be6b9fb7f5e5995c2
Resolving civitai-delivery-worker-prod-2023-11-01.5ac0637cfd0766c97916cefa3764fbdf.r2.cloudflarestorage.com (civitai-delivery-worker-prod-2023-11-01.5ac0637cfd0766c97916cefa3764fbdf.r2.cloudflarestorage.com)... 104.18.9.90, 104.18.8.90, 2606:4700::6812:95a, ...
Connecting to civitai-delivery-worker-prod-2023-11-01.5ac0637cfd0766c97916cefa3764fbdf.r2.cloudflarestorage.com (civitai-delivery-worker-prod-2023-11-01.5ac0637cfd0766c97916cefa3764fbdf.r2.cloudflarestorage.com)|104.18.9.90|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2132626066 (2.0G) [application/octet-stream]
Saving to: '/home/studio-lab-user/content/stable-diffusion-webui/models/Stable-diffusion/icbinpICantBelieveIts_seco.safetensors'

/home/studio-lab-user/content/sta 100%[=============================================================>]   1.99G  65.8MB/s    in 36s     

2023-11-10 09:41:26 (57.1 MB/s) - '/home/studio-lab-user/content/stable-diffusion-webui/models/Stable-diffusion/icbinpICantBelieveIts_seco.safetensors' saved [2132626066/2132626066]

ダウンロード開始:09:40:50 → ダウンロード完了:09:41:26

表示されている通り36秒でモデルのアップロードが完了しました。

他のファイルのアップロードにも応用できるよう説明します。

wget "(ダウンロード先のURL)" -O (保存するファイルパス)

モデルファイルの場合は、(保存するファイルパス)の部分は以下のようになります。ファイル名まで指定してください。

/home/studio-lab-user/content/stable-diffusion-webui/models/Stable-diffusion/*******.safetensors

「-O」はハイフン大文字のアルファベットのオーです。また、前後にスペースが入ります。
(ダウンロード先のURL)は、前後を「”」ダブルコーテーションで囲った方が良いです。CIVITAIのリンクは、?, =, &の文字が入っているためです。

(ダウンロード先のURL)の取得方法について説明します。

CIVITAIの場合のURLの取得方法

(ダウンロード先のURL)の取得方法ですが、CIVITAIの場合は少しコツが必要です。詳しく説明します。右上部の下の画像のアイコンが並んでいる部分を探してください。

青いボタンが「Create」になっている場合

「↓」のマーク(download option)を押します。

するとそのすぐ下に、「Model SageTensor(1.99GB)」というリンクボタンが表示されます。

こちらを右クリックて、コンテキストメニューを表示させ、「リンクのコピー」を押します。

リンクのURLは、クリップボードにコピーされていますので、メモ帳などにペーストし上記のwget コマンドを完成させ、ターミナル画面で実行します。

URLリンクは、ダブルコーテーションで囲うのを忘れないでください

別の方法としては、1Fileと記載のある、アコーディオンタブを開くと、「Download」という表記がありますので、それを右クリックし上記同様「リンクのコピー」でもURLの取得が可能です。

青いボタンが「Download」になっている場合

BRA7などがそうですが、その場合は青いDownload(ダウンロード)ボタンを右クリックて、コンテキストメニューを表示させ、「リンクのコピー」を押します。 

HuggingFaceの場合のURLの取得方法

HuggingFaceの場合は、ダウンロードするファイルを検索し、「Files and Versions」タブにダウンロードファイルの置き場があります。「↓」マークを右クリックし、CIVITAIの場合と同様にコンテキストメニューを表示し、「リンクのコピー」を押し、URL(ダウンロード先のURL)を取得してください。

HuggingFaceの場合は、特に戸惑う点はないと思いますが、もし上手くいかない場合はCIVITAIの場合の手順も参考にしてください。

また、コマンドの表記が間違っていないかをしっかりと確認してください。お問い合わせいただきましても、サポートはできかねます。コメント欄にご質問頂くと、多い質問の場合は記事を分かりやすく修正していきます。

ファイル名は任意で良い

BRA7(Beautiful Realistic Asians V7)の場合、「Download」ボタン右クリックでリンクを取得すると以下のURLになります。何が言いたいかというとファイル名が記載されていないのです。

https://civitai.com/api/download/models/177164

ダウンロードすると「beautifulRealistic_v7.safetensors」というファイル名になるのですが、URLからでは分かりません。wget コマンドでダウンロード先のパスと、ファイル名を指定しないといけないのにファイル名が不明なので、一旦ダウンロードする必要があるかというと、その必要はございません

(保存するパス)/(任意の名前).safetensors

としてください。(safetensorsも不要かも知れませんが)任意の名前でも、以下のように正常に読み込まれます。今回は、bra7.safetensorsとしました。

wget https://civitai.com/api/download/models/177164 -O ./bra7.safetensors

このように、正常に読み込まれています。

Linuxコマンドを利用する為の基本操作(ご参考)

Linuxコマンドを利用する為のターミナルの起動方法や、その他のLinuxコマンドは以下の記事でご紹介しておりますのでご参考にしてください。

まとめ

慣れてしまえば簡単な操作だと思います。時間短縮によりAmazon SageMakerのGPUを効率的に利用でき、金額に見合った情報とご満足いただければ幸いです。

その他の困りごとなどございましたら、コメント頂ければ返信、または別の記事でのご回答とさせていただきます。この度は、記事をご購入頂きまして誠にありがとうございました。