DOKはコンテナー型のGPUサービスで、NVIDIA V100やH100を実行時間課金で利用できるサービスです。
コンテナー型GPUクラウドサービス 高火力 DOK(ドック) | さくらインターネット
今回はこのDOKを使って、Stable Diffusionに対していらすとやさんの画像をファインチューニング、出力してみました。
結果
結果は以下のようになっています。覚えさせる画像によって、結果は大きく影響を受けそうです。
初級編:とりあえず試す
学習済みのデータを使って実行してみたい方は、DOKにて新しいタスクを作成し、以下の情報を入力してください。
項目 | 設定 |
---|---|
イメージ | dok-handson.sakuracr.jp/sdxl |
コマンド | generate 'Top quality, 1 man drink coke, smiling, lora:irasutoya:1irasutoya' 10 |
環境変数 | BATCH_SIZE = 25 LORA_URL = https://s3.isk01.sakurastorage.jp/mg-sd-demo/irasutoya.safetensors SAMPLER = ddim STEPS = 40 |
<lora:irasutoya:1>irasutoya
が、いらすとやさんを使った学習データを利用する指定になります。また、その学習結果データを LORA_URL
として指定しています。
中級編:学習データの作り方
上記タスクで利用したDockerイメージ、学習データの作成方法は以下の通りです。ベースとしては、chibiegg/sd-dockerを使っています。
学習データを用意する
学習データはいらすとやさんから拝借しています。人物一人、顔がアップになっているものだけをピックアップしています。
キャプションを作成する
各画像についてキャプション付けを行います。これはkohya-ss/sd-scriptsにある finetune/make_captions.py
を利用しています。(via Google Colab で BLIP とやらで自動キャプショニングを試してみる - ジャコ Lab)
python finetune/make_captions.py --batch_size 10 /path/to/images
実行すると、同じフォルダ内に *.caption
というファイルが生成されます。内容は the cartoon girl is writing a book
のようなものです。
圧縮する
画像とキャプションファイルを圧縮します。
cd /path/to/images
tar cvfz images.tar.gz *
ファイルをアップロード
圧縮したファイル(images.tar.gz
)を任意の場所にアップロードします。たとえば、さくらのクラウドのオブジェクトストレージなどになります。たとえば、 YOUR_BUCKET_NAME
というバケットを作ってアップロードすれば、以下のようなURLになります。ファイルは公開設定にしておきます。
https://s3.isk01.sakurastorage.jp/YOUR_BUCKET_NAME/images.tar.gz
タスクを作成する
学習を実行します。以下の情報を入力してください。
項目 | 設定 |
---|---|
イメージ | dok-handson.sakuracr.jp/sdxl |
コマンド | learning https://s3.isk01.sakurastorage.jp/YOUR_BUCKET_NAME/images.tar.gz irasutoya irasutoya |
環境変数 | BATCH_SIZE = 10 MAX_TRAIN_EPOCHS = 10 |
結果として、 *.tar.gz のファイルがダウンロードでき、解凍すると irasutoya.safetensors
といったファイルが取得できます。これを任意のWebサーバーなどにアップロードし、 LORA_URL
にて指定して実行します。
なお、学習はV100の場合は30〜40分程度、H100の場合は10分程度かかります。
上級編:イメージの作成
dok-handson.sakuracr.jp/sdxl
にて指定したDockerイメージの作成方法です。
コンテナレジストリの作成
さくらのクラウドのLAB機能として提供しているコンテナレジストリにて、新しいコンテナレジストリを作成します。情報は以下の通りです。作成するコンテナを YOUR_CONTAINER_REGISTRY.sakuracr.jp
としますが、実際には任意の名前を指定してください。
項目 | 設定 |
---|---|
名前 | 任意の名称です |
コンテナレジストリ名 | YOUR_CONTAINER_REGISTRY |
公開設定 | Pullのみ |
ユーザーの作成
コンテナレジストリを作成したら、作成したコンテナレジストリを一覧でダブルクリックします。
詳細表示にて、ユーザータブをクリックします。
追加ボタンを押し、ユーザーを作成します。 YOUR_USER_NAME
と PASSWORD
は任意のものを指定してください。
項目 | 設定 |
---|---|
ユーザー名 | YOUR_USER_NAME |
パスワード | YOUR_PASSWORD |
ユーザ権限設定 | All |
Dockerイメージの作成
DockerイメージはLinuxサーバー上で行います。今回はUbuntu 24.04を使っています。Dockerが使える環境であれば、Windows + WSL2でも問題ありません。macOSの場合、アーキテクチャが異なるので動かせないかも知れません(未検証です)。
内容はchibiegg/sd-dockerにあるものを利用しています。
git clone https://github.com/chibiegg/sd-docker.git
cd sd-docker
export IMAGE=YOUR_CONTAINER_REGISTRY.sakuracr.jp/sdxl:latest
docker build -t ${IMAGE} -f Dockerfile.sdxl .
イメージのアップロード
作成したイメージをアップロードします。まず、先ほどのコンテナレジストリにログインします。ログインIDとパスワードが求められるので、作成したものを入力してください。
docker login YOUR_CONTAINER_REGISTRY.sakuracr.jp
その後、イメージをプッシュします。イメージサイズが大きいので、数十分かかります。
docker push ${IMAGE}
タスクの作成
タスクはさくらのクラウドのDOKにて作成します。これまでの書いてきたタスクで、イメージを YOUR_CONTAINER_REGISTRY.sakuracr.jp/sdxl:latest
と指定して実行してください。
まとめ
今回はStable Diffusionを使って、いらすとやさんの画像をファインチューニングしました。まずは実行できるのみ、次に学習データの作成、そしてDockerイメージの作成と段階的に進められるようにしています。ぜひ、試してみてください。
DOKはタスクを多数立ち上げて、後は結果を待つのみと言った使い方ができます。ぜひAI・機械学習に活用してください。