Файн-тюнинг ЛЛМ эффективный параметрический файн-тюнинг (ПФТ) – LoRA и QLoRA – Часть 1

Файн-тюнинг ЛЛМ эффективные параметры ПФТ (LoRA и QLoRA) - Часть 1

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

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

Инженерия подсказок с использованием существующих моделей

На базовом уровне достижение ожидаемых результатов от больших языковых моделей требует тщательной инженерии подсказок. В этом процессе создаются подходящие подсказки и вводные данные, чтобы вызвать желаемые ответы от модели. Инженерия подсказок является неотъемлемой техникой для различных случаев использования, особенно когда универсальные ответы достаточны.

Создание новой модели

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

Донастройка существующих моделей

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

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

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

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

Существуют различные техники, такие как параметрическая эффективная донастройка (PEFT), которые позволяют проводить модульную донастройку с оптимальными ресурсами и затратами.

Параметрическая эффективная донастройка (PEFT)

PEFT — техника, разработанная для проведения донастройки моделей с минимальными затратами ресурсов и денег. PEFT является отличным выбором, когда речь идет о задачах, требующих адаптации модели к определенной области. Используя PEFT, мы можем найти баланс между сохранением ценной информации из предварительно обученной модели и эффективной адаптацией модели к целевой задаче с меньшим числом параметров. Существуют различные способы реализации параметрической эффективной донастройки. Самыми широко используемыми и эффективными являются методы с низкоранговыми параметрами (Low-Rank Parameter или LoRA) и QLoRA.

Низкоранговые параметры

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

Давайте подробнее рассмотрим одну из самых популярных техник, называемую LoRA и QLoRA.

Адаптация по низкому рангу (LoRA)

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

На следующей картинке вы можете видеть разложение размерности/ранга, которое существенно сокращает объем памяти.

