LeRobot documentation

🤗 PEFTによるパラメータ効率の良いファインチューニング

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

🤗 PEFTによるパラメータ効率の良いファインチューニング

🤗 PEFT(Parameter-Efficient Fine-Tuning)は、モデルのパラメータをすべて学習せずに、事前学習済みモデル(事前学習済みポリシー(例:SmolVLA、π₀、…)など)を新しいタスクに効率的に適応させるためのライブラリです。これにより、同等のパフォーマンスを実現できます。

PEFTサポートを有効にするには、lerobot[peft]オプションパッケージをインストールしてください。

アダプテーションのすべての可能な方法については、🤗 PEFT のドキュメントを参照してください。

SmolVLAの学習

このセクションでは、PEFTを用いて事前学習済みのSmolVLAポリシーをliberoデータセットでトレーニングする方法を示します。 簡潔さのため、libero_spatialサブセットでのみトレーニングを行います。パラメータ効率よくファインチューニングするモデルとしてlerobot/smolvla_baseを使用します:

lerobot-train \
 --policy.path=lerobot/smolvla_base \
 --policy.repo_id=your_hub_name/my_libero_smolvla \
 --dataset.repo_id=HuggingFaceVLA/libero \
 --policy.output_features=null \
 --policy.input_features=null \
 --policy.optimizer_lr=1e-3 \
 --policy.scheduler_decay_lr=1e-4 \
 --env.type=libero \
 --env.task=libero_spatial \
 --steps=100000 \
 --batch_size=32 \
 --peft.method_type=LORA \
 --peft.r=64 \
 --peft.lora_alpha=64

--peft.method_type パラメータにより、使用する PEFT メソッドを選択できます。ここでは、おそらく現在最も人気のあるファインチューニング手法である LoRA(Low-Rank Adapter)を使用しています。低ランク適応とは、完全な重み行列ではなく、比較的低いランクの行列のみをファインチューニングすることを意味します。このランクは --peft.r パラメータで指定でき、LoRA スケーリング係数は --peft.lora_alpha で指定します(scaling = lora_alpha / r)。ランクが高いほど、フルファインチューニングに近づきます。

パラメータの多い、より複雑な手法も存在します。これらはまだサポートされていません。特定のPEFT手法のサポートを希望される場合は、お気軽にissueを立ててください。

デフォルトでは、PEFTはSmolVLAのLM expertのq_projおよびv_projレイヤーを対象とします。また、タスク依存性が高い可能性のあるため、状態およびアクションの射影行列も対象とします。異なるレイヤーを対象とする必要がある場合は、--peft.target_modulesを使用して対象とするレイヤーを指定できます。サポートされている入力については、それぞれのPEFTメソッドのドキュメントを参照してください(例: LoRAのtarget_modulesドキュメント)。通常、サフィックスのリストまたは正規表現がサポートされています。例えば、qおよびvの射影ではなく、lm_expertのMLPを対象とするには、以下を使用します:

--peft.target_modules='(model\.vlm_with_expert\.lm_expert\..*\.(down|gate|up)_proj|.*\.(state_proj|action_in_proj|action_out_proj|action_time_mlp_in|action_time_mlp_out))'

レイヤーを適応させるだけでなく、完全にファインチューニングする必要がある場合は、--peft.full_training_modules パラメータにレイヤーのサフィックスのリストを指定できます。

--peft.full_training_modules='["state_proj"]'

学習率とスケジュールされた目標学習率は、通常、フルファインチューニングで使用する学習率(例:通常は1e-4)に対して10倍の係数でスケーリングできます(LoRAを使用する場合、1e-3など)。

PEFTは、シャード化されたマルチGPUトレーニング(FSDP2およびHSDP)にも対応しています。マルチGPUトレーニングを参照してください。

その他のポリシー

同じ--peft.*フラグは、あらゆる事前学習済みポリシーで機能します。一部のポリシー(例: SmolVLA、π₀、π₀.₅、MolmoAct2)には組み込みのデフォルトのtarget_modulesが同梱されているため、--peft.method_type=LORAを指定するだけで十分です。一方、そうでないポリシーでは、--peft.target_modulesを明示的に渡す必要があります。例えば、LingBot-VAでは、推奨されるターゲットがその専用ガイドにドキュメント化されています。

--policy.use_peft=true 単独で指定することは、デフォルト設定で --peft.method_type=LORA を指定するのと同じです。

Update on GitHub