Home Машинное обучение Интерактивная тонкая настройка Falcon-40B и других LLM на ноутбуках Amazon SageMaker Studio с использованием QLoRA. | DeepTech

Интерактивная тонкая настройка Falcon-40B и других LLM на ноутбуках Amazon SageMaker Studio с использованием QLoRA. | DeepTech

0
Интерактивная тонкая настройка Falcon-40B и других LLM на ноутбуках Amazon SageMaker Studio с использованием QLoRA.
 | DeepTech

Тонкая настройка больших языковых моделей (LLM) позволяет вам настроить базовые модели с открытым исходным кодом для повышения производительности при выполнении задач, специфичных для предметной области. В этом посте мы обсудим преимущества использования блокнотов Amazon SageMaker для точной настройки современных моделей с открытым исходным кодом. Мы используем Тонкая настройка Hugging Face с эффективными параметрами (PEFT) и методы квантования с помощью биты и байты для поддержки интерактивной тонкой настройки очень больших моделей с использованием одного экземпляра ноутбука. В частности, мы покажем, как настроить Сокол-40Б с использованием одного экземпляра ml.g5.12xlarge (4 графических процессора A10G), но та же стратегия работает для настройки еще более крупных моделей на экземплярах ноутбуков p4d/p4de.

Как правило, полноточные представления этих очень больших моделей не помещаются в память одного или даже нескольких графических процессоров. Чтобы поддерживать интерактивную среду ноутбука для точной настройки и выполнения логических выводов на моделях такого размера, мы используем новую технику, известную как Квантованные LLM с адаптерами низкого ранга (QLoRA). QLoRA — это эффективный подход к тонкой настройке, который снижает использование памяти LLM при сохранении стабильной производительности. Hugging Face и авторы упомянутой статьи опубликовали подробный пост в блоге который охватывает основы и интеграцию с библиотеками Transformers и PEFT.

Использование ноутбуков для точной настройки LLM

SageMaker поставляется с двумя вариантами развертывания полностью управляемых ноутбуков для изучения данных и построения моделей машинного обучения (ML). Первый вариант — это быстрый запуск блокнотов для совместной работы, доступных в Amazon SageMaker Studio, полностью интегрированной среде разработки (IDE) для машинного обучения. Вы можете быстро запускать записные книжки в SageMaker Studio, подключать или отключать базовые вычислительные ресурсы, не прерывая свою работу, и даже совместно редактировать и совместно работать над своими записными книжками в режиме реального времени. Помимо создания блокнотов, вы можете выполнять все этапы разработки машинного обучения для создания, обучения, отладки, отслеживания, развертывания и мониторинга ваших моделей в единой панели SageMaker Studio. Второй вариант — это экземпляр блокнота SageMaker, один полностью управляемый вычислительный экземпляр машинного обучения, на котором записные книжки выполняются в облаке, что дает вам больший контроль над конфигурациями записных книжек.

В оставшейся части этого поста мы используем блокноты SageMaker Studio, потому что мы хотим использовать управляемое отслеживание экспериментов TensorBoard SageMaker Studio с поддержкой Hugging Face Transformer для TensorBoard. Однако те же концепции, показанные в примере кода, будут работать на экземплярах записных книжек с использованием conda_pytorch_p310 ядро. Стоит отметить, что том Amazon Elastic File System (Amazon EFS) в SageMaker Studio означает, что вам не нужно выделять предварительно заданный размер тома Amazon Elastic Block Store (Amazon EBS), что полезно, учитывая большой размер весов моделей в LLM.

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

Предпосылки

Если вы впервые работаете с SageMaker Studio, вам сначала необходимо создать домен SageMaker. Мы также используем управляемый экземпляр TensorBoard для отслеживания экспериментов, хотя это необязательно для этого руководства.

Кроме того, может потребоваться запросить увеличение квоты службы для соответствующих приложений SageMaker Studio KernelGateway. Для тонкой настройки Falcon-40B мы используем экземпляр ml.g5.12xlarge.

Чтобы запросить увеличение квоты сервиса, в консоли AWS Service Quotas перейдите к сервисы AWS, Amazon SageMakerи выберите Приложения Studio KernelGateway, работающие на экземплярах ml.g5.12xlarge.

Начать

