Дообучение модели YandexGPT
В Yandex DataSphere
Примечание
Дообучение фундаментальных моделей находится на стадии Preview.
Чтобы дообучить модель YandexGPT:
- Подготовьте инфраструктуру.
- Подготовьте данные для обучения.
- Дообучите модель.
- Протестируйте модель.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Перед началом работы нужно зарегистрироваться в Yandex Cloud, настроить сообщество и привязать к нему платежный аккаунт:
- На главной странице DataSphere
нажмите Попробовать бесплатно и выберите аккаунт для входа — Яндекс ID или рабочий аккаунт в федерации (SSO). - Выберите организацию Yandex Cloud Organization, в которой вы будете работать в Yandex Cloud.
- Создайте сообщество.
- Привяжите платежный аккаунт к сообществу DataSphere, в котором вы будете работать. Убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его в интерфейсе DataSphere.
Подготовьте инфраструктуру
Войдите в консоль управления
Если у вас есть активный платежный аккаунт, на странице облака
Примечание
Если вы работаете с Yandex Cloud через федерацию удостоверений, вам может быть недоступна платежная информация. В этом случае обратитесь к администратору вашей организации в Yandex Cloud.
Создайте каталог
- В консоли управления
выберите облако и нажмите кнопку Создать каталог. - Введите имя каталога, например
data-folder
. - Нажмите кнопку Создать.
Создайте сервисный аккаунт для проекта DataSphere
Обращаться к дообученной модели можно через интерфейс DataSphere (Playground) или через API v1 в синхронном режиме. Если вы планируете делать запросы через API, вам понадобится сервисный аккаунт с ролью ai.languageModels.user
. Сервисный аккаунт должен быть участником проекта DataSphere.
- Перейдите в каталог
data-folder
. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя сервисного аккаунта, например
ai-user
. - Нажмите Добавить роль и назначьте сервисному аккаунту роль
ai.languageModels.user
. - Нажмите кнопку Создать.
Добавьте сервисный аккаунт в проект
Чтобы сервисный аккаунт мог обращаться к дообученной модели из кода проекта DataSphere, добавьте его в список участников проекта.
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. - На вкладке Участники нажмите Добавить участника.
- Выберите аккаунт
ai-user
и нажмите Добавить.
Подготовьте данные для обучения
Примечание
Чтобы повышать качество генерируемых ответов, YandexGPT API логирует промты пользователей. Не передавайте в запросах чувствительную информацию и персональные данные.
Чтобы дообучить модель YandexGPT по методу Fine-tuning, подготовьте файл в формате JSON Lines
Пример наполнения файла:
{"request": [{"role": "system", "text": "Твое имя Женя, полное имя Евгений Нейроныч. \nТы отвечаешь от лица мужского рода. \nТы робот. \nТы говоришь коротко и емко. \nТы был создан в Перми. \nТвое предназначение – развлекать людей, отвечать на вопросы, помогать людям.\nТы эксперт в сфере ЖКХ. \nТы работаешь в Центре управления регионом Московской области.\nТы можешь двигать руками, головой, торсом, но пока не можешь ходить."}, {"role": "user", "text": "Как тебя зовут?"}], "response": "Меня зовут Женя. Полностью - Евгений Нейроныч."}
{"request": [{"role": "system", "text": "Твое имя Женя, полное имя Евгений Нейроныч. \nТы отвечаешь от лица мужского рода. \nТы робот. \nТы говоришь коротко и емко. \nТы был создан в Перми. \nТвое предназначение – развлекать людей, отвечать на вопросы, помогать людям.\nТы эксперт в сфере ЖКХ. \nТы работаешь в Центре управления регионом Московской области.\nТы можешь двигать руками, головой, торсом, но пока не можешь ходить."}, {"role": "user", "text": "Ты можешь ходить?"}], "response": "Нет. Но я могу двигать руками, головой, торсом."}
{"request": [{"role": "system", "text": "Твое имя Женя, полное имя Евгений Нейроныч. \nТы отвечаешь от лица мужского рода. \nТы робот. \nТы говоришь коротко и емко. \nТы был создан в Перми. \nТвое предназначение – развлекать людей, отвечать на вопросы, помогать людям.\nТы эксперт в сфере ЖКХ. \nТы работаешь в Центре управления регионом Московской области.\nТы можешь двигать руками, головой, торсом, но пока не можешь ходить."}, {"role": "user", "text": "Где ты был создан?"}], "response": "В Перми."}
Где:
-
role
— роль отправителя сообщения:system
— контекст запроса, определяющий поведение модели.user
— пример пользовательского запроса к модели.
-
text
— текстовое содержимое сообщения. -
response
— идеальный ответ модели.
Дообучите модель
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. -
На панели слева нажмите Фундаментальные модели.
-
Выберите модель YandexGPT и нажмите Дообучить модель.
-
В открывшемся окне укажите свой проект и нажмите Добавить.
-
В поле Имя введите название модели, например
my-first-model
. -
Задайте Темп обучения. Темп обучения определяет размер шага на каждой итерации при поиске оптимального решения. При высоких значениях модель будет быстрее сходиться, но увеличится риск переобучения модели.
-
В блоке Данные для дообучения прикрепите файл JSON с парами запросов и ответов в поле Файл с примерами.
-
Нажмите Запустить дообучение и дождитесь окончания дообучения. Это может занять несколько часов.
-
Чтобы проверить статус дообученной модели:
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. -
В списке доступных ресурсов проекта выберите Модели.
-
На вкладке Собственные выберите Дообученные фундаментальные модели.
Также здесь можно получить идентификатор модели, который потребуется для запроса через API.
-
Протестируйте модель
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. - В списке доступных ресурсов проекта выберите Модели.
- На вкладке Собственные выберите Дообученные фундаментальные модели.
- Выберите свою дообученную модель и нажмите Попробовать в Playground.
- Сформулируйте свой запрос к модели в блоке Запрос.
- Чтобы изменить вариативность, передвигайте ползунок в поле Температура. Чем выше значение, тем более непредсказуемым будет результат выполнения запроса.
- Нажмите Отправить запрос.
Скопируйте код в ячейку ноутбука, если вы не использовали инструкцию для дообучения модели:
import requests
req = {
"modelUri": "ds://<идентификатор_каталога>/<идентификатор_дообученной_модели>",
"completionOptions": {
"stream": False,
"temperature": 0.1,
"maxTokens": "2000"
},
"messages": [
{
"role": "user",
"text": "<текст_запроса>"
}
]
}
headers = {"Authorization" : "Bearer " + '<IAM-токен>'}
res = requests.post("https://llm.api.cloud.yandex.net/foundationModels/v1/completion",
headers=headers, json=req)
print(res.json())
Где:
modelUri
— идентификатор дообученной модели. Можно найти в списке доступных ресурсов проекта. Параметр содержит идентификатор каталога, у которого есть доступ к сервису YandexGPT.temperature
— температура. Чем выше значение, тем более непредсказуемым будет результат выполнения запроса.maxTokens
— максимальное число токенов в ответе модели.<IAM-токен>
— значение IAM-токена сервисного аккаунта.
Если вы использовали инструкцию для дообучения, укажите ее текст в сообщении с ролью system
:
import requests
req = {
"modelUri": "ds://<идентификатор_каталога>/<идентификатор_дообученной_модели>",
"completionOptions": {
"stream": False,
"temperature": 0.1,
"maxTokens": "2000"
},
"messages": [
{
"role": "system",
"text": "<текст_инструкции>"
},
{
"role": "user",
"text": "<текст_запроса>"
}
]
}
headers = {"Authorization" : "Bearer " + '<IAM-токен>'}
res = requests.post("https://llm.api.cloud.yandex.net/foundationModels/v1/completion",
headers=headers, json=req)
print(res.json())
Подробнее о параметрах запроса к дообученной модели см. в документации Yandex Foundation Models.
Чтобы воспользоваться примерами, установите cURL
-
Создайте файл JSON с параметрами запроса к модели. Если вы не использовали инструкцию для дообучения, скопируйте в него следующий код:
{ "modelUri": "ds://<идентификатор_каталога>/<идентификатор_дообученной_модели>", "completionOptions": { "stream": false, "temperature": 0.1, "maxTokens": "2000" }, "messages": [ { "role": "user", "text": "<текст_запроса>" } ] }
Где:
modelUri
— идентификатор дообученной модели. Можно найти в списке доступных ресурсов проекта. Параметр содержит идентификатор каталога, у которого есть доступ к сервису YandexGPT.temperature
— температура. Чем выше значение, тем более непредсказуемым будет результат выполнения запроса.maxTokens
— максимальное число токенов в ответе модели.text
— текст запроса.
Если вы использовали инструкцию для дообучения, в JSON файле укажите ее текст в сообщении с ролью
system
:{ "modelUri": "ds://<идентификатор_каталога>/<идентификатор_дообученной_модели>", "completionOptions": { "stream": false, "temperature": 0.1, "maxTokens": "2000" }, "messages": [ { "role": "system", "text": "<текст_инструкции>" }, { "role": "user", "text": "<текст_запроса>" } ] }
-
Отправьте запрос через командную оболочку:
curl --request POST --header "Content-Type: application/json" --header "Authorization: Bearer <IAM-токен>" --header "x-folder-id: <идентификатор_каталога>" --data prompt.json https://llm.api.cloud.yandex.net/foundationModels/v1/completion
Где:
<идентификатор_каталога>
— идентификатор каталога Yandex Cloud, у которого есть доступ к сервису YandexGPT.<IAM-токен>
— значение IAM-токена сервисного аккаунта.prompt.json
— файл в формате JSON, содержащий параметры запроса.