Мы будем применять эту технику, добавляя адаптер LoRA к существующим прямым нейронным сетям. Оригинальные прямые нейронные сети будут заморожены, и для обучения будут использоваться сети LoRA. Более подробную информацию смотрите на рисунке ниже.

  • LoRA может быть реализована в виде адаптера, предназначенного для улучшения и расширения существующих слоев нейронной сети. Он вводит дополнительный слой обучаемых параметров (весов), сохраняя оригинальные параметры в замороженном состоянии. Эти обучаемые параметры имеют существенно уменьшенный ранг (размерность) по сравнению с размерностью исходной сети. Вот механизм, с помощью которого LoRA упрощает и ускоряет процесс адаптации исходных моделей для задач, специфичных для области. Теперь давайте ближе рассмотрим компоненты внутри сети адаптера LORA.
  • Предварительно обученные параметры исходной модели (W) замораживаются. Во время обучения эти веса не будут изменяться.
  • В сети добавляется новый набор параметров, WA и WB. Эти сети используют векторы весов с низким рангом, где размерности этих векторов обозначены как dxr и rxd. Здесь «d» обозначает размерность вектора исходных параметров замороженной сети, а «r» обозначает выбранный низкий ранг или меньшую размерность. Значение «r» всегда меньше, и чем меньше «r», тем более ускорен и упрощен процесс обучения модели. Определение подходящего значения для «r» является ключевым решением в LoRA. Выбор более низкого значения приводит к более быстрому и экономически эффективному обучению модели, но может не давать оптимальных результатов. В то время как выбор более высокого значения «r» увеличивает время и стоимость обучения, но повышает возможности модели по выполнению более сложных задач.
  • Результаты оригинальной сети и низкоранговой сети вычисляются скалярным произведением, что приводит к весовой матрице размерности n, которая используется для получения результата.
  • Затем этот результат сравнивается с ожидаемыми результатами (во время обучения) для вычисления функции потерь, и веса WA и WB корректируются на основе функции потерь в рамках обрат

    Давайте исследуем, как этот подход способствует сокращению использования памяти и минимизирует требования к инфраструктуре. Рассмотрим сценарий, в котором у нас есть матрица параметров размером 512×512 в рамках нейронной сети с прямой связью, что составляет в общей сложности 262,144 параметра, которые должны пройти тренировку. Если мы выберем заморозку этих параметров во время процесса обучения и введем адаптер LoRA с рангом 2, результат будет следующим: WA будет иметь 512*2 параметра, а WB также будет иметь 512*2 параметра, в сумме 2,048 параметров. Именно эти параметры подвергаются обучению с использованием конкретных для домена данных. Это существенное улучшение вычислительной эффективности, значительно сокращает количество вычислений, необходимых в процессе обратного распространения. Этот механизм играет ключевую роль в достижении ускоренного обучения.

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

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

    Квантованная адаптация низкого ранга (QLoRA)

    QLoRA расширяет LoRA для повышения эффективности путем квантования значений весов оригинальной сети, от высокоразрядных типов данных, таких как Float32, до типов данных с меньшим разрешением, например int4. Это приводит к сокращению требований к памяти и более быстрым вычислениям.

    QLoRA вносит три ключевые оптимизации поверх LoRA, что делает QLoRA одним из лучших методов PEFT.

    4-битное квантование NF4

    4-битное нормальное число с плавающей точкой (NormalFloat4) – это оптимизированный тип данных, который может использоваться для хранения весов, что значительно снижает потребление памяти. Квантование 4-битного NF4 является 3-шаговым процессом.

    • Нормализация и квантование: В рамках этапов нормализации и квантования веса приводятся к нулевому среднему и постоянной единичной дисперсии. 4-битный тип данных может хранить только 16 чисел. В рамках нормализации веса отображаются на эти 16 чисел, распределенных вокруг нуля, и вместо хранения самих весов сохраняется ближайшая позиция. Вот пример

    Предположим, у нас есть вес FP32 со значением 0.2121. 4-битное разделение между -1 и 1 будет иметь следующие числовые позиции.

    0.2121 ближе всего к 0.1997, это 10-я позиция. Вместо сохранения FP32 значения 0.2121 мы сохраняем 10.

    Типичная формула:

    int4Tensor = округленноеЗначение(общееКоличествоПозиций/абсмакс(входнойXTensor))                     * FP32WeightsTensorВ приведенном выше примере общееКоличествоПозиций = 16

    Значение общееКоличествоПозиций/абсмакс(входнойXTensor) называется квантованием

    Очевидно, что при нормализации и квантовании происходит потеря данных при переходе от высокоразрядного типа данных FP32 к типу данных с низким разрешением. Потеря незначительна, пока во входном тензоре нет выбросов, которые могут повлиять на absmax() и, в конечном итоге, на распределение. Чтобы избежать этой проблемы, обычно веса квантуем по-отдельности по меньшим блокам, что нормализует выбросы.

    • Деквантование: Для деквантования значений мы делаем точно обратное действие.
    dequantizedTensor = int4Tensor                     /округленноеЗначение(общееКоличествоПозиций/абсмакс(входнойXTensor))В приведенном выше примере общееКоличествоПозиций = 16

    Квантование 4-битного нормального числа с плавающей точкой применяется к весам исходной модели; веса адаптера LoRA будут FP32, так как вся тренировка произойдет на этих весах. По завершении тренировки исходные веса деквантуируются.

    Двойное квантование

    Двойное квантование дополнительно снижает потребление памяти путем квантования констант квантования. На предыдущем этапе 4-битного квантования FP4 мы вычислили константу квантования. Даже это можно квантовать для достижения большей эффективности, и вот что мы делаем в Двойном квантовании.

    Поскольку квантование происходит блоками для избежания выбросов, обычно в одном блоке содержится 64 веса, у нас будет одна константа квантования. Эти константы квантования могут быть дополнительно квантованы для уменьшения потребления памяти.

    Предположим, у нас есть группа параметров/весов по 64 в блоке, и каждая константа квантования занимает 32 бита, так как это FP32. Это добавляет в среднем 0,5 бита на параметр, что означает, что мы говорим о по меньшей мере 500 000 битах для типичной модели с 1 миллионом параметров.

    С помощью двойного квантования мы применяем квантование к этим константам квантования, что дополнительно оптимизирует использование памяти. Мы можем взять группу из 256 значений квантования и применить 8-битное квантование. Мы достигаем примерно 0,127 бита на параметр, что снижает значение до 125 000 битов для модели с 1 миллионом параметров.

    Вот расчет: у нас есть 64 веса в 256 блоках, которые занимают 32 бита, это 32/(64*256), что составляет 0,001953125.

    У нас есть 8 битов для 64 весов, это 8/64 = 0,125.

    Если мы сложим 0,125+0,001953125, получим примерно 0,127.

    Единая разделяемая память

    Вместе с вышеупомянутыми методиками QLoRA также использует функцию единой памяти nVidia, которая позволяет осуществлять безшовные передачи страниц между GPU и ЦП при нехватке памяти на GPU, таким образом, управляя внезапными скачками памяти на GPU и помогая избежать переполнения памяти.

    LoRA и QLoRA – две из самых востребованных и широко используемых методик для эффективной настройки параметров.

    В следующей части мы реализуем QLoRA, до тех пор удачи с LLMs.

    Надеемся, что это было полезно; оставьте ваши комментарии и отзывы…

    Пока…