Как использовать Hugging Face AutoTrain для настройки LLM

Как использовать Hugging Face AutoTrain для настройки Language Model

 

Введение

 

В последние годы модель большого языка (LLM) изменила способ работы людей и применяется во многих областях, таких как образование, маркетинг, исследования и т. Д. Учитывая потенциал, LLM может быть улучшена для лучшего решения наших бизнес-проблем. Вот почему мы можем выполнять мелкую настройку LLM.

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

Один из способов автоматической мелкой настройки LLM – использование Hugging Face’s AutoTrain. Автопоезд HF является платформой без кода с Python API, позволяющей обучать современные модели для различных задач, таких как компьютерное зрение, табличные данные и задачи NLP. Мы можем использовать возможности AutoTrain, даже если мы не очень хорошо разбираемся в процессе мелкой настройки LLM.

Итак, как это работает? Давайте исследуем дальше.

 

Начало работы с AutoTrain

 

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

  

Для мелкой настройки LLM с помощью Python API нам необходимо установить пакет Python, который можно установить с помощью следующего кода.

pip install -U autotrain-advanced

 

Также мы будем использовать образец набора данных Alpaca из HuggingFace, для чего требуется пакет datasets.

pip install datasets

 

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

from datasets import load_dataset # Загрузите набор данныхdataset = load_dataset("tatsu-lab/alpaca") train = dataset['train']

 

Кроме того, мы сохраняем данные в формате CSV, так как нам понадобятся они для нашей мелкой настройки.

train.to_csv('train.csv', index = False)

 

С готовой средой и набором данных давайте попробуем использовать HuggingFace AutoTrain для мелкой настройки нашей LLM.

 

Процедура мелкой настройки и оценка

 

Я бы адаптировал процесс мелкой настройки из примера AutoTrain, который вы можете найти здесь. Чтобы начать процесс, мы помещаем данные, которые мы будем использовать для доводки, в папку с названием data.

  

Для этого урока я выбрал только 100 строк данных, чтобы наш процесс обучения мог быть более быстрым. После того, как у нас есть готовые данные, мы можем использовать наш блокнот Jupyter для мелкой настройки нашей модели. Убедитесь, что данные содержат столбец «текст», поскольку AutoTrain будет читать только из этого столбца.

Сначала давайте запустим настройку AutoTrain с помощью следующей команды.

!autotrain setup

 

Затем мы предоставим информацию, необходимую для запуска AutoTrain. Здесь требуется указать имя проекта и предварительно обученную модель, которую вы хотите. Вы можете выбрать только модель, доступную в HuggingFace.

project_name = 'my_autotrain_llm'
model_name = 'tiiuae/falcon-7b'

 

Затем мы добавим информацию о HF, если вы хотите загрузить свою модель в репозиторий или использовать частную модель.

push_to_hub = False
hf_token = "YOUR HF TOKEN"
repo_id = "username/repo_name"

 

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

learning_rate = 2e-4
num_epochs = 4
batch_size = 1
block_size = 1024
trainer = "sft"
warmup_ratio = 0.1
weight_decay = 0.01
gradient_accumulation = 4
use_fp16 = True
use_peft = True
use_int4 = True
lora_r = 16
lora_alpha = 32
lora_dropout = 0.045

 

Со всей готовой информацией мы настроим среду для принятия всех ранее установленных параметров.

import os
os.environ["PROJECT_NAME"] = project_name
os.environ["MODEL_NAME"] = model_name
os.environ["PUSH_TO_HUB"] = str(push_to_hub)
os.environ["HF_TOKEN"] = hf_token
os.environ["REPO_ID"] = repo_id
os.environ["LEARNING_RATE"] = str(learning_rate)
os.environ["NUM_EPOCHS"] = str(num_epochs)
os.environ["BATCH_SIZE"] = str(batch_size)
os.environ["BLOCK_SIZE"] = str(block_size)
os.environ["WARMUP_RATIO"] = str(warmup_ratio)
os.environ["WEIGHT_DECAY"] = str(weight_decay)
os.environ["GRADIENT_ACCUMULATION"] = str(gradient_accumulation)
os.environ["USE_FP16"] = str(use_fp16)
os.environ["USE_PEFT"] = str(use_peft)
os.environ["USE_INT4"] = str(use_int4)
os.environ["LORA_R"] = str(lora_r)
os.environ["LORA_ALPHA"] = str(lora_alpha)
os.environ["LORA_DROPOUT"] = str(lora_dropout)

 

Для запуска AutoTrain в нашем блокноте мы будем использовать следующую команду.

!autotrain llm \--train \--model ${MODEL_NAME} \--project-name ${PROJECT_NAME} \--data-path data/ \--text-column text \--lr ${LEARNING_RATE} \--batch-size ${BATCH_SIZE} \--epochs ${NUM_EPOCHS} \--block-size ${BLOCK_SIZE} \--warmup-ratio ${WARMUP_RATIO} \--lora-r ${LORA_R} \--lora-alpha ${LORA_ALPHA} \--lora-dropout ${LORA_DROPOUT} \--weight-decay ${WEIGHT_DECAY} \--gradient-accumulation ${GRADIENT_ACCUMULATION} \$( [[ "$USE_FP16" == "True" ]] && echo "--fp16" ) \$( [[ "$USE_PEFT" == "True" ]] && echo "--use-peft" ) \$( [[ "$USE_INT4" == "True" ]] && echo "--use-int4" ) \$( [[ "$PUSH_TO_HUB" == "True" ]] && echo "--push-to-hub --token ${HF_TOKEN} --repo-id ${REPO_ID}" )

 

Если AutoTrain успешно запускается, вы должны увидеть следующую папку в вашем каталоге со всей моделью и производителем токенизатора, созданными AutoTrain.  

Для тестирования модели мы будем использовать пакет HuggingFace transformers с помощью следующего кода.

from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = "my_autotrain_llm"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path)

 

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

input_text = "Польза регулярных занятий спортом"
input_ids = tokenizer.encode(input_text, return_tensors="pt")
output = model.generate(input_ids)
predicted_text = tokenizer.decode(output[0], skip_special_tokens=False)
print(predicted_text)

 

 

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

 

Советы для успешной тонкой настройки

 

Есть несколько bewegings, которые вы, возможно, захотите знать, чтобы улучшить процесс тонкой настройки, включая:

  1. Подготовьте набор данных, качество которого соответствует задачи
  2. Изучите используемую предварительно обученную модель
  3. Используйте подходящие методы регуляризации, чтобы избежать переобучения
  4. Испытайте скорость обучения, от маленькой к большей
  5. Для обучения достаточно небольшого числа эпох, так как языковая модель обычно довольно быстро обучается на новых данных
  6. Не пренебрегайте вычислительной сложностью, поскольку она увеличится с увеличением объема данных, параметров и модели
  7. Убедитесь, что вы соблюдаете этические принципы в отношении используемых данных

 

Заключение

 

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

[Cornellius Yudha Wijaya](https://www.linkedin.com/in/cornellius-yudha-wijaya/) – помощник менеджера по науке о данных и писатель. Работая полный рабочий день в Allianz Indonesia, он любит делиться советами по Python и обработке данных через социальные сети и медиа.