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

Platform For AI:DLCでのLoRAトレーニングのベストプラクティス

最終更新日:Jul 22, 2024

このトピックでは、AutoML of Platform for AI (PAI) でディープラーニングコンテナ (DLC) リソースを使用する実験を送信して、低ランク適応 (LoRA) トレーニングに最適なハイパーパラメータの組み合わせを見つける方法について説明します。

前提条件

  • AutoMLを使用するために必要なアクセス許可がアカウントに付与されます。 初めてAutoMLを使用する場合は、この前提条件を満たす必要があります。 詳細については、「AutoMLを使用するために必要な権限の付与」をご参照ください。

  • DLCを使用するために必要な権限がアカウントに付与されます。 詳細については、「DLCを使用するために必要な権限の付与」をご参照ください。

  • ワークスペースが作成され、一般的なコンピューティングリソースのパブリックリソースグループに関連付けられます。 詳細については、「ワークスペースの作成」をご参照ください。

  • Object Storage Service (OSS) が有効化され、OSSバケットが作成されます。 詳細については、「OSSコンソールを使用して開始する」をご参照ください。

手順1: データセットの作成

OSSタイプのデータセットを作成します。 データセットをDLCパスにマウントして、ハイパーパラメータチューニング実験によって生成されたデータファイルをOSSディレクトリに保存します。 次のパラメータに注意してください。 他のパラメーターについてはデフォルト値を使用します。 詳細については、「データセットの作成と管理」トピックの「Alibaba Cloudストレージサービスに保存されているデータに基づいてデータセットを作成する」をご参照ください。

  • 名前: データセットの名前を入力します。

  • Select data store: スクリプトファイルが保存されているOSSパスを選択します。

  • プロパティ: フォルダを選択します。

ステップ2: 実験の作成

[実験の作成] ページに移動し、次の操作を実行してキーパラメーターを設定します。 その他のパラメーターの設定については、「実験の作成」をご参照ください。 パラメーターを設定したら、[送信] をクリックします。

  1. [実行設定] セクションでパラメーターを設定します。

    パラメーター

    説明

    ジョブタイプ

    [DLC] を選択します。

    リソースグループ

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

    フレームワーク

    [Tensorflow] を選択します。

    データセット

    手順1で作成したデータセットを選択します。

    ノードイメージ

    [画像アドレス] を選択し、入力フィールドに画像アドレスを入力します。 例: registry.cn-shanghai.aliyuncs.com/mybigpai/nni:diffusers

    画像には次のデータがプリセットされています。

    • 事前にトレーニングされた基本モデル: Stable-Diffusion-v1-5は /workspace/diffusers_model_data/modelパスにプリセットされています。

    • LoRAトレーニングデータ: ポケモンデータは /workspace/diffusers_model_data/dataパスにプリセットされています。

    • トレーニングコード: ディフューザーは /workspace/diffusersパスにプリセットされています。

    [インスタンスタイプ]

    [GPU] > 12vCPU + 92GB Mem + 1 * NVIDIA V100 ecs.gn6e-c12g1.3xlargeインスタンスタイプを選択します。

    ノード数

    値を1に設定します。

    Node Startupコマンド

    cd /workspace/diffusers/examples/text_to_image && accelerate launch --mixed_precision="fp16" train_text_to_image_lora_eval.py \
        --pretrained_model_name_or_path="/workspace/diffusers_model_data/model" \
        --dataset_name="/workspace/diffusers_model_data/data" \
        --caption_column="text" \
        --resolution=512 --random_flip \
        --train_batch_size=8 \
        --val_batch_size=8 \
        --num_train_epochs=100 --checkpointing_steps=100 \
        --learning_rate=${lr} --lr_scheduler=${lr_scheduler} --lr_warmup_steps=0 \
        --rank=${rank} --adam_beta1=${adam_beta1} --adam_beta2=${adam_beta2} --adam_weight_decay=${adam_weight_decay} \
        --max_grad_norm=${max_grad_norm} \
        --seed=42 \
        --output_dir="/mnt/data/diffusers/pokemon/sd-pokemon_${exp_id}_${trial_id}" \
        --validation_prompts "a cartoon pikachu pokemon with big eyes and big ears" \
        --validation_metrics ImageRewardPatched \
        --save_by_metric val_loss 

    ハイパーパラメータ

    次のセクションでは、ハイパーパラメータの制約タイプと検索空間について説明します。

    • lr:

      • 制約タイプ: 選択。

      • Search Space:: image.pngアイコンをクリックして、次の列挙値を追加します: 1e-4、1e-5、および2e-5。

    • lr_scheduler:

      • 制約タイプ: 選択。

      • Search Space:: image.pngアイコンをクリックして、定数、コサイン、多項式の列挙値を追加します。

    • rank:

      • 制約タイプ: 選択。

      • 検索スペース: image.pngアイコンをクリックして、4、32、64の列挙値を追加します。

    • adam_beta1:

      • 制約タイプ: 選択。

      • 検索スペース: image.pngアイコンをクリックして、0.9と0.95の列挙値を追加します。

    • adam_beta2:

      • 制約タイプ: 選択。

      • 検索スペース: image.pngアイコンをクリックして、0.99と0.999の列挙値を追加します。

    • adam_weight_decay:

      • 制約タイプ: 選択。

      • 検索スペース: image.pngアイコンをクリックして、次の列挙値を追加します。

    • max_grad_norm:

      • 制約タイプ: 選択。

      • 検索スペース: image.pngアイコンをクリックして、1、5、10の列挙値を追加します。

    上記の設定では、648のハイパーパラメーターの組み合わせが生成されます。 システムは、ハイパーパラメータの組み合わせごとに試行を作成し、ハイパーパラメータの組み合わせの1つのセットを使用して試行を実行します。

  2. トライアル設定セクションでパラメーターを設定します。

    パラメーター

    説明

    メトリックタイプ

    [stdout] を選択します。

    移動方法

    ベストを選択します。

    メトリック重量

    • キー: val_loss=([0-9\\.]+) 。

    • 値: 1。

    メトリックソース

    値をcmd1に設定します。

    最適化

    [最大化] を選択します。

  3. [検索設定] セクションでパラメーターを設定します。

    パラメーター

    説明

    検索アルゴリズム

    [TPE] を選択します。

    最大トライアル

    値を5に設定します。

    最大同時試行

    値を 2 に設定します。

    EarlyStopの有効化

    早期停止機能を有効にするかどうかを指定します。

    スタートステップ

    5

