LeRobot documentation

Параметрически эффективная дообучение с 🤗 PEFT

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, π₀, …), к новым задачам без обучения всех параметров модели, при этом обеспечивая сопоставимую производительность.

Установите дополнительный пакет lerobot[peft], чтобы включить поддержку PEFT.

Чтобы узнать обо всех возможных методах адаптации, обратитесь к документации 🤗 PEFT.

Обучение SmolVLA

В этом разделе мы покажем, как обучить предобученную политику SmolVLA с использованием PEFT на наборе данных 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 нацеливается на слои q_proj и v_proj LM-эксперта в SmolVLA. Также нацеливаются матрицы проекций состояния и действия, поскольку они, скорее всего, зависят от задачи. Если нужно нацелить другие слои, используйте --peft.target_modules, чтобы указать, какие слои следует выбрать. Список поддерживаемых входных данных можно найти в документации соответствующего метода PEFT (например, документация target_modules для LoRA). Обычно поддерживается список суффиксов или регулярное выражение. Например, чтобы нацелить MLP в lm_expert вместо проекций q и v, используйте:

--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"]'

Обычно коэффициент обучения и целевой коэффициент обучения по расписанию можно масштабировать в 10 раз по сравнению с коэффициентом обучения, используемым для полной дообучения (например, 1e-4 для обычного обучения, а 1e-3 при использовании LoRA).

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