Революция LLM Трансформация языковых моделей

Революция в трансформации языковых моделей благодаря LLM

Введение

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

Цели обучения:

  • Знать различия между закрытыми и открытыми LLM.
  • Понимать традиционную и эффективную настройку в LLM.
  • Исследовать различные стратегии эффективной настройки параметров.
  • Узнать, как использовать Ludwig для эффективной настройки.

Закрытые и открытые LLM: выбор правильного подхода

Ландшафт языковых моделей столкнулся с дихотомией между закрытыми моделями, предоставляемыми компаниями, такими как OpenAI, и открытыми вариантами, предлагаемыми учреждениями, такими как Meta, Google и различными научно-исследовательскими лабораториями. Закрытые LLM, такие как ChatGPT, GPT 3.5 и GPT 4, представляют собой привлекательную отправную точку благодаря своей управляемой инфраструктуре и возможностям доказательства концепции. Эти модели предлагают высококачественные предварительно обученные наборы данных и не требуют настройки инфраструктуры, делая их легким входом для тех, кто исследует возможности LLM.

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

Традиционная тонкая настройка против эффективной настройки параметров

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

Диалог между тонкой настройкой и моделями, такими как Retrieval Augmented Generation (RAG), заключается в необходимости моделей, адаптированных к конкретным задачам, в отличие от универсального интеллекта. Открытый характер LLM позволяет настраивать и эффективно настраивать модели, необходимые для достижения превосходной производительности в задачах конкретной задачи.

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

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

Исследования, такие как статья LIMA от компании Meta, поддерживают идею того, что тонкая настройка на меньших наборах данных может превзойти производительность закрытых моделей, таких как GPT 4. Эта концепция «делать больше с меньшим количеством данных» подчеркивает эффективность и эффективность открытых LLM при соответствующей настройке.

Понимание эффективных стратегий обучения

В сфере использования предварительно обученных моделей для конкретных задач, LoRA (Low Rank Adaptation) и QLoRA (Quantized Low Rank Adaptation) стали инновационными методологиями, которые эффективно настраивают большие языковые модели (LLM). Эти методы являются инструментальными для настройки предварительно обученных моделей под специализированные задачи с минимизацией дополнительных параметров.

LoRA: Погружение в архитектуру

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

Обычно эти линейные проекции имеют большие матрицы весов, такие как 1024 на 1024, которые LoRA разлагает на более мелкие матрицы, например 1024 на 8 и 8 на 1024. Эти более мелкие матрицы умножаются, чтобы получить исходное измерение. Сжатие значительно сокращает количество настраиваемых параметров до примерно половины или 1% от общего числа параметров LLM.

В контексте архитектуры трансформера LoRA интегрирует адаптерные модули для слоев проекции ключа и запроса. Эти адаптеры, созданные с использованием низкорангового разложения, сохраняют оригинальную форму, позволяя вставлять их в слои трансформера. Базовые слои остаются замороженными, а тренируются только веса адаптеров.

QLoRA: Адаптация квантованного низкорангового

QLoRA, расширение LoRA, инновационно представляет веса модели с использованием точности 4 бит вместо стандартного 32-битного плавающей точки. Используя 4-битные значения, вес каждого параметра сжимается, что значительно уменьшает размер модели. Эффективность QLoRA позволяет настраивать даже громадные модели на платформах с меньшим потреблением памяти, таких как Colab.

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

LoRA против QLoRA

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

Ludwig: Декларативный подход к машинному обучению

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

Комбинируя простоту использования AutoML с гибкостью низкоуровневых API, Ludwig устраняет разрыв, предлагая настраиваемые модели без необходимости обширного кодирования. Его модульная архитектура делает эксперименты с глубоким обучением проще и более доступными, предоставляя пользователям удобную платформу для исследования потенциала LLM моделей.

Реализация LoRA для настройки

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

Ludwig представляет доступный подход для настройки LoRA на основе языковых моделей. Используя Ludwig, пользователи могут настроить архитектуру модели, определить входные и выходные функции и применить конфигурации LoRA или QLoRA с помощью YAML-конфигураций.

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

Код:

# Установите Ludwig и зависимости Ludwig, связанные с LLM.

!pip uninstall -y tensorflow –quiet

!pip install ludwig –quiet

!pip install ludwig[llm] –quiet

# Включите перенос текста, чтобы избежать горизонтальной прокрутки и создайте функцию для очистки кэша CUDA.

from IPython.display import HTML, display

def set_css():

display(HTML(“’

<style>

pre {

white-space: pre-wrap;

}

</style>

“’))

get_ipython().events.register(‘pre_run_cell’, set_css)

def clear_cache():

if torch.cuda.is_available():

torch.cuda.empty_cache()

# Настройте свой токен HuggingFace