ステップ3: 実験の詳細と結果を表示する

  1. [AutoML] ページで、実験の名前をクリックして、[実験の詳細] ページに移動します。image

    [実験の詳細] ページで、トライアルの実行の進行状況とステータスの統計を表示できます。 この実験では、指定された検索アルゴリズムと最大試行回数に基づいて5回の試行が自動的に作成されます。

  2. [トライアル] をクリックして、[トライアル] タブに移動します。 実験用に自動的に生成されたトライアル、各トライアルの実行ステータス、最終メトリック、ハイパーパラメータの組み合わせを表示できます。 image

    試験は約5時間行われる。 この例では、OptimizationパラメーターはMaximizeに設定されています。 メトリック0.087655によって示されるハイパーパラメータの組み合わせは、最適な組み合わせである。

手順4: モデルサービスのデプロイとモデル推論の実行

  1. LoRAモデルをダウンロードし、モデルファイル形式を変換します。

    1. 実験を実行すると、スタートアップコマンドで指定したoutput_dirディレクトリにモデルファイルが生成されます。 モデルファイルを表示およびダウンロードするには、実験にマウントされているOSSパスのcheckpoint-bestディレクトリに移動します。 詳細については、「OSSコンソールを使用して開始する」をご参照ください。 image

    2. 次のコマンドを実行して、pytorch_model.binをpytorch_model_converted.safetensorsに変換します。

      wget http://automl-nni.oss-cn-beijing.aliyuncs.com/aigc/convert.py
      python convert.py --file pytorch_model.bin
  2. Stable Diffusion webアプリケーションを展開します。

    1. Elastic Algorithm Service (EAS) ページに移動します。 詳細については、「PAIコンソールを使用したモデルサービス展開」トピックの「ステップ1: EAS-オンラインモデルサービスページへの移動」を参照してください。

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

    3. [サービスの作成] ページでパラメーターを設定し、[デプロイ] をクリックします。 下表に、各パラメーターを説明します。

      パラメーター

      説明

      サービス名

      サービスの名前です。 このトピックでは、sdwebui_demoを使用します。

      デプロイ方法

      [イメージを使用したWebアプリのデプロイ] を選択します。

      画像の選択

      [PAI Image] をクリックし、[Image] ドロップダウンリストからstable-diffusion-webuiを選択し、[Image Version] ドロップダウンリストから4.2-standardを選択します。

      説明

      モデルサービスをデプロイするときに、イメージの最新バージョンを選択できます。

      モデル設定

      [モデル設定の指定] をクリックしてモデルを設定します。

      • [モデル設定] セクションで、[OSSパスのマウント] を選択します。 [マウントパス] フィールドに、手順1で作成したOSSバケットパスを指定します。 例: oss:// bucket-test/data-oss/

      • マウントパス: OSSファイルディレクトリをイメージの /code/stable-diffusion-webuiパスにマウントします。 例: /code/stable-diffusion-webui/data-oss

      • 読み取り専用モードを有効にする: 読み取り専用モードをオフにします。

      実行するコマンド

      イメージを設定すると、システムは自動的にコマンドを指定します。 コマンドに -- data-dir <mount directory> を追加する必要があります。 マウントディレクトリは、モデル設定で指定したマウントパスの最終レベルのディレクトリと同じである必要があります。 この例では、-- data-dir data-ossがコマンドに追加されます。

      リソース設定モード

      [一般] を選択します。

      リソース設定

      [GPU] タブで [インスタンスタイプ] を選択します。 費用対効果を確保するため、ml.gu7i.c16m60.1-gu30インスタンスタイプを使用することを推奨します。

      システムディスク

      追加のシステムディスク容量を100 GBに設定します。

    4. [デプロイ] をクリックします。

      次の図は、指定した空のOSSディレクトリにPAIが自動的に作成するディレクトリを示しています。 また、PAIは必要なデータをディレクトリにコピーします。49a056cc3a4f03e3744bdbeb2bf784ad

  3. モデルファイルを指定したパスにアップロードし、サービスの [操作] 列で image /> [サービスの再起動] を選択します。 設定は、サービスの再起動後に有効になります。

    • 前の手順で生成したpytorch_model_converted.safetensorsモデルファイルをOSSのmodels/lora/ ディレクトリにアップロードします。

    • revAnimated_v122基本モデルをOSSのmodels/Stable-diffusion/ ディレクトリにアップロードします。

  4. 管理するサービスを見つけて、[サービスタイプ] 列の [Webアプリの表示] をクリックします。 Web UIページで、モデルの推論と検証を実行します。