PEFT documentation
torch.compile
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. Если вы хотите подробнее узнать, как мы тестировали определённую функцию, откройте этот файл и найдите тест, соответствующий вашему сценарию.
Update on GitHubЕсли у вас есть другой сценарий использования, в котором вы знаете, что
torch.compileработает или не работает с PEFT, пожалуйста, поделитесь этим, сообщив нам или открыв PR для добавления этого сценария в охватываемые тестовые случаи.