PEFT documentation
torch.compile
torch.compile
En PEFT, torch.compile funciona para algunas, pero no para todas, las funcionalidades. La razón por la que no siempre funciona es que PEFT es altamente dinámico en ciertos aspectos (por ejemplo, la carga y el cambio entre múltiples adaptadores), lo cual puede causar problemas para torch.compile. En otros lugares, torch.compile puede funcionar, pero no será tan rápido como se espera debido a las interrupciones del grafo.
Si no ves un error, no significa necesariamente que torch.compile haya funcionado correctamente. Es posible que te devuelva una salida, pero que esta sea incorrecta. Esta guía describe qué funciona con torch.compile y qué no. Para tus propias pruebas, recomendamos usar la última versión de PyTorch, ya que torch.compile se está mejorando constantemente.
A menos que se indique lo contrario, se utilizaron los ajustes predeterminados de
torch.compile.
Entrenamiento e inferencia con torch.compile
Estas características funcionan con torch.compile. Todo lo que se enumera a continuación se probó con un LM causal:
- Entrenamiento con
Trainerde 🤗 transformers - Entrenamiento con un bucle personalizado de PyTorch
- Inferencia
- Generación
Los siguientes adaptadores se probaron con éxito:
- AdaLoRA
- BOFT
- IA³
- Ajuste de Layer Norm
- LoHa
- LoKr
- LoRA
- LoRA + DoRA
- LoRA aplicado a las capas de incrustación
- OFT
- VeRA
- HRA
Funciones avanzadas de PEFT con torch.compile
A continuación se muestran algunas de las funciones más avanzadas de PEFT que funcionan. Todas fueron probadas con LoRA.
modules_to_save(i.e.config = LoraConfig(..., modules_to_save=...))- Fusión de adaptadores (uno o varios)
- Fusionar varios adaptadores en un solo adaptador (es decir, llamar a
model.add_weighted_adapter(...)) - Uso de adaptadores PEFT con cuantización (bitsandbytes)
- Desactivar adaptadores (es decir, usar
with model.disable_adapter()) - Descarga (es decir, llamar a
model.merge_and_unload()) - Lotes de adaptadores mixtos (es decir, llamar a
model(batch, adapter_names=["__base__", "default", "other", ...])) - Inferencia con múltiples adaptadores (es decir, usar
model.add_adapteromodel.load_adapterpara cargar más de 1 adaptador); para ello, solo llama atorch.compiledespués de cargar todos los adaptadores
En general, podemos esperar que si una característica funciona correctamente con LoRA y también es compatible con otros tipos de adaptador, debería funcionar también para ese tipo de adaptador.
Casos de prueba
Todos los casos de uso enumerados anteriormente se prueban dentro de peft/tests/test_torch_compile.py. Si deseas revisar con más detalle cómo probamos una función en particular, ve a ese archivo y consulta la prueba que corresponde a tu caso de uso.
Update on GitHubSi tienes otro caso de uso en el que sepas que
torch.compilefunciona o no con PEFT, contribuye avisándonos o abriendo un PR para añadir este caso de uso a los casos de prueba cubiertos.