Дообучение моделей в DataSphere
Вы можете дообучать языковые модели Yandex Foundation Models, чтобы они лучше понимали специфику ваших задач, через API или ML SDK. Дообучение удобно запускать в ноутбуках Yandex DataSphere.
В этом руководстве вы дообучите модель в DataSphere с помощью SDK. Вы также можете склонировать репозиторий
Чтобы дообучить модель:
- Подготовьте инфраструктуру.
- Создайте API-ключ для сервисного аккаунта.
- Создайте секреты.
- Дообучите модель.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Перед началом работы нужно зарегистрироваться в Yandex Cloud, настроить сообщество и привязать к нему платежный аккаунт:
- На главной странице DataSphere
нажмите Попробовать бесплатно и выберите аккаунт для входа — Яндекс ID или рабочий аккаунт в федерации (SSO). - Выберите организацию Yandex Cloud Organization, в которой вы будете работать в Yandex Cloud.
- Создайте сообщество.
- Привяжите платежный аккаунт к сообществу DataSphere, в котором вы будете работать. Убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его в интерфейсе DataSphere.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры для дообучения модели входит:
- плата за использование вычислительных ресурсов DataSphere;
- плата за генерацию текста моделью.
Подготовьте инфраструктуру
Войдите в консоль управления
Если у вас есть активный платежный аккаунт, на странице облака
Примечание
Если вы работаете с Yandex Cloud через федерацию удостоверений, вам может быть недоступна платежная информация. В этом случае обратитесь к администратору вашей организации в Yandex Cloud.
Создайте каталог
- В консоли управления
выберите облако и нажмите кнопку Создать каталог. - Введите имя каталога, например
data-folder
. - Нажмите кнопку Создать.
Создайте сервисный аккаунт для проекта DataSphere
- Перейдите в каталог
data-folder
. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя сервисного аккаунта, например
gpt-user
. - Нажмите Добавить роль и назначьте сервисному аккаунту роль
ai.languageModels.user
. - Нажмите кнопку Создать.
Добавьте сервисный аккаунт в проект
Чтобы сервисный аккаунт мог обращаться к модели из ноутбука, добавьте его в список участников проекта.
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. - На вкладке Участники нажмите Добавить участника.
- Выберите аккаунт
gpt-user
и нажмите Добавить.
Создайте API-ключ для сервисного аккаунта
Чтобы сервисный аккаунт мог получить доступ к модели, создайте API-ключ.
- В консоли управления
перейдите в каталогdata-folder
. - В списке сервисов выберите Identity and Access Management.
- На панели слева выберите
Сервисные аккаунты. - В открывшемся списке выберите сервисный аккаунт
gpt-user
. - На панели сверху нажмите кнопку
Создать новый ключ и выберите пункт Создать API-ключ. - Нажмите кнопку Создать.
- Сохраните идентификатор и секретный ключ.
Создайте секреты
Чтобы получить API-ключ и идентификатор каталога из ноутбука, создайте секреты с идентификаторами ключа и каталога.
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. - В блоке Ресурсы проекта нажмите
Секрет. - Нажмите Создать.
- В поле Имя задайте имя секрета —
API_KEY
. - В поле Значение вставьте идентификатор ключа.
- Нажмите Создать.
- Создайте еще один секрет
FOLDER_ID
с идентификатором каталога.
Дообучите модель
Код для обучения запускается из ноутбука DataSphere. Данные для обучения хранятся в формате JSON Lines
-
Откройте ноутбук с кодом по ссылке ниже:
-
Скачайте файл
generations.jsonlines
из репозитория на GitHub и поместите его рядом с ноутбуком. -
Установите DataSphere SDK, запустив код в ячейке ноутбука:
%pip install yandex-cloud-ml-sdk --upgrade
-
Импортируйте необходимые библиотеки:
import pathlib import uuid import os from __future__ import annotations from yandex_cloud_ml_sdk import YCloudML import urllib.request import zipfile
-
Загрузите TensorBoard
. Он понадобится, чтобы посмотреть метрики обучения:def download_tensorboard(url): urllib.request.urlretrieve(url, "tensorboard.zip") with zipfile.ZipFile('tensorboard.zip', 'r') as zip_ref: zip_ref.extractall("tensorboard")
-
Загрузите данные для обучения:
def local_path(path: str) -> pathlib.Path: return pathlib.Path(path) dataset_path = local_path("generations.jsonlines") print(dataset_path) print("Данные датасета для дообучения") print(dataset_path.read_text())
-
Создайте объект SDK, содержащий параметры для авторизации:
sdk = YCloudML( folder_id=os.environ['FOLDER_ID'], # Идентификатор каталога, сохраненный в секрете DataSphere auth=os.environ['API_KEY'] # API-ключ сервисного аккаунта, сохраненный в секрете DataSphere )
-
Создайте датасет для обучения и запустите его загрузку и валидацию:
dataset_draft = sdk.datasets.draft_from_path( task_type='TextToTextGeneration', path=dataset_path, upload_format='jsonlines', name='test-generations' ) dataset = dataset_draft.upload() print('Датасет загружается и валидируется') print(f'Новый датасет {dataset=} \n')
-
Выберите базовую модель, которую хотите дообучить, и запустите дообучение. В примере — YandexGPT Lite:
base_model = sdk.models.completions('yandexgpt-lite') tuning_task = base_model.tune_deferred( dataset, name=str(uuid.uuid4()), n_samples=10000 ) print(f'Обучение началось {tuning_task} \n') # Дообучение может длиться до нескольких часов # Дожидаемся завершения операции обучения и получаем новую модель new_model = tuning_task.wait() print(f'Обучение закончилось, новая модель = {new_model} \n')
-
Получите дообученную модель:
# Если вы закрыли ноутбук, по task_id можно проверить статус операции tuning_task = sdk.tuning.get(task_id) print(tuning_task.get_task_info()) new_model = tuning_task.get_result() print({new_model})
-
Протестируйте новую модель:
print('Посылаем запросы в новую модель\n') # Примеры запросов в модель completion_result = new_model.run("Как тебя зовут?") print(f'{completion_result=} \n') # Дообученную модель можно использовать, указав ее URI tuned_uri = new_model.uri model = sdk.models.completions(tuned_uri) completion_result = model.run("Откуда ты?") print(f'{completion_result=} \n')
Модель сгенерирует и вернет ответы с учетом дообучения.
-
Загрузите метрики дообучения:
# Получаем ссылку с данными для TensorBoard и скачиваем файлы metrics_url = new_model.get_metrics_url() download_tensorboard(metrics_url)
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы, удалите проект.