Пример кода для этого сообщения можно найти в следующем Репозиторий GitHub. Для начала мы выбираем образ Data Science 3.0 и ядро ​​Python 3 из SageMaker Studio, чтобы у нас была последняя среда Python 3.10 для установки наших пакетов.

Устанавливаем PyTorch и необходимые библиотеки Hugging Face и bitsandbytes:

%pip install -q -U torch==2.0.1 bitsandbytes==0.39.1
%pip install -q -U datasets py7zr einops tensorboardX
%pip install -q -U git+https://github.com/huggingface/transformers.git@850cf4af0ce281d2c3e7ebfc12e0bc24a9c40714
%pip install -q -U git+https://github.com/huggingface/peft.git@e2b8e3260d3eeb736edf21a2424e89fe3ecf429d
%pip install -q -U git+https://github.com/huggingface/accelerate.git@b76409ba05e6fa7dfc59d50eee1734672126fdba

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

# Add installed cuda runtime to path for bitsandbytes
import os
import nvidia

cuda_install_dir="/".join(nvidia.__file__.split('/')(:-1)) + '/cuda_runtime/lib/'
os.environ('LD_LIBRARY_PATH') =  cuda_install_dir

Загрузите предварительно обученную базовую модель

Мы используем биты и байты для квантования модели Falcon-40B с 4-битной точностью, чтобы мы могли загрузить модель в память на 4 графических процессорах A10G, используя наивный конвейерный параллелизм Hugging Face Accelerate. Как описано в ранее упомянутом Пост обнимающего лицапоказано, что настройка QLoRA соответствует 16-битным методам точной настройки в широком диапазоне экспериментов, поскольку веса модели хранятся в виде 4-битного NormalFloat, но при необходимости деквантуются до вычисления bfloat16 при прямом и обратном проходах.

model_id = "tiiuae/falcon-40b"
bnb_config = BitsAndBytesConfig(
	load_in_4bit=True,
	bnb_4bit_use_double_quant=True,
	bnb_4bit_quant_type="nf4",
	bnb_4bit_compute_dtype=torch.bfloat16
)

При загрузке предварительно обученных весов мы указываем device_map=”auto" так что Hugging Face Accelerate будет автоматически определять, на какой графический процессор помещать каждый слой модели. Этот процесс известен как модельный параллелизм.

# Falcon requires you to allow remote code execution. This is because the model uses a new architecture that is not part of transformers yet.
# The code is provided by the model authors in the repo.
model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True, quantization_config=bnb_config, device_map="auto")

С библиотекой PEFT Hugging Face вы можете заморозить большую часть исходных весов модели и заменить или расширить слои модели, обучив дополнительный, гораздо меньший набор параметров. Это делает обучение намного менее затратным с точки зрения требуемых вычислений. Мы устанавливаем модули Falcon, которые мы хотим настроить, как target_modules в конфигурации LoRA:

from peft import LoraConfig, get_peft_model

config = LoraConfig(
	r=8,
	lora_alpha=32,
	target_modules=(
		"query_key_value",
		"dense",
		"dense_h_to_4h",
		"dense_4h_to_h",
	),
	lora_dropout=0.05,
	bias="none",
	task_type="CAUSAL_LM"
)

model = get_peft_model(model, config)
print_trainable_parameters(model)
# Output: trainable params: 55541760 || all params: 20974518272|| trainable%: 0.2648058910327664

Обратите внимание, что мы корректируем только 0,26% параметров модели, что делает это возможным в разумные сроки.

Загрузите набор данных

Мы используем самсум набор данных для нашей тонкой настройки. Samsum — это коллекция из 16 000 сообщений в стиле мессенджеров с помеченными сводками. Ниже приведен пример набора данных:

{
	"id": "13818513",
	"summary": "Amanda baked cookies and will bring Jerry some tomorrow.",
	"dialogue": "Amanda: I baked cookies. Do you want some?\r\nJerry: Sure!\r\nAmanda: I'll bring you tomorrow :-)"
}

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

Точная настройка модели

Перед тонкой настройкой мы определяем гиперпараметры, которые хотим использовать, и обучаем модель. Мы также можем регистрировать наши показатели в TensorBoard, определив параметр logging_dir и запрос преобразователя Hugging Face на report_to="tensorboard":

