はじめに
Stable Diffusionとは?
Stable Diffusion(ステイブル・ディフュージョン)は、2022年に公開されたディープラーニング(深層学習)のtext-to-imageモデルになります。
- テキストから画像を生成する
- 追加学習が可能
まずは試してみる
高火力 DOKにログインする
さくらのクラウドにログインしてください
ログインする
ユーザーコード・会員ID・パスワードは指定したものを使ってください。
高火力 DOKを選択する
デザインがレスポンシブなので、高火力 DOKのアイコンが下にあるかも
タスクを選ぶ
タスクの新規作成を選ぶ
以下の通りに入力
環境変数は + 追加
ボタンを押して追加してください。
- イメージ
dok-handson.sakuracr.jp/sdxl - コマンド
generate 'Top quality, 1 man drink coke, smiling' - 環境変数
- BATCH_SIZE = 25
- SAMPLER = ddim
- STEPS = 40
入力イメージ
入力が終わったら、 作成
ボタンを押してください
確認ダイアログが出るので、 作成
ボタンを押してください
実行中の画面です。 状態
のところの文字で状況が判断できます。
DOKのタスクで行っていること
- Dockerイメージの取得
- コンテナの実行
- コンテナの破棄
メモ
- Dockerイメージの取得には、それなりに時間がかかります(10GB超えもざらなので…)
- コンテナ実行時にモデルを取得するものが多く、そこも時間がかかります
- HTTP URIは、タスク実行中にアクセスできるHTTPサーバーです
スクリプト側でリクエストを受け取って処理できます
実行完了後
実行完了すると、 アーティファクト
の項目に ダウンロード
が表示されます。
tar.gzファイルの解凍
macOSの場合はダブルクリック。Windowsの場合はコマンドプロンプト、または7-Zipを利用して解凍してください。
タスクをコピーしてみましょう!
タスクをコピーして、いろいろな条件で実行してみましょう!
追加学習したモデルを試す
タスクの条件を以下のように変更してください。 <lora:irasutoya:1>irasutoya
の部分が、追加学習したいらすとやさん風のモデルを指定する部分になります。 LORA_URL
は、あらかじめアップロードしているURLです。
項目 | 設定 |
---|---|
イメージ | dok-handson.sakuracr.jp/sdxl |
コマンド | generate 'Top quality, 1 man drink coke, smiling, <lora:irasutoya:1> irasutoya' 10 |
環境変数 | BATCH_SIZE = 25 LORA_URL = https://s3.isk01.sakurastorage.jp/mg-sd-demo/irasutoya.safetensors SAMPLER = ddim STEPS = 40 |
画像を追加学習する
画像を追加学習する際には、以下のステップが必要になります。
- 画像を用意する
- キャプションを用意する
- 画像をアップロードする
- 画像のURLを指定して、追加学習する
- できあがったモデルをDLし、アップロードする
- モデルを指定して、画像を生成する
画像を用意する
画像は任意ですが、同様のテイストのイラストや写真を用意する必要があります。自分だけが写っている写真や、いらすとやさんなどのフリーイラストを用意してください。
キャプションを用意する
各画像についてキャプション付けを行います。これはkohya-ss/sd-scriptsにある finetune/make_captions.py
を利用しています。(via Google Colab で BLIP とやらで自動キャプショニングを試してみる - ジャコ Lab)
実行する際にはPythonが必要です。
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
)を任意の場所にアップロードします。
以下は、さくらのクラウドのオブジェクトストレージを利用する例ですが、ご自身で別なクラウドストレージを使ってもらっても大丈夫です
オブジェクトストレージを選択する
さくらのクラウドのホームに戻ります
オブジェクトストレージを選択
サイトを選択
バケットを選択
さらに バケットの追加
ボタンを押してください
バケットの追加
分かりやすいものを設定してください
アップロード
作成したバケットを選んで、 アップロード
ボタンを押します
アップロードする
public-read
を付けておいてください
アップロードしたら、以下のURLで画像ファイルにアクセスできるか確認してください。このURLを次の学習タスクで利用します。
https://s3.isk01.sakurastorage.jp/(バケット名)/images.tar.gz
画像のURLを指定して、追加学習する
DOKにて、学習を実行します。タスクを作成し、以下の情報を入力してください。
項目 | 設定 |
---|---|
イメージ | dok-handson.sakuracr.jp/sdxl |
コマンド | learning https://s3.isk01.sakurastorage.jp/(バケット名)/images.tar.gz irasutoya irasutoya |
環境変数 | BATCH_SIZE = 10 MAX_TRAIN_EPOCHS = 10 |
結果として、 *.tar.gz のファイルがダウンロードでき、解凍すると irasutoya.safetensors
といったファイルが取得できます。このファイルを再度、任意のWebサーバーなどにアップロードしてください。
なお、学習はV100の場合は30〜40分程度、H100の場合は10分程度かかります。
タスクのコピー
一番最初に実行、完了したタスクを開きます。
コピーする
コピーして新規作成
を押します
追加学習したモデルを指定する
条件を若干変更して、タスクを実行してください。 <lora:irasutoya:1>irasutoya
の部分が、学習したモデルを指定する部分になります。 LORA_URL
は、アップロードしたURLを指定してください。
項目 | 設定 |
---|---|
イメージ | dok-handson.sakuracr.jp/sdxl |
コマンド | generate 'Top quality, 1 man drink coke, smiling, <lora:irasutoya:1>irasutoya' 10 |
環境変数 | BATCH_SIZE = 25 LORA_URL = https://s3.isk01.sakurastorage.jp/mg-sd-demo/irasutoya.safetensors SAMPLER = ddim STEPS = 40 |
タスクを再実行する
タスクを再度実行して、できあがった画像がいらすとやさん風になっているか確認してください。
一旦終了
ハンズオンの内容は以上になります。DOKの面白さとして「タスクをたくさん作成できる」点があります。ぜひタスクをコピーして、さまざまな条件で実行してください。
ここからの流れ
ここからはDockerイメージの作成を行います。作成には1時間以上かかると思われますので、ハンズオン実施中には終わらないはずです。
Dockerイメージの作り方
ここからはテクニカルな内容になります
必要なもの
- ターミナル
オプショナル
- Docker
- 手元にDocker環境がある方は、ローカルでも構築可能です
- Docker環境がない場合は、さくらのクラウドを利用できます
さくらのクラウドでサーバを立てる
さくらのクラウドのホームに戻り、 さくらのクラウド(IaaS)
を選択します
追加ボタンを押す
サーバ
の 追加
ボタンを押します
情報を入力する
サーバのスペックを以下のように設定してください
- 仮想コア
4 - メモリ
4GB - 新規ディスクを作成
- アーカイブ
Ubuntu Server 24.04.1 LTS 64bit - ディスクサイズ
100GB - インターネットに接続
- 管理者のパスワード
十分分かりづらいもの - ホスト名
分かりやすいもの(dokなど) - 公開鍵
必要であれば - サーバーの名前
分かりやすいもの(dokなど)
サーバを追加
作成
ボタンを押します
確認する
確認ダイアログが出るので、 作成
ボタンを押してください
サーバを確認
少し待つと、サーバが立ち上がります
サーバに接続する
サーバへは ssh で接続してください。ユーザー名は ubuntu
です。
サーバ内での作業
ここからはサーバ内(またはローカル)での作業になります
Dockerのインストール
Dockerをインストールします
$ sudo apt-get update -y
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh ./get-docker.sh
Dockerを試す
今のコマンドが通れば、Dockerはインストールされています
$ sudo docker run hello-world
Hello from Docker!
:
For more examples and ideas, visit:
https://docs.docker.com/get-started/
ベースになるリポジトリ
ベースはchibiegg/sd-dockerを利用しています。実際の内容は上記リポジトリを参照してください。
git clone https://github.com/chibiegg/sd-docker.git
cd sd-docker
コンテナレジストリの用意
Dockerイメージを登録するコンテナレジストリを作成します。さくらのクラウドのホームで、さくらのクラウド
を選択します。
左側のメニューの グローバル
の中にある コンテナレジストリ
を選択します。
追加
を押して、コンテナレジストリを作成します。最低限、以下の入力が必要です。
項目 | 設定 |
---|---|
名前 | 分かりやすい、任意の名前を入力してください |
コンテナレジストリ名 | ドメイン名に使われます。以下では、 EXAMPLE.sakuracr.jp として説明します |
公開設定 | Pullのみとします |
ユーザーの作成
コンテナレジストリを作成したら、作成したコンテナレジストリを一覧でダブルクリックします。
詳細表示にて、ユーザータブをクリックします。
追加
ボタンを押し、ユーザーを作成します。 YOUR_USER_NAME
と PASSWORD
は任意のものを指定してください。
項目 | 設定 |
---|---|
ユーザー名 | YOUR_USER_NAME |
パスワード | YOUR_PASSWORD |
ユーザ権限設定 | All |
Dockerイメージのビルド
EXAMPLE.sakuracr.jp
の部分は、作成したコンテナレジストリのドメイン名に置き換えてください。また、 sd-docker
は任意の名前で大丈夫です(以下はその名称で読み替えてください)。
sudo docker build \
-f Dockerfile.sdxl \
-t EXAMPLE.sakuracr.jp/sd-docker:latest .
コンテナレジストリへのログイン
作成したコンテナレジストリにログインします。ログインIDとパスワードが求められるので、作成したものを入力してください。
sudo docker login EXAMPLE.sakuracr.jp
イメージのプッシュ
作成したイメージをコンテナレジストリにプッシュします。イメージサイズが大きいので、数十分かかります。
sudo docker push EXAMPLE.sakuracr.jp/sd-docker:latest
DOKで実行する
リポジトリがプッシュできたら、一番最初に行ったようにDOKでタスクを実行します。
- イメージ
EXAMPLE.sakuracr.jp/sd-docker - コマンド
generate 'Top quality, 1 man drink coke, smiling' - 環境変数
- BATCH_SIZE = 25
- SAMPLER = ddim
- STEPS = 40
お片付け
忘れずに停止・削除をお願いします
- さくらのクラウドのサーバ
- オブジェクトストレージ
DOKについては、特に作業はありません