LeRobot documentation
Ajuste fino eficiente de parâmetros com 🤗 PEFT
Ajuste fino eficiente de parâmetros com 🤗 PEFT
🤗 PEFT (Parameter-Efficient Fine-Tuning) é uma biblioteca para adaptar de forma eficiente grandes modelos pré-treinados, como políticas pré-treinadas (por exemplo, SmolVLA, π₀, …), a novas tarefas sem treinar todos os parâmetros do modelo, mantendo um desempenho comparável.
Instale o pacote opcional lerobot[peft] para habilitar o suporte a PEFT.
Para ler sobre todos os métodos possíveis de adaptação, consulte a documentação do 🤗 PEFT.
Treinando o SmolVLA
Nesta seção, mostraremos como treinar uma política SmolVLA pré-treinada com PEFT no conjunto de dados libero.
Por brevidade, treinaremos apenas no subconjunto libero_spatial. Usaremos lerobot/smolvla_base como o modelo
para 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=64Observe o parâmetro --peft.method_type, que permite selecionar qual método PEFT usar. Aqui, usamos LoRA (Low-Rank Adapter), que provavelmente é o método de fine-tuning mais popular até o momento. A adaptação de baixo rank significa que ajustamos apenas uma matriz com rank comparativamente baixo, em vez da matriz de pesos completa. Esse rank pode ser especificado usando o parâmetro --peft.r, e o fator de escala do LoRA com --peft.lora_alpha (onde scaling = lora_alpha / r). Quanto maior o rank, mais próximo você fica do fine-tuning completo
Existem métodos mais complexos que possuem mais parâmetros. Esses ainda não são suportados; sinta-se à vontade para abrir uma issue se você deseja ver um método específico de PEFT suportado.
Por padrão, o PEFT visa as camadas q_proj e v_proj do especialista LM no SmolVLA. Ele também visa as matrizes de projeção de estado e ação, pois são as mais prováveis de serem dependentes da tarefa. Se você precisar visar camadas diferentes, pode usar --peft.target_modules para especificar quais camadas visar. Você pode consultar a documentação do método PEFT respectivo para ver quais entradas são suportadas (por exemplo, documentação de target_modules do LoRA). Normalmente, uma lista de sufixos ou uma expressão regular são suportadas. Por exemplo, para visar os MLPs do lm_expert em vez das projeções q e v, use:
--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))'Caso você precise fazer o ajuste fino completo de uma camada em vez de apenas adaptá-la, você pode fornecer uma lista de sufixos de camadas para o parâmetro --peft.full_training_modules:
--peft.full_training_modules='["state_proj"]'A taxa de aprendizado e a taxa de aprendizado alvo agendada geralmente podem ser escaladas por um fator de 10 em comparação com a taxa de aprendizado usada para o ajuste fino completo (por exemplo, 1e-4 normal, portanto 1e-3 usando LoRA).
O PEFT também funciona com treinamento multi-GPU em shards (FSDP2 e HSDP), consulte treinamento multi-GPU.
Outras políticas
As mesmas flags --peft.* funcionam para qualquer política pré-treinada. Algumas políticas (por exemplo, SmolVLA, π₀, π₀.₅, MolmoAct2)
incluem target_modules padrão embutidos, então --peft.method_type=LORA é suficiente. Outras não, e
pedirão que você passe --peft.target_modules explicitamente, por exemplo, LingBot-VA, cujos
alvos recomendados estão documentados em seu guia dedicado.
--policy.use_peft=true por si só é equivalente a --peft.method_type=LORA com as configurações padrão.