すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:EASでKohya_ssを使用してLoRA SDモデルをデプロイする

最終更新日:Aug 14, 2024

このトピックでは、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バケットは、トレーニングファイル、出力モデルファイル、およびログを保存するために使用されます。 オブジェクトのアップロード方法については、「オブジェクトのアップロード」をご参照ください。

準備

  1. OSS コンソールにログインします。 トレーニング用に作成したバケットのパスに移動します。 バケットはPAIワークスペースと同じリージョンにあります。 例: oss:// kohya-demo/kohya/

  2. バケットパスにプロジェクトフォルダを作成します。 例: KaraDetroit_loar。 このプロジェクトフォルダーに、ImageLogModelフォルダーを作成します。 JSON設定ファイルがある場合は、このプロジェクトフォルダにアップロードすることもできます。

    image.png

    • Image: トレーニングに使用されるソースファイルを保存します。

    • Model: 出力モデルファイルを格納します。

    • Log: ログを保存します。

    • SS_config.json: 複数のパラメーターを同時に設定するために使用されるJSONファイル。 ファイルはオプションです。 フォルダパスや出力モデル名など、JSONファイル内の関連パラメーターを変更できます。 設定の詳細については、『GitHub』をご参照ください。 サンプルファイルSS_config.jsonは参照を提供します。

  3. トレーニングで使用する画像を圧縮ファイルにパッケージ化し、圧縮ファイルをImageフォルダーにアップロードします。 この例では、100_pic.tgzという名前のサンプルファイルを使用しています。

    image.png

    重要
    • パッケージ化されたフォルダーの名前は、number_name形式である必要があります。 例: 100_pic。

    • イメージは次の形式である必要があります。. png,. jpg,. jpeg,. webp、または. bmp.

    • 各イメージには、同じ名前の説明ファイルが必要です。 説明ファイルは、. txt形式を指定します。 説明はファイルの最初の行にある必要があります。 複数の説明はコンマ (,) で区切ります。

    パラメーター

    説明

    各画像のトレーニングセッションの数。 値は100以上である必要があります。 トレーニングセッションの総数は1500を超える必要があります。

    • たとえば、フォルダには10個の画像が含まれており、各画像は1500/10 = 150回トレーニングする必要があります。 Numberパラメーターの値は150です。

    • たとえば、フォルダには20個の画像が含まれており、各画像は1500/20 = 75回トレーニングする必要があります。 この場合、計算値は100未満の75であるため、Numberパラメータの値は100に増加します。

    アンダースコア

    "_" を使用します。 このフィールドは必須です。

    名前

    OSSのファイル名の要件を満たす文字列。 この例では「pic」という名前が使用されています。

Kohya_ssサービスのデプロイ

  1. EAS-Online Model Servicesページに移動します。

    1. PAIコンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、モデルを配置するワークスペースの名前をクリックします。

    3. 左側のナビゲーションウィンドウで、[モデル展開] > [Elastic Algorithm Service (EAS)] を選択して、[Elastic Algorithm Service (EAS)] ページに移動します。 image

  2. [Elastic Algorithm Service (EAS)] ページで、[サービスのデプロイ] をクリックします。 表示されるダイアログボックスで、[カスタムデプロイ] を選択し、[OK] をクリックします。

  3. [サービスの作成] ページで、フォームまたはJSONスクリプトを使用してパラメーターを設定します。

    フォームを使用したパラメーターの設定

    • モデルサービス情報の設定

      image.png

      パラメーター

      説明

      サービス名

      サービスの名前です。 この例では、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: リスニング用のポート番号。

    • リソース配置情報を設定します。

      image.png

      パラメーター

      説明

      リソースグループタイプ

      [パブリックリソースグループ] を選択します。

      リソース設定モード

      [一般] を選択します。

      リソース設定

      [GPU] タブから [インスタンスタイプ] を選択します。 費用対効果の観点から、ml.gu7i.c16m60.1-gu30インスタンスタイプを使用することを推奨します。 この例では、ml.gu7i.c8m30.1-gu30インスタンスタイプが使用されています。

    • ビジネス要件に基づいて他のパラメーターを設定できます。

    JSONスクリプトを使用してパラメーターを設定する

    • [設定エディター] でJSONスクリプトを設定します。

      image.png

    • サンプル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
          }]
      }
  4. [デプロイ] をクリックします。 モデルのデプロイが完了するまでに数分かかります。 [サービスステータス][実行中] の場合、サービスはデプロイされます。

