Найти тему
daribaturova

Parameter-Efficient Fine-Tuning (PEFT): методы LoRA, Prefix tuning, Prompt tuning и Adapters

Оглавление

На сегодняшний день созданы разные большие языковые модели (LLM), которые показывают превосходные результаты, но для раскрытия их полного потенциала необходимо дообучение для точного решения конкретных задач. Традиционный метод файнтюнинга, при котором настраиваются все параметры предварительно обученной модели, становится непрактичным и вычислительно дорогостоящим при работе с современными моделями LLM.

PEFT(Parameter-Efficient Fine-Tuning) представляет собой эффективный подход, позволяющий не терять производительность при тонкой настройке модели, снижая при этом требования к памяти и вычислительным мощностям.

В этой статье мы рассмотрим общую концепцию PEFT, его преимущества и основные методы.

Что такое PEFT?

PEFT - это метод файнтюнинга, который позволяет улучшить результаты предварительно обученных языковых моделей при выполнении определенных задач. Его идея заключается в том, чтобы обучить небольшое подмножество параметров предварительно обученной модели LLM, оставляя большую часть замороженными.

Преимущества PEFT

  1. Ускорение времени обучения: PEFT позволяет сократить количество времени, затраченное на обучение, благодаря файнтюнингу небольшого количества параметров, а не всей модели.
  2. Снижение затрат на вычисления и хранение: PEFT выполняет тонкую настройку только небольшого подмножества параметров, что значительно уменьшает затраты на вычисления и хранение и снижает требования к оборудованию.
  3. Меньший риск переобучения: Благодаря замораживанию большей части параметров предварительно обученной модели мы можем избежать переобучения на новых данных.
  4. Преодоление катастрофического забывания: С помощью PEFT модель может адаптироваться к новым задачам, сохраняя ранее полученные знания благодаря заморозке большинства параметров.
  5. Удобство развертывания: Контрольные точки, созданные при PEFT, компактнее, чем при традиционной тонкой настройке, что делает их развертывание и перенос на другие устройства более простым, поскольку они требуют меньше места для хранения и могут загружаться быстрее.

Методы PEFT

PEFT включает в себя различные методы, которые направлены на эффективное дообучение больших языковых моделей. Основные из них:

  • LoRA
  • Prompt tuning
  • Prefix tuning
  • Adapters

На данный момент разработаны различные вариации и модификации на основе выше упомянутых методов.

Источник: https://arxiv.org/pdf/2303.15647.pdf
Источник: https://arxiv.org/pdf/2303.15647.pdf

Давайте рассмотрим каждый из них поподробнее.

LoRA

Метод LoRA (Low-Rank Adaptation) был разработан в 2021 году и представлен в данной статье. Его создатели были вдохновлены данной научной работой, в которой авторы отмечают, что, хотя LLM имеют миллионы или даже миллиарды параметров, они имеют низкую "внутреннюю размерность" (intrinsic dimension) при адаптации к новой задаче. Проще говоря, большинство параметров являются избыточными. Из чего можно сделать вывод, что матрицы можно представить пространством меньшей размерности, сохраняя при этом большую часть важной информации.

Создатели LoRA предположили, что изменение весов при файнтюнинге модели имеет низкий "внутренний ранг" (intrinsic rank). Идея данного метода заключается в том, что для предварительно обученной матрицы весов мы представляем её обновление двумя меньшими матрицами, полученными путем низкоранговой аппроксимации. Эти матрицы мы тренируем при обучении, а исходную матрицу весов замораживаем. Затем для получения окончательного результата мы объединяем исходные и обученные веса.

Иллюстрация работы LoRA  
Источник: https://huggingface.co/blog/trl-peft
Иллюстрация работы LoRA Источник: https://huggingface.co/blog/trl-peft

Одним из важнейших параметров является параметр "r" (ранг). Он определяет размер матриц низкого ранга. При правильном выборе ранга данный метод может показать впечатляющие результаты.

Дополнительная информация по методу LoRA:

https://medium.com/@gitlostmurali/understanding-lora-and-qlora-the-powerhouses-of-efficient-finetuning-in-large-language-models-7ac1adf6c0cf

https://habr.com/ru/articles/757086/

https://www.unite.ai/lora-qlora-and-qa-lora-efficient-adaptability-in-large-language-models-through-low-rank-matrix-factorization/

Prefix tuning

Перед знакомством со следующими тремя методами, хотелось бы ввести термин "аддитивный метод". Под ним подразумевается, что параметры предобученной модели дополняются новыми, и обучение происходит именно на них, тем временем исходные данные заморожены. Данный тип методов PEFT лучше всего изучен и включает в себя большую часть разработанных методов.

На просторах интернета по данной теме можно встретить термин "continuous (virtual) token". Он обозначает эмбеддинги, которые вставляются в промт модели. Они не имеют конкретного соответствия в словаре токенов и являются свободными параметрами, которые можно обучать.

Prefix tuning является аддитивным методом, который оборачивает исходные входные данные в дополнительный контекст для конкретной задачи, однако мы не сами задаем его, а находим с помощью обучения модели.

Суть данного метода заключается в том, что мы добавляем последовательность обучающих векторов (continuous task-specific vectors), называемым префиксом, к каждому блоку трансформера и обучаем только её, не трогая остальные данные.

