Тонкая настройка LLM с использованием Workbench
Содержание
Общие сведенияОбласть примененияПодготовкаШаги тонкой настройки модели LLMСоздание экземпляра Notebook/VSCodeПодготовка моделиПодготовка места вывода моделиПодготовка набора данныхФормат набора данных HuggingfaceФормат LLaMA-FactoryПодготовка runtime-образаСоздание задачи VolcanoJob для тонкой настройкиПримечание по использованию PVC на основе NFSУправление задачейОтслеживание экспериментовЗапуск сервиса вывода с использованием тонко настроенной моделиЗапуск на GPU, не относящихся к NvidiaПодготовкаПроверка исходного решения вендора (опционально)Преобразование решения вендора для запуска как Kubernetes Job/Deployment (опционально)Модификация решения вендора для запуска как volcano jobОтслеживание экспериментовИтогОбщие сведения
Тонкая настройка и обучение моделей часто требуют адаптации к различным структурам моделей, аппаратным устройствам и соответствующим методам параллельного обучения. Alauda AI Workbench предоставляет комплексный подход — от разработки модели до отправки задач обучения, управления ими и отслеживания экспериментов, помогая инженерам по моделям и алгоритмам быстро адаптироваться и завершить весь процесс тонкой настройки и обучения модели.
В этом решении приведён пример тонкой настройки модели Qwen3-0.6B с использованием LLaMA-Factory.
Alauda AI Workbench создаёт контейнерную среду Notebook/VSCode (CodeServer) для разработки и отладки в пространстве имён пользователя. В пространстве имён можно создать несколько экземпляров Notebook/VSCode, чтобы сохранить среды для разных пользователей и задач разработки. Ноутбуки могут запрашивать только CPU-ресурсы для разработки и отправки задач в кластер, используя GPU-ресурсы кластера для выполнения задач. Также можно запрашивать GPU-ресурсы для Notebook, что позволяет выполнять задачи, такие как обучение и тонкая настройка, непосредственно в Notebook, независимо от того, требует ли модель распределённого обучения.
Кроме того, вы можете использовать встроенный в платформу MLFlow для записи различных метрик каждой сессии тонкой настройки модели, что облегчает сравнение нескольких экспериментов и выбор итоговой модели.
Для отправки задач кластера из Notebook мы используем VolcanoJob — Kubernetes-нативный менеджер ресурсов. Планировщик Volcano поддерживает очереди, приоритеты и различные политики планирования, что способствует более эффективному планированию задач в кластере и улучшению использования ресурсов.
В этом решении используется LLaMA-Factory для запуска задач тонкой настройки и обучения. Однако для более масштабных сценариев тонкой настройки и обучения моделей, требующих параллельных методов, таких как Tensor Parallelism, Context Parallelism и Expert Parallelism для обучения больших моделей, может потребоваться использование других инструментов, создание собственных runtime-образов для тонкой настройки и изменение скрипта запуска задач для адаптации к разным инструментам и моделям. Для более подробного использования и настройки параметров LLaMA-Factory смотрите: https://llamafactory.readthedocs.io/en/latest/index.html
Область применения
- Решение применимо к Alauda AI версии 1.3 и выше.
- Тонкая настройка и обучение моделей LLM. Для обучения других типов моделей (например, YOLOv5) потребуется использовать другие образы, скрипты запуска, наборы данных и т.д.
- Решение применимо для сценариев с CPU x86/64 и GPU NVIDIA.
- Для сценариев с NPU требуется построить подходящий runtime-образ на основе данного решения для совместимости.
Подготовка
- Сначала необходимо развернуть плагин "Alauda AI Workbench" для поддержки Workbench (или развернуть плагин Kubeflow Base для использования Notebook с Kubeflow).
- Установить плагин
MLFlowдля отслеживания экспериментов.
Шаги тонкой настройки модели LLM
Создание экземпляра Notebook/VSCode
Перейдите в Alauda AI - Workbench (или Advanced - Kubeflow - Notebook), затем создайте новый Notebook или используйте существующий. Рекомендуется, чтобы Notebook использовал только CPU-ресурсы. Отправка задачи в кластер из Notebook будет запрашивать GPU-ресурсы в кластере для повышения эффективности использования ресурсов.
Подробные шаги создания экземпляра Notebook/VSCode смотрите в разделе Creating a Workbench.
Подготовка модели
Скачайте модель Qwen/Qwen3-0.6B с Huggingface или других сайтов с открытым исходным кодом моделей. Затем загрузите модель в репозиторий моделей.
Подробные шаги загрузки файлов модели в репозиторий смотрите в Upload Models Using Notebook.
Подготовка места вывода модели
Создайте пустую модель в репозитории моделей для хранения выходной модели. При настройке места вывода тонкой настройки укажите URL Git-репозитория модели.
Подготовка набора данных
Скачайте и загрузите пример набора данных identity в репозиторий наборов данных. Этот набор используется для тонкой настройки LLM, чтобы отвечать на вопросы пользователя, например "Кто ты?"
- Сначала создайте пустой репозиторий набора данных в разделе "Datasets" - "Dataset Repository".
- Загрузите zip-файл в Notebook, распакуйте его, затем перейдите в каталог набора данных. Используйте git lfs для загрузки набора данных в Git URL репозитория набора данных. Шаги аналогичны загрузке модели.
- После завершения загрузки обновите страницу набора данных — в вкладке "File Management" вы увидите успешно загруженный файл.
Примечание: Формат набора данных должен быть корректно распознан фреймворком тонкой настройки для использования в последующих задачах тонкой настройки. Ниже приведены два распространённых формата наборов данных для тонкой настройки LLM:
Формат набора данных Huggingface
Вы можете использовать следующий код, чтобы проверить, корректно ли загружается формат каталога набора данных с помощью datasets:
Формат LLaMA-Factory
Если вы используете инструмент LLaMA-Factory из примеров для обучения, формат набора данных должен соответствовать формату LLaMA-Factory. Справка: data_preparation
Подготовка runtime-образа
Используйте следующий Containerfile для сборки runtime-образа обучения или используйте предсобранный образ: alaudadockerhub/fine_tune_with_llamafactory:v0.1.1. Если вы хотите использовать другой фреймворк обучения, например YOLOv5, возможно, потребуется кастомизировать образ и установить необходимые зависимости.
После сборки образа загрузите его в реестр образов кластера платформы Alauda AI и настройте в последующих задачах.
Примечание: В образе должна быть доступна команда
git lfsдля загрузки и выгрузки файлов модели и набора данных.
Containerfile
Создание задачи VolcanoJob для тонкой настройки
В Notebook создайте YAML-файл для отправки задачи. Пример приведён ниже:
VolcanoJob YAML файл
В приведённом YAML-файле перед отправкой задачи измените следующие настройки.
- Образ: содержит зависимости, необходимые для выполнения задачи.
- Переменные окружения: адреса исходной модели, набора данных и выходной модели для задачи:
BASE_MODEL_URL: измените на Git URL подготовленной модели.DATASET_URL: измените на Git URL подготовленного набора данныхidentity-alauda.OUTPUT_MODEL_URL: создайте пустую модель в репозитории моделей для хранения выходной модели, затем укажите Git URL этой модели.
- Необходимые ресурсы для задачи, включая:
- PVC кэша модели (опционально): PVC для хранения базовой модели (при запуске предварительного обучения можно пропустить шаг загрузки базовой модели) и набора данных. Необходимо вручную создать и указать PVC в YAML-файле выше. Используйте этот "PVC кэша модели" для ускорения нескольких экспериментов тонкой настройки на разных моделях.
- PVC рабочего пространства (обязательно): PVC и рабочий каталог, где выполняется задача. Здесь будут храниться контрольные точки и выходные файлы модели. В приведённом примере используется временный PVC, который удаляется после завершения задачи, так как выходная модель уже загружена в репозиторий моделей.
- Разделяемая память: для многокартных/распределённых задач обучения рекомендуется выделять не менее 4 Gi разделяемой памяти.
- CPU, память и GPU ресурсы, необходимые для задачи (на основе плагина GPU-устройств, развернутого в кластере).
- Скрипт выполнения задачи:
- Пример скрипта выше включает кэширование модели из репозитория моделей в PVC, кэширование обучающего набора данных в PVC и отправку модели в новый репозиторий моделей после тонкой настройки. Вы можете кастомизировать скрипт под свои задачи.
- Пример скрипта использует
LLaMA-Factoryдля запуска задачи тонкой настройки, который подходит для большинства сценариев тонкой настройки LLM. - Гиперпараметры: в примере гиперпараметры определены непосредственно в скрипте запуска. Вы также можете использовать переменные окружения для чтения гиперпараметров, которые могут часто изменяться, что облегчает многократный запуск и настройку.
Примечание по использованию PVC на основе NFS
При использовании NFS в качестве PVC рабочего пространства или кэша модели необходимо выполнить следующие действия, чтобы обеспечить корректные права доступа к файловой системе на смонтированном NFS-томе:
-
На всех узлах Kubernetes, которые могут использовать PVC NFS, должен быть установлен пакет
nfs-utils, например,yum install -y nfs-utils. -
При создании класса хранилища NFS добавьте параметр
mountPermissions: "0757", например:
Образ Workbench не содержит предустановленного kubectl. Вы можете использовать кнопку загрузки в интерфейсе Jupyter для загрузки бинарника kubectl, скачанного с локальной машины, в среду Jupyter.
После завершения всех настроек откройте терминал в Notebook и выполните команду: kubectl create -f vcjob_sft.yaml для отправки VolcanoJob в кластер.
Управление задачей
В терминале Notebook:
- Выполните
kubectl get vcjobдля просмотра списка задач, затемkubectl get vcjob <имя задачи>для просмотра статуса задачиVolcanoJob. - Выполните
kubectl get podдля просмотра статуса pod, иkubectl logs <имя pod>для просмотра логов задачи. Обратите внимание, что для распределённых задач может быть несколько pod. - Если pod не создаётся, выполните
kubectl describe vcjob <имя задачи>илиkubectl get podgroupsдля просмотра podgroup Volcano. Также можно проверить логи планировщикаVolcano, чтобы определить, связана ли проблема с недостатком ресурсов, невозможностью монтирования PVC или другими проблемами планирования. - После успешного выполнения задачи тонко настроенная модель автоматически будет отправлена в репозиторий моделей. Обратите внимание, что задача автоматически создаёт ветку репозитория для push на основе времени. При использовании выходной модели обязательно выбирайте правильную версию.
Для удаления задачи выполните kubectl delete vcjob <имя задачи>.
Отслеживание экспериментов
В приведённом примере задачи тонкой настройки мы используем LLaMA-Factory для запуска задачи и устанавливаем report_to: mlflow в конфигурации задачи. Это автоматически отправляет метрики обучения на сервер mlflow. После запуска задачи записи отслеживания экспериментов можно найти в разделе Alauda AI - Advanced - MLFlow и сравнить несколько запусков. Например, можно сравнить потери (loss) нескольких экспериментов.
Запуск сервиса вывода с использованием тонко настроенной модели
После завершения задачи тонкой настройки модель автоматически отправляется в репозиторий моделей. Вы можете использовать тонко настроенную модель для запуска сервиса вывода и доступа к нему.
Примечание: В приведённом примере используется метод тонкой настройки LoRA. Перед загрузкой модели адаптер LoRA был объединён с исходной моделью. Это позволяет напрямую публиковать выходную модель в сервис вывода. Запуск сервиса вывода с использованием базовой модели и адаптеров НЕ поддерживается в текущей версии.
Шаги:
- Перейдите в Alauda AI - Model Repository, найдите тонко настроенную выходную модель, перейдите в Model Info - File Management - Edit Metadata, выберите "Task Type": "Text Classification" и "Framework": "Transformers".
- Нажмите кнопку Publish Inference API, затем выберите Custom Publishing.
- На странице публикации сервиса вывода выберите runtime вывода vLLM (выберите vLLM с версией CUDA, поддерживаемой GPU-узлами кластера), заполните настройки хранилища, ресурсов, GPU и нажмите Publish.
- Дождитесь полного запуска сервиса вывода, нажмите кнопку Experience в правом верхнем углу, чтобы начать диалог с моделью. (Примечание: модели с конфигурацией
chat_templateимеют только возможности чата.)
Запуск на GPU, не относящихся к Nvidia
При использовании среды с GPU, не относящимся к Nvidia (например, NPU, Intel Gaudi, AMD и др.), вы можете следовать общим шагам ниже для тонкой настройки моделей, запуска задач обучения и управления ими в AML Notebook.
Примечание: Следующие шаги также применимы к предобучению LLM и традиционным сценариям ML. Это общие шаги для адаптации решения вендора под запуск на Alauda AI с использованием Notebook и VolcanoJob.
Подготовка
- Предварительно: драйвер GPU вендора и плагин устройства Kubernetes должны быть развернуты в кластере. Устройства должны быть доступны внутри pod, созданного Kubernetes.
Примечание: необходимо знать имя ресурса GPU вендора и общее количество устройств в кластере для удобства последующей отправки задач.
Например, для Huawei NPU можно запросить карту NPU с помощью:
huawei.com/Ascend910:1. - Получите документацию и материалы решения вендора для тонкой настройки на GPU данного вендора. Обычно это включает:
- Документацию и шаги решения. Это можно выполнить в Kubernetes или в контейнере с помощью
nerdctl run. - Образ для запуска тонкой настройки. Например, вендор предоставляет решение тонкой настройки с использованием
LLaMA-Factoryи соответствующий образLLaMA-Factory(который может быть включён в образ). - Модель для тонкой настройки. Обычно устройства вендора поддерживают ряд моделей. Используйте поддерживаемые модели или модели из решения вендора.
- Данные для обучения. Используйте пример данных из документации решения вендора или создайте собственный набор данных в том же формате.
- Команда запуска задачи и параметры. Например, решение тонкой настройки на базе
LLaMA-Factoryиспользует командуllamafactory-cliдля запуска задачи и настройки параметров, включая гиперпараметры задачи, в YAML-файле.
Проверка исходного решения вендора (опционально)
Для гарантии корректного выполнения решения вендора и уменьшения последующих проблем можно сначала полностью запустить его согласно документации вендора и убедиться, что оно работает корректно.
Этот шаг можно пропустить. Однако если позже возникнут проблемы с выполнением задачи, можно вернуться к этому шагу для проверки исходного решения.
Преобразование решения вендора для запуска как Kubernetes Job/Deployment (опционально)
Если решение вендора уже работает как Kubernetes job/deployment/pod, этот шаг можно пропустить.
Если решение вендора использует метод запуска контейнера, например nerdctl run, можно сначала использовать простой Kubernetes job, чтобы проверить, что решение корректно работает в Kubernetes-среде с развернутым плагином устройства вендора.
Примечание: этот шаг позволяет исключить проблемы с невозможностью планирования устройств GPU вендора в volcano job, поэтому его можно проверить отдельно.
Пример:
Модификация решения вендора для запуска как volcano job
Смотрите пример определения YAML ниже.
VolcanoJob YAML файл
Отслеживание экспериментов
Некоторые фреймворки тонкой настройки/обучения автоматически записывают прогресс эксперимента в различные сервисы отслеживания экспериментов. Например, фреймворки LLaMA-Factory и Transformers могут указывать запись прогресса в сервисы, такие как mlflow и wandb. В зависимости от вашей инфраструктуры можно настроить следующие переменные окружения:
MLFLOW_TRACKING_URI: URL сервера отслеживания mlflow.MLFLOW_EXPERIMENT_NAME: имя эксперимента, обычно используется имя пространства имён. Это позволяет группировать задачи.
Фреймворк также указывает место записи. Например, LLaMA-Factory требует указания report_to: mlflow в YAML-конфигурации параметров задачи.
После начала задачи обучения соответствующую задачу можно найти в интерфейсе Alauda AI - "Advanced" - MLFlow и просмотреть кривые каждой записанной метрики в разделе "Metrics" или параметры конфигурации каждого запуска. Также можно сравнивать несколько экспериментов.
Итог
Используя среду разработки Alauda AI Notebook, вы можете быстро отправлять задачи тонкой настройки и обучения в кластер с помощью YAML и командной строки, а также управлять статусом выполнения этих задач. Такой подход позволяет быстро разрабатывать и настраивать шаги тонкой настройки и обучения моделей, обеспечивая выполнение операций, таких как LLM SFT, выравнивание предпочтений, традиционное обучение моделей и сравнение нескольких экспериментов.