0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DOKを使ってStable Diffusionをファインチューニングする

Last updated at Posted at 2024-11-20

DOKはコンテナー型のGPUサービスで、NVIDIA V100やH100を実行時間課金で利用できるサービスです。

コンテナー型GPUクラウドサービス 高火力 DOK(ドック) | さくらインターネット

今回はこのDOKを使って、Stable Diffusionに対していらすとやさんの画像をファインチューニング、出力してみました。

結果

結果は以下のようになっています。覚えさせる画像によって、結果は大きく影響を受けそうです。

image.png

初級編:とりあえず試す

学習済みのデータを使って実行してみたい方は、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 として指定しています。

image.png

中級編:学習データの作り方

上記タスクで利用したDockerイメージ、学習データの作成方法は以下の通りです。ベースとしては、chibiegg/sd-dockerを使っています。

学習データを用意する

学習データはいらすとやさんから拝借しています。人物一人、顔がアップになっているものだけをピックアップしています。

image.png

キャプションを作成する

各画像についてキャプション付けを行います。これは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 のようなものです。

image.png

圧縮する

画像とキャプションファイルを圧縮します。

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

image.png

タスクを作成する

学習を実行します。以下の情報を入力してください。

項目 設定
イメージ 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 にて指定して実行します。

image.png

なお、学習はV100の場合は30〜40分程度、H100の場合は10分程度かかります。

上級編:イメージの作成

dok-handson.sakuracr.jp/sdxl にて指定したDockerイメージの作成方法です。

コンテナレジストリの作成

さくらのクラウドのLAB機能として提供しているコンテナレジストリにて、新しいコンテナレジストリを作成します。情報は以下の通りです。作成するコンテナを YOUR_CONTAINER_REGISTRY.sakuracr.jp としますが、実際には任意の名前を指定してください。

項目 設定
名前 任意の名称です
コンテナレジストリ名 YOUR_CONTAINER_REGISTRY
公開設定 Pullのみ

image.png

ユーザーの作成

コンテナレジストリを作成したら、作成したコンテナレジストリを一覧でダブルクリックします。

image.png

詳細表示にて、ユーザータブをクリックします。

image.png

追加ボタンを押し、ユーザーを作成します。 YOUR_USER_NAMEPASSWORD は任意のものを指定してください。

項目 設定
ユーザー名 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・機械学習に活用してください。

コンテナー型GPUクラウドサービス 高火力 DOK(ドック) | さくらインターネット

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?