LoRAモデルのトレーニング

  1. 表示するサービスの [サービスタイプ] 列で、[Webアプリの表示] をクリックします。

  2. [Dreambooth LoRA] をクリックします。

    image.png

  3. [設定ファイル] をクリックして、設定ファイルのパスを指定します。 SS_config.jsonファイルがない場合は、この手順をスキップします。

    image.png

    説明

    設定ファイルのパスは、[モデルサービス情報の設定] ステップで指定した [マウントパス] 、OSSで作成したフォルダーのパス、およびSS_config.jsonファイルで構成されます。 例: /workspace/KaraDetroit_loar/SS_config.json

  4. [ソースモデル] タブでパラメーターを設定します。 この例では、Save trained model as parameterはsafetensorsに設定され、checkpointよりもセキュリティが確保されます。

    image.png

  5. [フォルダー] タブでパラメーターを設定します。 出力ファイルの名前と、OSSで作成したImageLog、およびModelフォルダーのパスを使用します。 下表に、各パラメーターを説明します。

    image.png

    パラメーター

    説明

    画像フォルダ

    トレーニングに使用する画像のフォルダーパス。 パスは、[モデルサービス情報の設定] ステップで指定した [マウントパス] と、OSSで作成した Image フォルダーのパスで構成されます。 例: /workspace/KaraDetroit_loar/Image

    Loggingフォルダ

    出力ログのフォルダパス。 パスは、[モデルサービス情報の設定] ステップで指定した [マウントパス] と、OSSで作成した Log フォルダーのパスで構成されます。 例: /workspace/KaraDetroit_loar/Log

    出力フォルダ

    出力モデルのフォルダパス。 パスは、[モデルサービス情報の設定] ステップで指定した [マウントパス] と、OSSで作成した Model フォルダーのパスで構成されます。 例: /workspace/KaraDetroit_loar/Model

    モデル出力名

    出力モデルの名前。 例: my_model。

  6. [トレーニングパラメーター] タブでパラメーターを設定します。 次の例では、準備ステップでSS_config.jsonファイルの内容を使用します。

    パラメーター

    説明

    LoRAタイプ

    LoRAタイプ:

    • LyCORIS/LoCon: ResBlockTransformerなど、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の場合、Convolution Rank (Dimension) を64以下の値に設定し、Convolution Alphaを1に設定します。 Convolution Alphaは、ビジネス要件に基づいて低い値に設定できます。

    • LoRAタイプがLyCORIS/LoHaの場合、Convolution Rank (Dimension) を32以下の値に設定し、Convolution Alphaを1に設定します。

    クリップスキップ

    CLIPモデルが使用される回数。 有効な値: 1 ~ 12。 値が小さいほど、生成された画像が画像または入力画像に近いことを示す。

    • リアリズム: 1に設定します。

    • アニメ、コミック、ゲーム (ACG): 2に設定。

    サンプルごとのnエポック

    サンプルはNエポックごとに保存されます。 サンプルはNエポックごとに保存されます。

    サンプルプロンプト

    サンプルプロンプト。 有効なパラメータ:

    • -- n: プロンプト、または否定的なプロンプト。

    • -- w: イメージの幅。

    • -- h: 画像の高さ。

    • -- d: イメージのシード。

    • − 1: プロンプトに対する画像生成の関連性を示す分類器自由案内 (CFG) スケール。

    • -- s: 反復ステップの数。

  7. [モデルのトレーニング] をクリックしてトレーニングを開始します。 image.png

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

    image

    model savedがログに表示されると、トレーニングは完了です。

    image.png

  9. トレーニングが完了したら、指定したmodelフォルダーのディレクトリからLoRAモデルファイルを取得します。 例: my_model.safetensors

    image.png

安定拡散に基づくAI画像生成にトレーニング済みLoRAモデルを使用

LoRAモデルをトレーニングした後、SD webアプリケーションのディレクトリにモデルをアップロードできます。 これにより、トレーニング済みのLoRAモデルを使用して画像を生成できます。 SDをデプロイする方法の詳細については、「数回クリックするだけでEASを使用したAIイメージ生成の安定した拡散をデプロイする」をご参照ください。

次のセクションでは、LoRAモデルをSD webアプリケーションにアップロードする方法について説明します。

SD webアプリケーション (クラスター版)

  1. 次の図に示すように、SD webアプリケーションモデルサービス情報を設定します。

    image.png

    説明

    stable-diffusion-webuiイメージには -clusterバージョンを選択する必要があります。 サービスが開始されると、マウントされたOSSパスに /data-{User_ID}/models/Loraパスが自動的に作成されます。

  2. 次のパラメーターを [実行するコマンド] に追加します。

    • -- lora-dir: オプション。

      • -- lora-dirパラメーターを指定しない場合、ユーザーのモデルファイルは分離されます。 {OSS path}/data-{User_ID}/models/Loraディレクトリ内のモデルファイルのみが読み込まれます。

      • -- lora-dirパラメーターを指定すると、指定されたディレクトリとディレクトリ {OSS path}/data-{current logon user ID}/models/Lora内のファイルが読み込まれます。 例: -- lora-dir /code/stable-diffusion-webui/data-oss/models/Lora

    • --data-dir {OSS mount path} 例: -- data-dir /code/stable-diffusion-webui/data-oss

  3. LoRAモデルファイルを {OSS path}/data-{User_ID}/models/Loraディレクトリにアップロードします。 例: oss:// bucket-test/data-oss/data-1596 ****** 100/models/Lora

    image.png

    説明

    サービスが開始されると、/data-{Current logon user ID}/models/LoraパスがOSSに自動的に作成されます。 サービスの開始後にLoRAモデルファイルをアップロードする必要があります。

    個人プロフィール画像の横にあるページの右上隅にある {User_ID} を取得できます。

    image.png

SD webアプリケーション (基本バージョン)

  1. 次の図に示すように、安定拡散のweb UIのモデルサービス情報を設定します。

    image.png

    説明

    stable-diffusion-webuiイメージに -cluster以外のバージョンを選択する必要があります。 サービスが開始されると、マウントされたOSSパスに /models/Loraパスが自動的に作成されます。

  2. -- data-dir {OSS mount path} パラメーターを [実行するコマンド] に追加します。 例: -- data-dir /code/stable-diffusion-webui/data-oss

  3. LoRAモデルファイルを {OSS path}/models/Loraディレクトリにアップロードします。 例: oss:// bucket-test/data-oss/models/Lora

    image.png

    説明

    サービスが開始されると、マウントされたOSSバケットに /models/Loraパスが自動的に作成されます。 パスを作成する必要はありません。 サービスの開始後にLoRAモデルファイルをアップロードする必要があります。