import getpass

import locale; locale.getpreferredencoding = lambda: “UTF-8”

import logging

import os

import torch

import yaml

from ludwig.api import LudwigModel

os.environ[“HUGGING_FACE_HUB_TOKEN”] = getpass.getpass(“Token:”)

assert os.environ[“HUGGING_FACE_HUB_TOKEN”]

# Импорт данных генерации кода

from google.colab import data_table; data_table.enable_dataframe_formatter()

import numpy as np; np.random.seed(123)

import pandas as pd

df = pd.read_json(“https://raw.githubusercontent.com/sahil280114/codealpaca/master/data/code_alpaca_20k.json”)

# Мы создадим новый столбец под названием `split`, где:

# 90% будет иметь значение 0 -> обучающая выборка

# 5% будет иметь значение 1 -> проверочная выборка

# 5% будет иметь значение 2 -> тестовая выборка

# Рассчитаем количество строк для каждого значения разделения

total_rows = len(df)

split_0_count = int(total_rows * 0.9)

split_1_count = int(total_rows * 0.05)

split_2_count = total_rows – split_0_count – split_1_count

# Создадим массив со значениями разделения на основе подсчитанных значений

split_values = np.concatenate([

np.zeros(split_0_count),

np.ones(split_1_count),

np.full(split_2_count, 2)

])

# Перемешаем массив для обеспечения случайности

np.random.shuffle(split_values)

# Добавим столбец ‘split’ в DataFrame

df[‘split’] = split_values

df[‘split’] = df[‘split’].astype(int)

# В этом вебинаре мы будем использовать только 500 строк этого набора данных.

df = df.head(n=1000)

Расширенная конфигурация и параметры тонкой настройки в Ludwig

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

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

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

Code:

qlora_fine_tuning_config = yaml.safe_load(

““”

model_type: llm

base_model: meta-llama/Llama-2-7b-hf

input_features:

– name: instruction

type: text

output_features:

– name: output

type: text

prompt:

template: >-

Below is an instruction that describes a task, paired with an input that may provide further context. Write a response that appropriately completes the request.

### Инструкция: {instruction}

### Ввод: {input}

### Отклик:

generation:

temperature: 0.1

max_new_tokens: 512

адаптер:

тип: lora

квантование:

биты: 4

предобработка:

глобальная_максимальная_длина_последовательности: 512

разделение:

тип: случайное

вероятности:

– 0.9 # обучение

– 0.05 # валидация

– 0.05 # тест

тренер:

тип: дообучение

эпохи: 1

размер_пакета: 1

размер_пакета_проверки: 2

накопление_градиента: 16

скорость_обучения: 0.0004

планировщик_скорости_обучения:

доля_погрева: 0.03

““”

)

модель = LudwigModel(config=qlora_fine_tuning_config, уровень_журналирования=logging.INFO)

результаты = модель.обучение(набор_данных=df)

Проверьте полный код здесь – Ludwig: Отличная настройка Llama-2-7b

Вывод после обучения и модельных результатов

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

Устанавливая параметры, используя конфигурации YAML и определяя ключевые аспекты, такие как адаптеры, квантование и специфика, связанная с обучением, Ludwig предоставляет простую в использовании, но надежную среду для формирования модели по своему вкусу.

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

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

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

Заключение

Эволюция LLM от моделей с закрытым исходным кодом до моделей с открытым исходным кодом подчеркивает роль настройки и продвинутых возможностей Ludwig в формировании адаптивных и эффективных языковых моделей. Будущее предлагает разнообразные настраиваемые LLM, несмотря на ограниченные наборы данных. Пока мы продолжаем исследовать область языковых моделей, открытые преимущества LLM не только формируют будущее ИИ, но также предлагают новаторские возможности в различных отраслях, устанавливая платформу для инновационных приложений и индивидуальных решений. Сотрудничество и открытое развитие будут открывать путь к более всестороннему, доступному и эффективному подходу к языковому моделированию.

Ключевые выводы:

  • Модели с закрытым исходным кодом предлагают легкий доступ, но ограниченную собственность; открытые модели позволяют настраивать, но требуют хостинга на собственном сервере, достигая баланса между доступностью и контролем.
  • Настройка заранее обученных LLM через дообучение повышает производительность для конкретных задач, достигая баланса между универсальными и задачно-ориентированными моделями.
  • Декларативный подход Ludwig упрощает настройку модели и параметров дообучения, оптимизируя процесс настройки для лучших выводов модели.

Часто задаваемые вопросы

Об авторе: Арнав Гарг

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

DataHour Page: https://community.analyticsvidhya.com/c/datahour/efficient-fine-tuning-of-llms-on-single-t4-gpu-using-ludwig

LinkedIn: https://www.linkedin.com/in/arnavgarg/