? ПЕФТ
Современные методы точной настройки параметров (PEFT)
Точная настройка больших предварительно обученных моделей часто обходится непомерно дорого из-за их масштаба. Методы эффективной точной настройки параметров (PEFT) позволяют эффективно адаптировать большие предварительно обученные модели к различным последующим приложениям за счет точной настройки только небольшого количества (дополнительных) параметров модели, а не всех параметров модели. Это значительно снижает затраты на вычисления и хранение. Новейшие методы PEFT достигают производительности, сравнимой с полностью настроенными моделями.
PEFT интегрирован с Transformers для упрощения обучения модели и вывода, Diffusers для удобного управления различными адаптерами и Accelerate для распределенного обучения и вывода для действительно больших моделей.
Кончик
Посетите организацию PEFT, чтобы прочитать о методах PEFT, реализованных в библиотеке, и просмотреть блокноты, демонстрирующие, как применять эти методы для различных последующих задач. Нажмите кнопку «Просмотреть репозитории» на странице организации, чтобы получать уведомления о новых реализованных методах и блокнотах!
В разделе «Справочник по API адаптеров PEFT» приведен список поддерживаемых методов PEFT, а также прочитайте концептуальные руководства по адаптерам, программным подсказкам и IA3, чтобы узнать больше о том, как работают эти методы.
Установите PEFT из pip:
pip install peft
Подготовьте модель для обучения с помощью метода PEFT, такого как LoRA, обернув базовую модель и конфигурацию PEFT с помощью get_peft_model
. Для модели bigscience/mt0-large вы тренируете только 0,19% параметров!
from transformers import AutoModelForSeq2SeqLM
from peft import get_peft_config , get_peft_model , LoraConfig , TaskType
model_name_or_path = "bigscience/mt0-large"
tokenizer_name_or_path = "bigscience/mt0-large"
peft_config = LoraConfig (
task_type = TaskType . SEQ_2_SEQ_LM , inference_mode = False , r = 8 , lora_alpha = 32 , lora_dropout = 0.1
)
model = AutoModelForSeq2SeqLM . from_pretrained ( model_name_or_path )
model = get_peft_model ( model , peft_config )
model . print_trainable_parameters ()
"trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19151053100118282"
Чтобы загрузить модель PEFT для вывода:
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
import torch
model = AutoPeftModelForCausalLM . from_pretrained ( "ybelkada/opt-350m-lora" ). to ( "cuda" )
tokenizer = AutoTokenizer . from_pretrained ( "facebook/opt-350m" )
model . eval ()
inputs = tokenizer ( "Preheat the oven to 350 degrees and place the cookie dough" , return_tensors = "pt" )
outputs = model . generate ( input_ids = inputs [ "input_ids" ]. to ( "cuda" ), max_new_tokens = 50 )
print ( tokenizer . batch_decode ( outputs , skip_special_tokens = True )[ 0 ])
"Preheat the oven to 350 degrees and place the cookie dough in the center of the oven. In a large bowl, combine the flour, baking powder, baking soda, salt, and cinnamon. In a separate bowl, combine the egg yolks, sugar, and vanilla."
Использование PEFT имеет множество преимуществ, но главное из них — огромная экономия вычислительных ресурсов и хранилища, что делает PEFT применимым во многих различных случаях использования.
Учитывайте требования к памяти для обучения следующих моделей на наборе данных Ough/raft/twitter_complaints с графическим процессором A100 объемом 80 ГБ и более чем 64 ГБ оперативной памяти ЦП.
Модель | Полная точная настройка | PEFT-LoRA PyTorch | PEFT-LoRA DeepSpeed с разгрузкой ЦП |
---|---|---|---|
bigscience/T0_3B (параметры 3B) | 47,14 ГБ графического процессора / 2,96 ГБ процессора | 14,4 ГБ графического процессора / 2,96 ГБ процессора | 9,8 ГБ графического процессора / 17,8 ГБ процессора |
bigscience/mt0-xxl (12B параметров) | ООМ графический процессор | 56 ГБ графического процессора / 3 ГБ процессора | 22 ГБ графического процессора / 52 ГБ процессора |
bigscience/bloomz-7b1 (параметры 7B) | ООМ графический процессор | 32 ГБ графического процессора / 3,8 ГБ процессора | 18,1 ГБ графического процессора / 35 ГБ процессора |
С помощью LoRA вы можете полностью настроить модель с параметрами 12B, которой в противном случае не хватило бы памяти на графическом процессоре объемом 80 ГБ, а также удобно адаптировать и обучить модель с параметрами 3B. Если посмотреть на производительность модели с параметрами 3B, то она сравнима с полностью настроенной моделью, использующей лишь часть памяти графического процессора.
Имя отправки | Точность |
---|---|
Человеческий базовый уровень (краудсорсинг) | 0,897 |
Флан-Т5 | 0,892 |
лора-t0-3b | 0,863 |
Кончик
Производительность модели bigscience/T0_3B не оптимизирована в таблице выше. Вы можете добиться еще большей производительности, поиграв с шаблонами входных инструкций, гиперпараметрами LoRA и другими гиперпараметрами, связанными с обучением. Окончательный размер контрольной точки этой модели составляет всего 19 МБ по сравнению с 11 ГБ полной модели bigscience/T0_3B. Узнайте больше о преимуществах точной настройки с помощью PEFT в этом сообщении блога.
Квантование — это еще один метод уменьшения требований к памяти модели за счет представления данных с более низкой точностью. Его можно комбинировать с методами PEFT, чтобы еще больше упростить обучение и загрузку LLM для вывода.
PEFT может помочь вам сэкономить место, избегая полной точной настройки моделей для каждой последующей задачи или набора данных. Во многих случаях вы настраиваете лишь очень небольшую часть параметров модели, а размер каждой контрольной точки составляет всего несколько МБ (вместо ГБ). Эти адаптеры PEFT меньшего размера демонстрируют производительность, сравнимую с полностью настроенной моделью. Если у вас много наборов данных, вы можете сэкономить много места с помощью модели PEFT и не беспокоиться о катастрофическом забывании или переоснащении базовой или базовой модели.
PEFT широко поддерживается в экосистеме Hugging Face из-за огромной эффективности, которую он обеспечивает для обучения и вывода.
Итеративный процесс диффузии потребляет много памяти, что может затруднить его обучение. PEFT может помочь снизить требования к памяти и уменьшить размер хранилища окончательной контрольной точки модели. Например, рассмотрим объем памяти, необходимый для обучения модели стабильной диффузии с LoRA на графическом процессоре A100 емкостью 80 ГБ с более чем 64 ГБ оперативной памяти ЦП. Размер контрольной точки окончательной модели составляет всего 8,8 МБ!
Модель | Полная точная настройка | ПЭФТ-Лора | PEFT-LoRA с контрольной точкой градиента |
---|---|---|---|
CompVis/стабильная диффузия-v1-4 | 27,5 ГБ графического процессора / 3,97 ГБ процессора | 15,5 ГБ графического процессора / 3,84 ГБ процессора | 8,12 ГБ графического процессора / 3,77 ГБ процессора |
Кончик
Взгляните на обучающий скрипт example/lora_dreambooth/train_dreambooth.py, чтобы попробовать обучить свою собственную модель стабильной диффузии с помощью LoRA, и поэкспериментируйте с пространством smangrul/peft-lora-sd-dreambooth Space, которое работает на экземпляре T4. Узнайте больше об интеграции PEFT в Diffusers в этом руководстве.
Accelerate — это библиотека для распределенного обучения и вывода на различных обучающих установках и оборудовании (графические процессоры, TPU, Apple Silicon и т. д.). Модели PEFT работают с Accelerate «из коробки», что делает очень удобным обучение действительно больших моделей или использование их для вывода на потребительском оборудовании с ограниченными ресурсами.
PEFT также может применяться для обучения LLM с использованием компонентов RLHF, таких как рейтинг и политика. Начните с чтения:
Используйте это пространство или ознакомьтесь с документацией, чтобы узнать, какие модели официально поддерживают метод PEFT из коробки. Даже если вы не видите модель в списке ниже, вы можете вручную настроить конфигурацию модели, чтобы включить PEFT для модели. Чтобы узнать, как это сделать, прочтите руководство по архитектуре новых трансформаторов.
Если вы хотите внести свой вклад в PEFT, ознакомьтесь с нашим руководством по вкладам.
Использовать? PEFT в своей публикации, пожалуйста, цитируйте его, используя следующую запись BibTeX.
@Misc { peft ,
title = { PEFT: State-of-the-art Parameter-Efficient Fine-Tuning methods } ,
author = { Sourab Mangrulkar and Sylvain Gugger and Lysandre Debut and Younes Belkada and Sayak Paul and Benjamin Bossan } ,
howpublished = { url{https://github.com/huggingface/peft} } ,
year = { 2022 }
}