PEFT documentation
torch.compile
torch.compile
No PEFT, o torch.compile funciona para alguns, mas não para todos os recursos. O motivo pelo qual ele nem sempre funciona é que o PEFT é altamente dinâmico em certos pontos (carregar e alternar entre vários adaptadores, por exemplo), o que pode causar problemas para o torch.compile. Em outros pontos, o torch.compile pode funcionar, mas não será tão rápido quanto o esperado devido a quebras de grafo.
Se você não vir um erro, isso não significa necessariamente que o torch.compile funcionou corretamente. Ele pode gerar uma saída, mas a saída pode estar incorreta. Este guia descreve o que funciona com o torch.compile e o que não funciona. Para os seus próprios testes, recomendamos usar a versão mais recente do PyTorch, pois o torch.compile está sendo constantemente aprimorado.
A menos que indicado o contrário, as configurações padrão de
torch.compileforam usadas.
Treinamento e inferência com torch.compile
Esses recursos funcionam com torch.compile. Tudo o que está listado abaixo foi testado com um LM causal:
- Treinamento com
Trainerdo 🤗 transformers - Treinamento com um loop personalizado do PyTorch
- Inferência
- Geração
Os seguintes adaptadores foram testados com sucesso:
- AdaLoRA
- BOFT
- IA³
- Ajuste da Normalização de Camada
- LoHa
- LoKr
- LoRA
- LoRA + DoRA
- LoRA aplicado às camadas de incorporação
- OFT
- VeRA
- HRA
Recursos avançados de PEFT com torch.compile
Abaixo estão alguns dos recursos mais avançados do PEFT que funcionam. Todos eles foram testados com LoRA.
modules_to_save(i.e.config = LoraConfig(..., modules_to_save=...))- Mesclando adaptadores (um ou vários)
- Mesclar vários adaptadores em um único adaptador (ou seja, chamando
model.add_weighted_adapter(...)) - Usando adaptadores PEFT com quantização (bitsandbytes)
- Desativando adaptadores (ou seja, usando
with model.disable_adapter()) - Descarregamento (ou seja, chamar
model.merge_and_unload()) - Lotes de adaptadores mistos (ou seja, chamando
model(batch, adapter_names=["__base__", "default", "other", ...])) - Inferência com múltiplos adaptadores (ou seja, usando
model.add_adapteroumodel.load_adapterpara carregar mais de 1 adaptador); para isso, chametorch.compileapenas após carregar todos os adaptadores
Em geral, podemos esperar que, se um recurso funcionar corretamente com LoRA e também for suportado por outros tipos de adaptador, ele também deva funcionar para esse tipo de adaptador.
Casos de teste
Todos os casos de uso listados acima são testados dentro de peft/tests/test_torch_compile.py. Se você deseja verificar em mais detalhes como testamos um determinado recurso, acesse esse arquivo e confira o teste que corresponde ao seu caso de uso.
Update on GitHubSe você tiver outro caso de uso em que saiba que
torch.compilefunciona ou não funciona com PEFT, contribua nos informando ou abrindo um PR para adicionar esse caso de uso aos casos de teste cobertos.