LeRobot documentation
🤗 PEFTによるパラメータ効率の良いファインチューニング
🤗 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 を指定するのと同じです。