LeRobot documentation
Ajuste fino eficiente en parámetros con 🤗 PEFT
Ajuste fino eficiente en parámetros con 🤗 PEFT
🤗 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.
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 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=64Tenga en cuenta el parámetro --peft.method_type, que le permite seleccionar qué método de PEFT utilizar. Aquí usamos 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).
Normalmente se admite 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.
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.
--policy.use_peft=true por sí solo es equivalente a --peft.method_type=LORA con la configuración predeterminada.