このトピックでは、Platform for AI (PAI) のElastic Algorithm Service (EAS) でKohya_ssを使用して、オープンソースのKohya_ssをデプロイし、低ランク適応 (LoRA) モデルをトレーニングする方法について説明します。 AIペイントシナリオでは、トレーニング済みのLoRAモデルを補助モデルとして安定拡散 (SD) サービスに適用して、SDペイントのパフォーマンスを向上させることができます。
前提条件
EASが有効になり、デフォルトのワークスペースが作成されます。 詳細については、「PAIの有効化とデフォルトワークスペースの作成」をご参照ください。
RAMユーザーを使用してモデルを展開する場合は、RAMユーザーにEASの管理権限が付与されていることを確認します。 詳細については、「EASを使用するために必要な権限の付与」をご参照ください。
Object Storage Service (OSS) バケットは、PAIワークスペースが存在するリージョンに作成されます。 OSSバケットは、トレーニングファイル、出力モデルファイル、およびログを保存するために使用されます。 オブジェクトのアップロード方法については、「オブジェクトのアップロード」をご参照ください。
準備
OSS コンソールにログインします。 トレーニング用に作成したバケットのパスに移動します。 バケットはPAIワークスペースと同じリージョンにあります。 例:
oss:// kohya-demo/kohya/
バケットパスにプロジェクトフォルダを作成します。 例:
KaraDetroit_loar
。 このプロジェクトフォルダーに、Image
、Log
、Model
フォルダーを作成します。 JSON設定ファイルがある場合は、このプロジェクトフォルダにアップロードすることもできます。Image: トレーニングに使用されるソースファイルを保存します。
Model: 出力モデルファイルを格納します。
Log: ログを保存します。
SS_config.json: 複数のパラメーターを同時に設定するために使用されるJSONファイル。 ファイルはオプションです。 フォルダパスや出力モデル名など、JSONファイル内の関連パラメーターを変更できます。 設定の詳細については、「GitHub」をご参照ください。 サンプルファイルSS_config.jsonは参照を提供します。
トレーニングで使用する画像を圧縮ファイルにパッケージ化し、圧縮ファイルを
Image
フォルダーにアップロードします。 この例では、100_pic.tgzという名前のサンプルファイルを使用しています。重要パッケージ化されたフォルダーの名前は、number_name形式である必要があります。 例: 100_pic。
イメージは次の形式である必要があります。
. png
、. jpg
、. jpeg
、. webp
、または. bmp
。各イメージには、同じ名前の説明ファイルが必要です。 説明ファイルは、
. txt
形式を指定します。 説明はファイルの最初の行にある必要があります。 複数の説明はコンマ (,) で区切ります。
パラメーター
説明
Number
各画像のトレーニングセッションの数。 値は100以上である必要があります。 トレーニングセッションの総数は1500を超える必要があります。
たとえば、フォルダには10個の画像が含まれており、各画像は
1500/10 = 150
回トレーニングする必要があります。 Numberパラメーターの値は150です。たとえば、フォルダには20個の画像が含まれており、各画像は
1500/20 = 75
回トレーニングする必要があります。 この場合、計算値は100未満の75であるため、Numberパラメータの値は100に増加します。
アンダースコア
"_" を使用します。 このフィールドは必須です。
Name
OSSのファイル名の要件を満たす文字列。 この例では「pic」という名前が使用されています。
Kohya_ssサービスのデプロイ
PAI コンソールにログインします。 ページ上部のリージョンを選択します。 次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS) の入力] をクリックします。
[サービスのデプロイ] をクリックします。 [カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
[サービスの作成] ページで、フォームまたはJSONスクリプトを使用してパラメーターを設定します。
フォームを使用したパラメーターの設定
モデルサービス情報の設定
パラメーター
説明
サービス名
サービスの名前です。 この例では、kohya_ss_demoという名前が使用されます。
デプロイ方法
[イメージを使用したWebアプリのデプロイ] を選択します。
画像の選択
[PAIイメージ] をクリックします。 イメージのドロップダウンリストからkohya_ssを、イメージのバージョンのドロップダウンリストから1.2を選択します。
説明モデルサービスをデプロイするときに、イメージの最新バージョンを選択できます。
モデル設定
OSSパスのマウントを選択します。 この例では、マウントOSSパスが使用されています。
ワークスペースと同じリージョンの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アプリの表示] をクリックします。
[Dreambooth LoRA] をクリックします。
[設定ファイル] をクリックして、設定ファイルのパスを指定します。
SS_config.json
ファイルがない場合は、この手順をスキップします。説明設定ファイルのパスは、Configure parameters by using a formステップで指定したMount path、OSSで作成したフォルダーのパス、およびSS_config.jsonファイルで構成されます。 例:
/workspace/KaraDetroit_loar/SS_config.json
[ソースモデル] タブでパラメーターを設定します。 この例では、トレーニング済みモデルをパラメーターとして保存すると、safetensorsに設定され、checkpointよりもセキュリティが確保されます。
[フォルダー] タブでパラメーターを設定します。 出力ファイルの名前と、OSSで作成した
Image
、Log
、およびModel
フォルダーのパスを使用します。 下表に、各パラメーターを説明します。パラメーター
説明
画像フォルダ
トレーニングに使用する画像のフォルダーパス。 パスは、フォームを使用してパラメーターを設定ステップで指定した [マウントパス] と、OSSで作成した
[イメージ]
フォルダーのパスで構成されます。 例:/workspace/KaraDetroit_loar/Image
Loggingフォルダ
出力ログのフォルダパス。 パスは、フォームを使用してパラメーターを設定ステップで指定したマウントパスと、OSSで作成した
Log
フォルダーのパスで構成されます。 例:/workspace/KaraDetroit_loar/Log
出力フォルダ
出力モデルのフォルダパス。 パスは、フォームを使用してパラメーターを設定ステップで指定したマウントパスと、OSSで作成した
モデル
フォルダーのパスで構成されます。 例:/workspace/KaraDetroit_loar/Model
モデル出力名
出力モデルの名前。 例: my_model。
[トレーニングパラメーター] タブでパラメーターを設定します。 次の例では、準備ステップで
SS_config.json
ファイルの内容を使用します。パラメーター
説明
LoRAタイプ
LoRAタイプ:
LyCORIS/LoCon:
Res
、Block
、Transformer
など、LoRAモデルの各レイヤーを調整できます。LyCORIS/LoHa:
モデルは、メモリを増やす必要なく、より多くの情報を処理できます。
LoRAネットワークの重み
必要に応じて、 LoRAネットワークの重み。 以前のトレーニング結果に基づいてトレーニングを再開する場合は、最近トレーニングしたLoRAを選択します。 必要に応じて、
列车のバッチサイズ
トレーニングバッチのサイズ。 値が大きいほど、GPUのパフォーマンスが高くなります。
エポック
トレーニングエポックの数。 すべてのデータは1つのエポックに1回トレーニングされます。 ビジネス要件に基づいてパラメーターを設定します。 ほとんどの場合:
Kohyaのトレーニングセッションの総数=トレーニングに使用された画像の数x繰り返しの数xトレーニングエポックの数 /トレーニングバッチの数
web UIのトレーニングセッションの総数=トレーニングに使用した画像の数 × 繰り返しの数
同じディレクトリ内の画像を使用する場合、トレーニングセッションの総数は2倍になり、モデルが保存される回数はKohyaで半分になります。
すべてのNエポックを保存
トレーニング結果は、N回のトレーニング期間毎に保存される。 値を2に設定すると、トレーニングの2つのエポックごとにトレーニング結果が保存されます。
キャプション拡張機能
必要に応じて、 キャプションファイルの名前拡張子。 例: .txt。 必要に応じて、
混合精度
混合精度トレーニングの精度。 GPUのパフォーマンスに基づいてパラメーターを設定します。 有効な値: no、fp16、およびbf16。 使用するGPUのメモリが30 GBを超える場合は、値をbf16に設定することを推奨します。
保存精度
モデルが保存される精度。 使用するGPUのメモリが30 GBを超える場合は、値をbf16に設定することを推奨します。
コアあたりのCPUスレッド数
vCPUあたりのスレッド数。 ビジネス要件に基づいてパラメーターを設定します。
学習率
学習率。 デフォルト値: 0.0001
LRスケジューラ
学習率スケジューラ。 ビジネス要件に基づいてパラメーターを設定します。
LRウォームアップ (% のステップ)
学習率のウォームアップステップ。 ビジネス要件に基づいてパラメーターを設定します。 デフォルト値は 10 です。 ウォームアップが必要ない場合は、値を0に設定できます。
オプティマイザ
オプティマイザ。 ビジネス要件に基づいてパラメーターを設定します。 デフォルト値は
AdamW8bit
です。 値DAaptation
は、自動最適化が有効であることを示します。最大解像度
最大解像度。 ビジネス要件に基づいてパラメーターを設定します。
ネットワークランク (次元)
モデルの複雑さ。 値を128に設定することを推奨します。
ネットワークアルファ
ほとんどの場合、このパラメーターの値は [ネットワークランク (ディメンション)] パラメーターの値以下です。 ネットワークランク (ディメンション) を128に、ネットワークアルファを64に設定することを推奨します。
畳み込みランク (次元)
畳み込みアルファ
モデルがLoRAによって微調整される程度を示す畳み込み。 LoRAタイプに基づいてパラメーターを設定します。
Kohyaの公式ガイドに基づいて:
LoRAタイプが
LyCORIS/LoCon
の場合、畳み込みランク (ディメンション)
を64以下の値に設定し、畳み込みアルファ
を1に設定します。 Convolution Alphaは、ビジネス要件に基づいて低い値に設定できます。LoRAタイプが
LyCORIS/LoHa
の場合、畳み込みランク (ディメンション)
を32以下の値に設定し、畳み込みアルファ
を1に設定します。
クリップスキップ
CLIPモデルが使用される回数。 有効な値: 1 ~ 12。 値が小さいほど、生成された画像が画像または入力画像に近いことを示す。
リアリズム: 1に設定します。
アニメ、コミック、ゲーム (ACG): 2に設定。
サンプルごとのnエポック
サンプルはNエポックごとに保存されます。 サンプルはNエポックごとに保存されます。
サンプルプロンプト
サンプルプロンプト。 有効なパラメータ:
-- n:
プロンプト、または否定的なプロンプト。-- w:
イメージの幅。-- h:
画像の高さ。-- d:
イメージのシード。− 1:
プロンプトに対する画像生成の関連性を示す分類器自由案内 (CFG) スケール。-- s:
反復ステップの数。
[モデルのトレーニング] をクリックしてトレーニングを開始します。
[Elastic Algorithm Service (EAS)] ページで、表示するサービスの名前をクリックします。 [サービスログ] をクリックして、トレーニングの進行状況をリアルタイムで表示します。
model saved
がログに表示されると、トレーニングは完了です。トレーニングが完了したら、指定した
model
フォルダーのディレクトリからLoRAモデルファイルを取得します。 例:my_model.safetensors
安定拡散に基づくAI画像生成にトレーニング済みLoRAモデルを使用
LoRAモデルをトレーニングした後、SD webアプリケーションのディレクトリにモデルをアップロードできます。 これにより、トレーニング済みのLoRAモデルを使用して画像を生成できます。 SDをデプロイする方法の詳細については、「数回クリックするだけでEASを使用したAIイメージ生成の安定した拡散をデプロイする」をご参照ください。
次のセクションでは、LoRAモデルをSD webアプリケーションにアップロードする方法について説明します。
SD webアプリケーション (クラスター版)
次の図に示すように、SD webアプリケーションのモデルサービス情報を設定します。
説明stable-diffusion-webui
イメージには-cluster
バージョンを選択する必要があります。 サービスが開始されると、マウントされたOSSパスに/data-{User_ID}/models/Lora
パスが自動的に作成されます。次のパラメーターを [実行するコマンド] に追加します。
-- lora-dir:
オプション。-- lora-dir
パラメーターを指定しない場合、ユーザーのモデルファイルは分離されます。{OSS path}/data-{User_ID}/models/Lora
ディレクトリ内のモデルファイルのみが読み込まれます。-- lora-dir
パラメーターを指定すると、指定されたディレクトリとディレクトリ{OSSパス}/data-{現在のログオンユーザー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-{User_ID}/models/Lora
ディレクトリにアップロードします。 例:oss:// bucket-test/data-oss/data-1596 ****** 100/models/Lora
説明サービスが開始されると、
/data-{Current logon user ID}/models/Lora
パスがOSSに自動的に作成されます。 サービスの開始後にLoRAモデルファイルをアップロードする必要があります。個人プロフィール画像の横にあるページの右上隅にある
{User_ID}
を取得できます。
SD webアプリケーション (基本バージョン)
次の図に示すように、安定拡散のweb UIのモデルサービス情報を設定します。
説明stable-diffusion-webui
イメージに-cluster
以外のバージョンを選択する必要があります。 サービスが開始されると、マウントされたOSSパスに/models/Lora
パスが自動的に作成されます。-- 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
パスが自動的に作成されます。 パスを作成する必要はありません。 サービスの開始後にLoRAモデルファイルをアップロードする必要があります。