Источник: https://www.leewayhertz.com/parameter-efficient-fine-tuning/
Источник: https://www.leewayhertz.com/parameter-efficient-fine-tuning/

В оригинальной статье создатели данного метода, исходя из результатов эксперимента на основе GPT-2, сделали вывод, что, обучая только 0,1% параметров, Prefix tuning показывает производительность, сравнимую с дообучением, при котором настраиваются все параметры модели, и превосходит его при файнтюнинге с малым объемом данных.

Дополнительная информация по методу Prefix tuning:

https://magazine.sebastianraschka.com/p/understanding-parameter-efficient

https://medium.com/@musicalchemist/prefix-tuning-lightweight-adaptation-of-large-language-models-for-customized-natural-language-a8a93165c132

Prompt tuning

Prompt tuning - это аддитивный метод, который является упрощенной версией Prefix tuning.

Давайте рассмотрим два типа промтов:

  • Hard prompts: Такой тип промта можно рассматривать, как некий шаблон. Он создается вручную людьми и является статичным.
Hard prompts
Источник: https://lightning.ai/pages/community/article/understanding-llama-adapters/#adapters
Hard prompts Источник: https://lightning.ai/pages/community/article/understanding-llama-adapters/#adapters
  • Soft prompts: Данный вид cоздается в процессе использования метода Prompt tuning. Мы объединяем входные векторные представления предобученной модели с обучаемым тензором, который затем оптимизируем с помощью обратного распространения ошибки.
Источник: https://www.leewayhertz.com/parameter-efficient-fine-tuning/
Источник: https://www.leewayhertz.com/parameter-efficient-fine-tuning/

В статье "The Power of Scale for Parameter-Efficient Prompt Tuning" авторы показывают, что этот метод является конкурентоспособным, так как разрыв между его производительностью и производительностью при традиционном методе файнтюнинга исчезает при увеличении размера модели.

Дополнительная информация по методу Prompt tuning:

https://cobusgreyling.medium.com/prompt-tuning-hard-prompts-soft-prompts-49740de6c64c

https://research.ibm.com/blog/what-is-ai-prompt-tuning

Adapters

Adapters также является аддитивным методом. Он похож на метод Prefix tuning, только в этом случае мы добавляем не префикс, а адаптеры. Авторы данного метода (статья) предложили следующую структуру:

Внутри адаптера исходные d-мерные признаки сначала проецируются в меньшее измерение m, затем применяется нелинейность, а после снова проецируются в d-мерное измерение. Также здесь присутствует skip connection.

Источник: https://arxiv.org/pdf/1902.00751.pdf
Источник: https://arxiv.org/pdf/1902.00751.pdf

В вышеупомянутой статье сравнили производительность при данном методе и при дообучении всех параметров. Результаты таковы: производительность при первом варианте находится в пределах 0,4 % от производительности второго варианта, хотя обучены были лишь 3,6 % от всего количества параметров.

Дополнительная информация по методу Adapters:

https://magazine.sebastianraschka.com/p/finetuning-llms-with-adapters#:~:text=The%20idea%20of%20parameter%2Defficient,the%20pretrained%20LLM%20remain%20frozen.

PEFT на практике

Установка

Чтобы установить PEFT из PyPI:

pip install peft

Также можно установить через репозиторий гитхаба:

pip install git+https://github.com/huggingface/peft

Пример использования LoRA

Рассмотрим код из данного видео.

1. Загрузка необходимых библиотек

-8

2. Загрузка и настройка модели

В данном примере мы будем дообучать bloom-7b1.

-9

3. Заморозка исходных параметров за некоторыми исключениями, например, слои нормализации и выходные данные, которые мы сохраняем в float32.

-10

4. Настройка адаптеров LoRA

Для обучения с помощью LoRA необходимо загрузить и создать класс LoraConfig со следующими параметрами:

  • task_type: задача для обучения
  • r: ранг низкоранговых матриц
  • lora_alpha: коэффициент масштабирования для низкоранговых матриц
  • lora_dropout: вероятность применения дропаута к слоям LoRA
-11
-12
Можно заметить, что после добавления конфигурации LoRA из 7 076 880 384 мы обучаем только 7 864 320 параметров, что намного меньше исходного количества.
Можно заметить, что после добавления конфигурации LoRA из 7 076 880 384 мы обучаем только 7 864 320 параметров, что намного меньше исходного количества.

5. Подготовка датасета

Мы будем использовать датасет, состоящий из английских цитат. Задача состоит в том, чтобы научить модель выдавать теги на выходе на основе полученной цитаты на входе.

Пример:

“A room without books is like a body without a soul.” ->: ['books', 'simile', 'soul']

-14

6. Обучение модели

-15

7. Инференс

-16
Модель успешно справляется с задачей
Модель успешно справляется с задачей

Полный код здесь.

С примерами использования других методов вы можете ознакомиться на официальной странице документации библиотеки PEFT от Hugging Face.

Заключение

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

Мы познакомились лишь с некоторыми методами PEFT. Для изучения других подходов я рекомендую вам прекрасную статью "Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning", в которой подробно рассматриваются 20 различных методов PEFT.

Также можете ознакомиться со следующими статьями по данной теме: