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

В PEFT torch.compile работает не для всех, а лишь для некоторых функций. Причина, по которой он не всегда работает, заключается в том, что PEFT в некоторых местах является высокодинамичным (например, при загрузке и переключении между несколькими адаптерами), что может вызывать проблемы для torch.compile. В других местах torch.compile может работать, но не будет таким быстрым, как ожидается, из-за разрывов графа.

Если вы не видите ошибку, это не обязательно означает, что torch.compile сработал корректно. Он может выдать результат, но он будет неверным. В этом руководстве описано, что работает с torch.compile, а что — нет. Для собственных тестов мы рекомендуем использовать последнюю версию PyTorch, так как torch.compile постоянно улучшается.

Если не указано иное, использовались настройки torch.compile по умолчанию.

Обучение и инференс с torch.compile

Эти функции работают с torch.compile. Всё перечисленное ниже было протестировано с каузальной LM:

  • Обучение с помощью Trainer из 🤗 transformers
  • Обучение с помощью пользовательского цикла PyTorch
  • Вывод
  • Генерация

Следующие адаптеры успешно протестированы:

  • AdaLoRA
  • BOFT
  • IA³
  • Настройка Layer Norm
  • LoHa
  • LoKr
  • LoRA
  • LoRA + DoRA
  • LoRA, применённый к слоям встраивания
  • OFT
  • VeRA
  • HRA

Расширенные возможности PEFT с torch.compile

Ниже перечислены некоторые продвинутые возможности PEFT, которые работают. Все они были протестированы с LoRA.

  • modules_to_save (i.e. config = LoraConfig(..., modules_to_save=...))
  • Объединение адаптеров (одного или нескольких)
  • Объединение нескольких адаптеров в один (то есть вызов model.add_weighted_adapter(...))
  • Использование адаптеров PEFT с квантованием (bitsandbytes)
  • Отключение адаптеров (то есть использование with model.disable_adapter())
  • Выгрузка (то есть вызов model.merge_and_unload())
  • Смешанные батчи адаптеров (т. е. вызов model(batch, adapter_names=["__base__", "default", "other", ...]))
  • Вывод с несколькими адаптерами (то есть загрузка более одного адаптера с помощью model.add_adapter или model.load_adapter); для этого вызывайте torch.compile только после загрузки всех адаптеров

Как правило, можно ожидать, что если функция работает корректно с LoRA и поддерживается другими типами адаптеров, она должна работать и для данного типа адаптера.

Тестовые случаи

Все перечисленные выше сценарии использования протестированы в peft/tests/test_torch_compile.py. Если вы хотите подробнее узнать, как мы тестировали определённую функцию, откройте этот файл и найдите тест, соответствующий вашему сценарию.

Если у вас есть другой сценарий использования, в котором вы знаете, что torch.compile работает или не работает с PEFT, пожалуйста, поделитесь этим, сообщив нам или открыв PR для добавления этого сценария в охватываемые тестовые случаи.

Update on GitHub