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

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 Trainer de 🤗 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_adapter o model.load_adapter para cargar más de 1 adaptador); para ello, solo llama a torch.compile despué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.

Si tienes otro caso de uso en el que sepas que torch.compile funciona o no con PEFT, contribuye avisándonos o abriendo un PR para añadir este caso de uso a los casos de prueba cubiertos.

Update on GitHub