bucket = ”<YOUR-S3-BUCKET>”
log_bucket = f"s3://{bucket}/falcon-40b-qlora-finetune"

import transformers

# We set num_train_epochs=1 simply to run a demonstration

trainer = transformers.Trainer(
	model=model,
	train_dataset=lm_train_dataset,
	eval_dataset=lm_test_dataset,
	args=transformers.TrainingArguments(
		per_device_train_batch_size=8,
		per_device_eval_batch_size=8,
		logging_dir=log_bucket,
		logging_steps=2,
		num_train_epochs=1,
		learning_rate=2e-4,
		bf16=True,
		save_strategy = "no",
		output_dir="outputs",
		 report_to="tensorboard",
	),
	data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False),
)

Следите за тонкой настройкой

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

Отсюда мы можем использовать Linux watch команда для многократного запуска nvidia-smi каждые полсекунды:

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

Для отслеживания показателей обучения мы используем журналы TensorBoard, которые мы записываем в указанную корзину Amazon Simple Storage Service (Amazon S3). Мы можем запустить TensorBoard пользователя домена SageMaker Studio из консоли AWS SageMaker:

После загрузки вы можете указать корзину S3, которую вы указали преобразователю Hugging Face для входа в систему, чтобы просмотреть показатели обучения и оценки.

Оценить модель

После того, как наша модель завершит обучение, мы можем запускать систематические оценки или просто генерировать ответы:

tokens_for_summary = 30
output_tokens = input_ids.shape(1) + tokens_for_summary

outputs = model.generate(inputs=input_ids, do_sample=True, max_length=output_tokens)
gen_text = tokenizer.batch_decode(outputs)(0)
print(gen_text)
# Sample output:
# Summarize the chat dialogue:
# Richie: Pogba
# Clay: Pogboom
# Richie: what a s strike yoh!
# Clay: was off the seat the moment he chopped the ball back to his right foot
# Richie: me too dude
# Clay: hope his form lasts
# Richie: This season he's more mature
# Clay: Yeah, Jose has his trust in him
# Richie: everyone does
# Clay: yeah, he really deserved to score after his first 60 minutes
# Richie: reward
# Clay: yeah man
# Richie: cool then
# Clay: cool
# ---
# Summary:
# Richie and Clay have discussed the goal scored by Paul Pogba. His form this season has improved and both of them hope this will last long

После того, как вы будете удовлетворены производительностью модели, вы можете сохранить модель:

trainer.save_model("path_to_save")

Вы также можете разместить его в выделенной конечной точке SageMaker.

Очистить

Выполните следующие шаги, чтобы очистить ресурсы:

  1. Выключите экземпляры SageMaker Studio, чтобы избежать дополнительных затрат.
  2. Закройте приложение TensorBoard.
  3. Очистите каталог EFS, очистив каталог кеша Hugging Face:
    rm -R ~/.cache/huggingface/hub

Заключение

Блокноты SageMaker позволяют быстро и эффективно настраивать LLM в интерактивной среде. В этом посте мы показали, как вы можете использовать Hugging Face PEFT с bitsandbtyes для точной настройки моделей Falcon-40B с использованием QLoRA на ноутбуках SageMaker Studio. Попробуйте и дайте нам знать ваши мысли в разделе комментариев!

Мы также рекомендуем вам узнать больше о возможностях генеративного искусственного интеллекта Amazon, изучив SageMaker JumpStart, модели Amazon Titan и Amazon Bedrock.


Об авторах

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

Лорен МалленексЛорен Малленекс — старший архитектор решений AI/ML в AWS. У нее десятилетний опыт работы в сфере DevOps, инфраструктуры и машинного обучения. Она также является автором книги о компьютерном зрении. Другие области ее деятельности включают MLOps и генеративный ИИ.

Филипп Шмид является техническим руководителем в Hugging Face с миссией демократизировать хорошее машинное обучение с помощью открытого исходного кода и открытой науки. Филипп увлечен производством передовых и генеративных моделей машинного обучения ИИ. Он любит делиться своими знаниями об искусственном интеллекте и НЛП на различных встречах, таких как Data Science на AWS, и на своих технических блог.

LEAVE A REPLY

Please enter your comment!
Please enter your name here