# Ajuste fino eficiente en parámetros con 🤗 PEFT

[🤗 PEFT](https://github.com/huggingface/peft) (Parameter-Efficient Fine-Tuning) es una biblioteca para adaptar de manera eficiente grandes modelos preentrenados, como políticas preentrenadas (p. ej., SmolVLA, π₀, ...), a nuevas tareas sin entrenar todos los parámetros del modelo, logrando un rendimiento comparable.

Instale el paquete opcional `lerobot[peft]` para habilitar el soporte de PEFT.

Para leer sobre todos los métodos de adaptación posibles, consulte la [documentación de 🤗 PEFT](https://huggingface.co/docs/peft/index).

## Entrenamiento de SmolVLA

En esta sección te mostraremos cómo entrenar una política SmolVLA preentrenada con PEFT en el conjunto de datos libero. Por brevedad, solo entrenamos en el subconjunto `libero_spatial`. Utilizaremos `lerobot/smolvla_base` como el modelo para el ajuste fino eficiente de parámetros:

```
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
```

Tenga en cuenta el parámetro `--peft.method_type`, que le permite seleccionar qué método de PEFT utilizar. Aquí usamos [LoRA](https://huggingface.co/docs/peft/main/en/package_reference/lora) (Low-Rank Adapter), que probablemente sea el método de fine-tuning más popular hasta la fecha. La adaptación de bajo rango significa que solo ajustamos una matriz con un rango comparativamente bajo en lugar de la matriz de pesos completa. Este rango se puede especificar usando el parámetro `--peft.r`, y el factor de escalado de LoRA con `--peft.lora_alpha` (donde `scaling = lora_alpha / r`). A mayor rango, más se acerca al fine-tuning completo.

Existen métodos más complejos que tienen más parámetros. Estos aún no son compatibles; siéntase libre de abrir un problema (issue) si desea ver un método PEFT específico soportado.

Por defecto, PEFT dirigirá su objetivo a las capas `q_proj` y `v_proj` del experto LM en SmolVLA. También dirigirá su objetivo a las matrices de proyección de estado y acción, ya que es probable que dependan de la tarea. Si necesitas dirigir el objetivo a capas diferentes, puedes usar `--peft.target_modules` para especificar qué capas dirigir. Puedes consultar la documentación del método PEFT correspondiente para ver qué entradas se admiten (p. ej., [documentación de target_modules de LoRA](https://huggingface.co/docs/peft/main/en/package_reference/lora#peft.LoraConfig.target_modules)). Por lo general, se admiten una lista de sufijos o una expresión regular. Por ejemplo, para dirigir el objetivo a los MLP del `lm_expert` en lugar de las proyecciones `q` y `v`, usa:

```
--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))'
```

En caso de que necesites ajustar por completo una capa en lugar de solo adaptarla, puedes proporcionar una lista de sufijos de capas al parámetro `--peft.full_training_modules`:

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

La tasa de aprendizaje y la tasa de aprendizaje objetivo programada generalmente pueden escalarse por un factor de 10 en comparación con la tasa de aprendizaje utilizada para el ajuste fino completo (p. ej., 1e-4 en normal, por lo que 1e-3 al usar LoRA).

PEFT también funciona con el entrenamiento multi-GPU fragmentado (FSDP2 y HSDP), consulte [entrenamiento multi-GPU](./multi_gpu_training#peft).

## Otras políticas

Los mismos flags `--peft.*` funcionan para cualquier política preentrenada. Algunas políticas (p. ej., SmolVLA, π₀, π₀.₅, MolmoAct2) incluyen `target_modules` predeterminados integrados, por lo que basta con `--peft.method_type=LORA`. Otras no los incluyen y te pedirán que pases `--peft.target_modules` explícitamente, por ejemplo LingBot-VA, cuyos objetivos recomendados están documentados en su [guía dedicada](./lingbot_va#training--fine-tuning).

`--policy.use_peft=true` por sí solo es equivalente a `--peft.method_type=LORA` con la configuración predeterminada.

