О практической работе
1. Введение
Почему точная настройка имеет значение
Модели Foundation обучаются для общих целей и иногда не выполняют задачи так, как вам хотелось бы. Это может быть связано с тем, что задачи, которые должна выполнять модель, представляют собой специализированные задачи, которым трудно обучить модель, используя только быстрое проектирование. В этих случаях вы можете использовать настройку модели, чтобы улучшить производительность модели для конкретных задач. Настройка модели также может помочь удовлетворить конкретные требования к выходным данным, когда инструкций недостаточно. Большие языковые модели (LLM) могут содержать огромный объем информации и выполнять множество задач, но они преуспевают только при условии специальной подготовки. Точная настройка может обучить LLM, позволяя адаптировать предварительно обученный LLM к вашим конкретным потребностям.
В этой лабораторной работе вы узнаете, как выполнить точную настройку с использованием подхода контролируемой настройки для модели LLM.
Контролируемая настройка улучшает производительность модели за счет обучения новому навыку. Данные, содержащие сотни помеченных примеров, используются для обучения модели имитированию желаемого поведения или задачи. Мы собираемся предоставить помеченный набор данных для входного текста (подсказки) и выходного текста (ответа), чтобы научить модель настраивать ответы для нашего конкретного случая использования.
Более подробную информацию о настройке модели можно найти здесь .
Что ты построишь
Вариант использования: создание заголовков для новостных статей.
Предположим, вы хотите автоматически генерировать заголовки для новостных статей. Используя Vertex AI, вы можете точно настроить LLM, который генерирует подходящий краткий заголовок в определенном стиле и настраивает заголовок в соответствии с рекомендациями новостного канала.
В этой лаборатории кода вы выполните следующее:
- Используйте
BBC FULLTEXT DATA
(предоставленные общедоступным набором данных BigQuerybigquery-public-data.bbc_news.fulltext
). - Настройте LLM (
text-bison@002
) на новую точно настроенную модель под названием «bbc-news-summary-tuned
» и сравните результат с ответом базовой модели. Пример JSONL-файла для этой кодлаба доступен в репозитории . Вы можете загрузить файл в корзину Cloud Storage и выполнить следующие шаги по тонкой настройке: - Подготовьте данные. Начните с набора данных новостных статей и соответствующих им заголовков, например набора данных BBC News, используемого в примере кода.
- Точная настройка предварительно обученной модели. Выберите базовую модель, например «
text-bison@002
», и настройте ее с помощью данных новостей с помощью Vertex AI SDK для Python. - Оцените результаты: сравните производительность вашей точно настроенной модели с базовой моделью, чтобы увидеть улучшение качества генерации заголовков.
- Разверните и используйте свою модель: сделайте свою точно настроенную модель доступной через конечную точку API и начните автоматически генерировать заголовки для новых статей.
2. Прежде чем начать
- В Google Cloud Console на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего проекта Google Cloud включена оплата. Узнайте, как проверить, включена ли оплата в проекте .
- Откройте блокнот Colab и войдите в ту же учетную запись, что и ваша текущая активная учетная запись Google Cloud.
3. Точная настройка большой языковой модели
В этой лаборатории кода используется Vertex AI SDK для Python для точной настройки модели. Вы можете выполнить тонкую настройку и с помощью других опций — HTTP, команды CURL, Java SDK, Консоли.
Вы можете настроить и оценить свою модель для получения индивидуальных ответов за 5 шагов. Полный код вы можете посмотреть в файле llm_fine_tuning_supervised.ipynb из репозитория .
4. Шаг 1. Установите и импортируйте зависимости
!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components
Выполните остальные шаги, как показано в файле .ipynb в репозитории . Обязательно замените PROJECT_ID и BUCKET_NAME своими учетными данными.
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import warnings
warnings.filterwarnings('ignore')
import vertexai
vertexai.init(project=PROJECT_ID, location=REGION)
import kfp
import sys
import uuid
import json
import pandas as pd
from google.auth import default
from datasets import load_dataset
from google.cloud import aiplatform
from vertexai.preview.language_models import TextGenerationModel, EvaluationTextSummarizationSpec
5. Шаг 2. Подготовьте и загрузите данные обучения.
Замените YOUR_BUCKET своим сегментом и загрузите в него образец файла обучающих данных TRAIN.jsonl . Пример данных для этого варианта использования был предоставлен по ссылке, упомянутой выше.
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
Этот шаг должен привести к следующему:
6. Шаг 3. Точная настройка большой языковой модели
На этом этапе вы можете настроить любую большую языковую модель (в зависимости от доступности поддержки). Однако в этом фрагменте мы настраиваем предварительно обученную модель «text-bison@002» с помощью фрейма данных, содержащего обучающие данные, которые мы загрузили на предыдущем шаге:
model_display_name = 'bbc-finetuned-model' # @param {type:"string"}
tuned_model = TextGenerationModel.from_pretrained("text-bison@002")
tuned_model.tune_model(
training_data=df,
train_steps=100,
tuning_job_location="europe-west4",
tuned_model_location="europe-west4",
)
Этот шаг займет несколько часов. Вы можете отслеживать ход тонкой настройки, используя ссылку на задание конвейера в результате.
7. Шаг 4. Прогнозируйте с помощью новой точно настроенной модели.
Как только работа по точной настройке будет завершена, вы сможете делать прогнозы с помощью своей новой модели. Чтобы сделать прогноз с помощью новой настроенной модели:
response = tuned_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
Вы должны увидеть следующий результат:
Чтобы спрогнозировать базовую модель ( text-bison@002
) для сравнения, выполните следующие команды:
base_model = TextGenerationModel.from_pretrained("text-bison@002")
response = base_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
Вы должны увидеть следующий результат:
Несмотря на то, что оба сгенерированных заголовка выглядят уместно, первый (созданный с помощью точно настроенной модели) больше соответствует стилю заголовков, используемых в рассматриваемом наборе данных.
Загрузите точно настроенную модель
Возможно, будет проще загрузить только что настроенную модель. Но помните, что на шаге 3 он вызывается в рамках самого кода, поэтому настроенная модель по-прежнему хранится в переменной Tuned_model. Но что, если вы хотите вызвать модель, которая была настроена в прошлом?
Для этого вы можете вызвать метод get_tuned_model() в LLM с полным URL-адресом ENDPOINT развернутой точно настроенной модели из реестра моделей Vertex AI. Обратите внимание, что в этом случае вы вводите PROJECT_NUMBER и MODEL_NUMBER вместо их соответствующих идентификаторов.
tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))
8. Шаг 5. Оцените новую точно настроенную модель.
Оценка является важнейшим аспектом оценки качества и актуальности полученного ответа. Он включает в себя изучение результатов генеративной языковой модели для определения ее связности, точности и соответствия предоставленной подсказке. Оценка модели помогает определить области для улучшения, оптимизировать производительность модели и гарантировать, что сгенерированный текст соответствует желаемым стандартам качества и полезности. Подробнее об этом читайте в документации . А сейчас мы посмотрим, как мы можем получить некоторые оценочные показатели точно настроенной модели и сравнить их с базовой моделью.
- Загрузите набор данных EVALUATION :
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
- Определите спецификацию оценки для задачи суммирования текста в точно настроенной модели.
task_spec = EvaluationTextSummarizationSpec(
task_name = "summarization",
ground_truth_data=df
)
Этот шаг займет несколько минут. Вы можете отслеживать ход выполнения, используя ссылку на задание конвейера в результате. После завершения вы должны увидеть следующий результат оценки:
Метрика rougeLSum
в результате оценки определяет оценку ROUGE-L для сводки. ROUGE-L — это показатель, основанный на отзывах, который измеряет совпадение между сводкой и справочной сводкой. Он рассчитывается путем взятия самой длинной общей подпоследовательности (LCS) между двумя сводками и деления ее на длину справочной сводки.
Оценка rougeLSum
в предоставленном выражении равна 0,36600753600753694, что означает, что сводка на 36,6% перекрывается с эталонной сводкой.
Если вы запустите этап оценки базовой модели, вы заметите, что итоговая оценка относительно более высокая для точно настроенной модели.
Результаты оценки можно найти в выходном каталоге Cloud Storage, который вы указали при создании задания оценки. Файл называется evaluation_metrics.json
. Для настроенных моделей вы также можете просмотреть результаты оценки в консоли Google Cloud на странице реестра моделей Vertex AI.
9. Важные соображения
- Поддержка модели: всегда проверяйте документацию модели на предмет совместимости последней версии.
- Быстрое развитие: область LLM быстро развивается. Более новая, более мощная модель потенциально может превзойти доработанную модель, построенную на более старой базе. Хорошей новостью является то, что вы можете применить эти методы тонкой настройки к новым моделям, когда такая возможность станет доступной.
- LoRA: LoRA — это метод эффективной настройки LLM. Это достигается путем введения обучаемых матриц разложения низкого ранга в существующие предварительно обученные слои модели. Подробнее об этом читайте здесь . Вместо обновления всех параметров массивного LLM LoRA изучает матрицы меньшего размера, которые добавляются или умножаются на весовые матрицы исходной модели. Это существенно уменьшает количество дополнительных параметров, вносимых при тонкой настройке.
10. Очистить
Чтобы избежать взимания платы с вашей учетной записи Google Cloud за ресурсы, используемые в этой лаборатории кода, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу «Управление ресурсами» .
- В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить» .
- В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить работу» , чтобы удалить проект.
- Альтернативно вы можете перейти в Реестр моделей , перейти на вкладку «Развертывание и тестирование модели», отменить развертывание конечной точки и удалить развернутую настроенную модель.
11. Поздравления
Поздравляем! Вы успешно использовали Vertex AI для точной настройки модели LLM. Точная настройка — это мощный метод, позволяющий настроить LLM под вашу сферу деятельности и задачи. С Vertex AI у вас есть инструменты и ресурсы, необходимые для эффективной и результативной настройки ваших моделей.
Изучите репозитории GitHub и поэкспериментируйте с примером кода, чтобы лично испытать точную настройку и оценку . Подумайте, как точно настроенные программы LLM могут удовлетворить ваши конкретные потребности: от создания целевых маркетинговых текстов до обобщения сложных документов или перевода на языки с культурными нюансами. Используйте комплексный набор инструментов и услуг, предлагаемых Vertex AI , для простого создания, обучения, оценки и развертывания ваших точно настроенных моделей.