PEFT documentation

torch.compile

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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.compile foram 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 Trainer do 🤗 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_adapter ou model.load_adapter para carregar mais de 1 adaptador); para isso, chame torch.compile apenas 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.

Se você tiver outro caso de uso em que saiba que torch.compile funciona ou não funciona com PEFT, contribua nos informando ou abrindo um PR para adicionar esse caso de uso aos casos de teste cobertos.

Update on GitHub