このトピックでは、Elastic Algorithm Service (EAS) を使用してオープンソースの Kohya_ss サービスをデプロイし、Low-Rank Adaptation (LoRA) モデルをファインチューニングする方法について説明します。AI 画像生成シナリオでは、ファインチューニングされた LoRA モデルを Stable Diffusion (SD) サービスに適用して、生成される画像の品質を向上させることができます。
前提条件
Platform for AI (PAI) を有効化し、デフォルトのワークスペースを作成済みであること。詳細については、「PAI の有効化とデフォルトワークスペースの作成」をご参照ください。
RAM ユーザーを使用してモデルをデプロイする場合、その RAM ユーザーに EAS の管理権限を付与する必要があります。詳細については、「EAS のクラウドサービスの依存関係と権限付与」をご参照ください。
トレーニングデータ、出力モデルファイル、ログを保存するために、同じリージョンに Object Storage Service (OSS) バケットとディレクトリを作成済みであること。ファイルのアップロード方法については、「OSS コンソールを使用したファイルのアップロード」をご参照ください。
事前準備
OSS コンソールにログインし、同じリージョン内のバケットパスに移動します。例:
oss://kohya-demo/kohya/。バケット内に、新しいプロジェクトフォルダを作成します。例:
KaraDetroit_loar。このプロジェクトフォルダ内に、Image、Log、Modelの 3 つのサブフォルダを作成します。JSON 設定ファイルがある場合は、このプロジェクトフォルダにアップロードすることもできます。
Image:トレーニングデータを保存します。
Model:出力モデルファイルを保存します。
Log:ログを保存します。
SS_config.json:(任意) パラメーターを一括設定するための JSON ファイルです。このファイルを使用すると、フォルダパスや出力モデル名などのパラメーターを変更できます。設定の詳細については、GitHub 上のプロジェクトをご参照ください。サンプル JSON ファイルについては、「SS_config.json」をご参照ください。
準備した画像を
Imageフォルダにアップロードします。このチュートリアルでは、100_pic.zip のサンプル画像と説明ファイルを使用します。ファイルをダウンロードして解凍し、生成されたフォルダを OSS にアップロードします。結果は次の図のようになります。
重要サポートされている画像フォーマットは
.png、.jpg、.jpeg、.webp、.bmpです。各画像には、同じ名前で拡張子が
.txtの対応する説明ファイルが必要です。説明は最初の行に記述する必要があります。複数の説明タグがある場合は、カンマで区切ります。イメージフォルダ名は
number_nameの形式に従う必要があります。例:100_pic。numberは、トレーニング中に各画像が繰り返される回数を指定し、推奨値は 100 以上です。nameは、OSS のファイル命名規則に準拠する任意の文字列です。トレーニングステップの合計数は、通常 1,500 以上である必要があります。フォルダに 10 枚の画像が含まれている場合、各画像は
1500 / 10 = 150回トレーニングされます。フォルダ名の数字は150になります。フォルダに 20 枚の画像が含まれている場合、各画像は
1500 / 20 = 75回トレーニングされ、推奨の 100 回未満です。この場合、フォルダ名の数字は100にする必要があります。
Kohya_ss サービスのデプロイ
-
PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、Elastic Algorithm Service (EAS) をクリックします。
-
[サービスのデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
[カスタムデプロイ] ページで、フォームまたは JSON スクリプトを使用してパラメーターを設定します。
フォームを使用したパラメーターの設定
パラメーター
説明
基本情報
サービス名
サービスにカスタム名を入力します。このチュートリアルでは
kohya_ss_demoを使用します。環境情報
デプロイ方法
[イメージベースのデプロイ] を選択し、[Web アプリケーションを有効化] を選択します。
イメージ設定
[Alibaba Cloud イメージ] リストから [Kohya_ss] > [kohya_ss:2.2] を選択します。
説明イメージのバージョンは頻繁に更新されます。サービスをデプロイする際は、最新バージョンを選択してください。
ストレージのマウント
OSS マウントタイプを選択し、次のパラメーターを設定します。
URI:同じリージョン内の OSS パスを選択します。このチュートリアルでは
oss://kohya-demo/kohya/を使用します。マウントパス:カスタムパスを入力します。このチュートリアルでは
/workspaceを使用します。重要[読み取り専用モードを有効化] スイッチは無効のままにしてください。そうしないと、モデルファイルをご利用の OSS バケットに書き込めなくなります。
コマンド
イメージを選択すると、このフィールドはシステムによって自動的に入力されます。このチュートリアルでは、
python -u kohya_gui.py --listen=0.0.0.0 --server_port=8000 --headlessを使用します。--listen:アプリケーションを特定のローカル IP アドレスにバインドして、外部リクエストを受信および処理します。--server_port:リッスンするポート番号を指定します。
リソース情報
リソースタイプ
[パブリックリソース] を選択します。
デプロイリソース
[インスタンスタイプ] には、コスト効率が最も高い
GPU > ml.gu7i.c16m60.1-gu30を推奨します。このチュートリアルでは、利用可能な最小仕様であるml.gu7i.c8m30.1-gu30を使用します。JSON スクリプトを使用したパラメーターの設定
[サービス設定] セクションで [編集] をクリックし、JSON スクリプトを設定します。
サンプル JSON ファイル:
重要4 行目の "name" の値と 18 行目の "oss" の値を実際の値に置き換えてください。
{ "metadata": { "name": "kohya_ss_demo", "instance": 1, "enable_webservice": true }, "cloud": { "computing": { "instance_type": "ecs.gn6e-c12g1.12xlarge", "instances": null } }, "storage": [ { "oss": { "path": "oss://kohya-demo/kohya/", "readOnly": false }, "properties": { "resource_type": "model" }, "mount_path": "/workspace" }], "containers": [ { "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/kohya_ss:1.2", "script": "python -u kohya_gui.py --listen=0.0.0.0 --server_port=8000 --headless", "port": 8000 }] }フォームの設定を確認し、[デプロイ] をクリックします。デプロイが完了するまで数分かかります。[サービスステータス] が [実行中] に変わると、サービスは正常にデプロイされています。
LoRA モデルのファインチューニング
サービスリストで対象のサービスを見つけ、[概要] 列の [Web アプリケーション] をクリックして、Kohya_ss サービスの UI を開きます。
[LoRA (LoRA)] を選択します。

[設定ファイル] を設定します。このステップは任意です。
SS_config.jsonファイルがない場合は、このステップをスキップしてください。
説明設定ファイルのパスは、フォームを使用したパラメーターの設定ステップで指定した [マウントパス]、OSS で作成したフォルダのパス、および SS_config.json ファイルを結合して作成されます。このチュートリアルでのパスは次のとおりです。
/workspace/KaraDetroit_loar/SS_config.json。[ソースモデル] を設定します。このチュートリアルでは、[checkpoint] よりも安全な [safetensors] を使用します。

[フォルダ] を設定します。OSS で作成した
Image、Log、Modelフォルダのパスを入力し、出力ファイル名を指定します。
パラメーター
説明
イメージフォルダ
トレーニング画像を含むフォルダへのパスです。このパスは、サービス設定の [マウントパス] と OSS の
Imageフォルダパスを結合したものです。このチュートリアルでのパスは/workspace/KaraDetroit_loar/Imageです。ログフォルダ
ログが保存されるフォルダへのパスです。このパスは、サービス設定の [マウントパス] と OSS の
Logフォルダパスを結合したものです。このチュートリアルでのパスは/workspace/KaraDetroit_loar/Logです。出力フォルダ
出力モデルが保存されるフォルダへのパスです。このパスは、サービス設定の [マウントパス] と OSS の
Modelフォルダパスを結合したものです。このチュートリアルでのパスは/workspace/KaraDetroit_loar/Modelです。モデル出力名
出力モデルファイルの名前です。例:
my_model。[パラメーター] を設定します。サンプル値については、事前準備セクションで言及されている
SS_config.jsonの内容をご参照ください。パラメーター
説明
LoRA タイプ
LoRA のタイプ:
LoCON:Res、Block、Transformerなど、SD のすべてのレイヤーを調整できます。LoHA:同じサイズでより多くの情報を処理します。
LoRA ネットワークの重み
任意。モデルのトレーニングを継続する場合、最後にトレーニングされた LoRA ファイルを選択します。
トレーニングバッチサイズ
トレーニングバッチのサイズです。値が大きいほど、より多くの GPU メモリ (VRAM) が必要になります。
エポック
トレーニングエポックの数です。1 エポックで全てのデータが 1 回トレーニングされます。必要に応じてパラメーターを設定します。ほとんどの場合、次のようになります。
Kohya での総トレーニングセッション数 = トレーニングに使用される画像数 × 繰り返し回数 × トレーニングエポック数 / トレーニングバッチ数。Web UI での総トレーニングセッション数 = トレーニングに使用される画像数 × 繰り返し回数。
クラスイメージを使用する場合、Kohya と WebUI の両方で総トレーニングステップ数が 2 倍になり、Kohya でモデルが保存される回数が半分になります。
N エポックごとに保存
N エポックごとにチェックポイントを保存します。例えば、2 に設定すると、2 エポックごとにトレーニング結果が保存されます。
キャプション拡張機能
任意。キャプションファイルの拡張子です。例:
.txt。混合精度
混合精度の設定で、GPU のパフォーマンスに依存します。オプションは
no、fp16、bf16です。30 GB 以上の VRAM を持つ GPU の場合、bf16が推奨されます。精度の保存
保存精度。[混合精度] と同じです。
コアあたりの CPU スレッド数
コアあたりの CPU スレッド数です。選択したインスタンスと要件に基づいて調整します。
学習率
学習率です。デフォルトは
0.0001です。学習率スケジューラ
学習率スケジューラです。
cosineやcosine with restartなどの関数を必要に応じて選択します。学習率ウォームアップ (ステップの %)
学習ウォームアップステップの数です。デフォルトは 10 です。ウォームアップが不要な場合は 0 に設定します。
オプティマイザー
オプティマイザーです。必要に応じて選択します。デフォルトは
AdamW8bitです。DAdaptationは自動最適化を提供します。最大解像度
最大解像度です。画像のディメンションに基づいて設定します。
ネットワークランク (ディメンション)
モデルの複雑さです。ほとんどのシナリオでは 128 の値で十分です。
ネットワークアルファ
この値は通常、[ネットワークランク (ディメンション)] 以下です。一般的な設定は、ネットワークランク 128、ネットワークアルファ 64 です。
畳み込み次元
& 畳み込みアルファ
畳み込みディメンションで、LoRA ファインチューニングの範囲に影響します。選択した [LoRA タイプ] に基づいて調整します。
Kohya の公式推奨事項:
LoCon:dim <= 64およびalpha = 1(またはそれ以下) に設定します。LoHA:dim <= 32およびalpha = 1に設定します。
Clip skip
CLIP モデルでスキップするレイヤーの数です。値の範囲は 1 から 12 です。値が小さいほど、オリジナルまたは入力画像に近い画像が生成されます。
リアルなモデルの場合は 1 を選択します。
アニメスタイルのモデルの場合は 2 を選択します。
n ステップごとにサンプリング
N ステップごとにサンプル画像を保存します。
サンプルプロンプト
次のパラメーターを使用します。
--n:プロンプトまたはネガティブプロンプト。--w:画像の幅。--h:画像の高さ。--d:画像のシード。--l:Classifier Free Guidance (CFG) スケール。プロンプトと画像生成の関連性を示します。--s:反復ステップ数。
ページの下部にある [トレーニングを開始] をクリックしてトレーニングを開始します。

[Elastic Algorithm Service (EAS)] ページで、サービスリスト内の対応するサービス名をクリックします。[ログ] をクリックして、トレーニングの進捗をリアルタイムで表示します。

ログに
model savedが表示されたら、トレーニングは完了です。
トレーニングが完了したら、設定したモデル出力ディレクトリ (
Model) で生成された LoRA モデルファイルを見つけます。例:my_model.safetensors。
ファインチューニング済み LoRA モデルの Stable Diffusion での使用
LoRA モデルをファインチューニングした後、Stable Diffusion WebUI サービスの適切なディレクトリにアップロードして画像を生成できます。Stable Diffusion サービスのデプロイ方法については、「EAS を使用した数クリックでの AI 画像生成のための Stable Diffusion のデプロイ」をご参照ください。
次のセクションでは、LoRA モデルを [SD Web アプリケーション] にアップロードする方法について説明します。
SD Web アプリケーション (クラスター版)
Stable Diffusion WebUI イメージを設定します。
-clusterバージョン (例:stable-diffusion-webui:4.2-cluster-webui) を選択する必要があります。次のパラメーターを [コマンド] に追加します。
--lora-dir:任意。--lora-dirが指定されていない場合、各ユーザーのモデルファイルは分離されます。サービスは{OSS-path}/data-{current-user-ID}/models/Loraディレクトリからのみモデルファイルをロードします。--lora-dirが指定されている場合、サービスは指定されたディレクトリと{OSS-path}/data-{current-user-ID}/models/Loraディレクトリの両方から、すべてのユーザーのモデルファイルをロードします。例:--lora-dir /code/stable-diffusion-webui/data-oss/models/Lora。
--data-dir {OSS マウントパス}。例:--data-dir /code/stable-diffusion-webui/data-oss。
LoRA モデルファイルを
{OSS-path}/data-{current-user-ID}/models/Loraディレクトリにアップロードします。例:oss://bucket-test/data-oss/data-1596******100/models/Lora。
説明サービスは起動後、OSS バケット内に
/data-{current-user-ID}/models/Loraパスを自動的に作成します。したがって、モデルファイルはサービスが起動した後にのみアップロードしてください。{current-user-ID}は、コンソールの右上隅にあるプロファイルアバターをクリックして確認できます。
SD Web アプリケーション (基本版)
Stable Diffusion WebUI イメージを設定します。非
-clusterバージョン (例:stable-diffusion-webui:4.2-standard) を選択する必要があります。次のパラメーターを [コマンド] に追加します:
--data-dir {OSS-mount-path}。例:--data-dir /code/stable-diffusion-webui/data-oss。LoRA モデルファイルを
{OSS-path}/models/Loraディレクトリにアップロードします。例:oss://bucket-test/data-oss/models/Lora。
説明サービスは起動後、マウントされた OSS バケット内に
/models/Loraパスを自動的に作成します。このパスは手動で作成しないでください。したがって、モデルファイルはサービスが起動した後にのみアップロードしてください。