Дообучение LLM с использованием Workbench
Содержание
Общие сведенияОбласть примененияПодготовкаШаги дообучения LLM-моделиСоздание экземпляра Notebook/VSCodeПодготовка моделиПодготовка места вывода моделиПодготовка датасетаФормат датасета HuggingfaceФормат LLaMA-FactoryПодготовка runtime-образаСоздание задачи VolcanoJob для дообученияПримечание по использованию PVC на базе NFSУправление задачейОтслеживание экспериментовЗапуск сервиса инференса с использованием дообученной моделиЗапуск на GPU, отличных от NvidiaПодготовкаПроверка исходного vendor-решения (необязательно)Преобразование vendor-решения для запуска как Kubernetes Job/Deployment (необязательно)Изменение vendor-решения для запуска как volcano jobОтслеживание экспериментовИтогиОбщие сведения
Дообучение и обучение моделей часто требуют адаптации к различным структурам моделей, аппаратным устройствам и подходящим методам параллельного обучения. Alauda AI Workbench предоставляет комплексный подход: от разработки модели до отправки задач на обучение, управления ими и отслеживания экспериментов, помогая инженерам по моделям и алгоритмам быстро адаптироваться и завершить весь процесс дообучения и обучения модели.
В этом решении мы приводим пример дообучения модели Qwen3-0.6B с использованием LLaMA-Factory.
Alauda AI Workbench создает контейнерную среду Notebook/VSCode (CodeServer) для разработки и отладки в пользовательском namespace. В пределах одного namespace можно создать несколько экземпляров Notebook/VSCode, чтобы сохранять среды для разных пользователей и задач разработки. Notebook может запрашивать только CPU-ресурсы для разработки и отправки кластерных задач, используя GPU-ресурсы кластера для выполнения задач. Для Notebook также можно запрашивать GPU-ресурсы, что позволяет выполнять такие задачи, как обучение и дообучение, непосредственно в Notebook, независимо от того, требуется ли модели распределенное обучение.
Кроме того, вы можете использовать встроенный MLFlow платформы для записи различных метрик для каждого сеанса дообучения модели, что упрощает сравнение нескольких экспериментов и выбор итоговой модели.
Для отправки кластерных задач из Notebook мы используем VolcanoJob, Kubernetes-native менеджер ресурсов. Планировщик 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), потребуется использовать другие образы, скрипты запуска, датасеты и т. д.
- Это решение применимо к сценариям x86/64 CPU и NVIDIA GPU.
- Для сценариев 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-ресурсы в кластере, чтобы повысить эффективность использования ресурсов.
См. Создание Workbench для подробных шагов по созданию экземпляра Notebook/VSCode.
Подготовка модели
Скачайте модель Qwen/Qwen3-0.6B с Huggingface или других сайтов открытого
обмена моделями. Затем загрузите модель в репозиторий моделей.
Подробные шаги по загрузке файлов модели в репозиторий моделей см. в разделе Upload Models Using Notebook.
Подготовка места вывода модели
Создайте пустую модель в репозитории моделей для хранения выходной модели. При настройке места вывода для дообучения укажите Git repository URL модели.
Подготовка датасета
Скачайте и отправьте sample identity dataset в репозиторий датасетов. Этот датасет используется для дообучения LLM, чтобы она могла отвечать на пользовательские вопросы, например: "Who are you?"
- Сначала создайте пустой репозиторий датасета в разделе "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 File
В YAML-файле выше перед отправкой задачи измените следующие настройки.
- Image: содержит зависимости, необходимые для выполнения задачи.
- Переменные окружения: расположения исходной модели, датасета и выходной модели для задачи:
BASE_MODEL_URL: измените на Git URL подготовленной модели.DATASET_URL: измените на Git URL подготовленного датасетаidentity-alauda.OUTPUT_MODEL_URL: создайте пустую модель в репозитории моделей для хранения выходной модели, затем укажите Git URL этой модели.
- Требуемые ресурсы для задачи, включая:
- model cache PVC (optional): PVC для хранения базовой модели (при запуске задач предобучения шаг загрузки базовой модели можно опустить) и датасета. Необходимо вручную создать и указать PVC в YAML-файле выше. Используйте этот "model cache PVC" для ускорения нескольких экспериментов по дообучению на разных моделях.
- workspace PVC (required): PVC и рабочий каталог, где выполняется задача. Контрольные точки и файлы выходной модели будут сохраняться здесь. В приведенном выше примере используется временный PVC, который будет удален после завершения задачи, поскольку выходная модель уже загружается в репозиторий моделей.
- Shared Memory: для задач многопроцессорного/распределенного обучения рекомендуется выделять как минимум 4 Gi shared memory.
- CPU, memory и GPU ресурсы, необходимые для задачи (в зависимости от device plugin для GPU, развернутого в кластере).
- Скрипт выполнения задачи:
- В приведенном выше примере скрипт включает кэширование модели из репозитория моделей в PVC, кэширование обучающего датасета в PVC и отправку модели в новый репозиторий моделей после дообучения. Вы можете настроить скрипт под свои задачи.
- В примере скрипт использует
LLaMA-Factoryдля запуска задачи дообучения, который может обрабатывать большинство сценариев обучения LLM. - Гиперпараметры: в примере выше гиперпараметры заданы непосредственно в скрипте запуска. Также можно использовать переменные окружения для чтения гиперпараметров, которые могут многократно корректироваться, что упрощает многократный запуск и настройку.
Примечание по использованию PVC на базе NFS
При использовании NFS в качестве workspace или model cache PVC необходимо убедиться, что выполнены следующие действия, чтобы у смонтированного тома NFS были корректные права доступа к файловой системе:
-
На всех узлах K8s, которые могут использовать NFS PVC, должен быть установлен
nfs-utils, например:yum install -y nfs-utils. -
При создании storage class NFS добавьте параметр
mountPermissions: "0757", например:
В образ Workbench не входит предварительно установленный kubectl. Вы можете использовать кнопку загрузки в интерфейсе Jupyter, чтобы загрузить бинарный файл kubectl, скачанный с локальной машины, в среду Jupyter.
После завершения указанных выше настроек откройте терминал в Notebook и выполните: kubectl create -f vcjob_sft.yaml, чтобы отправить VolcanoJob в кластер.
Управление задачей
В терминале Notebook:
- Выполните
kubectl get vcjob, чтобы просмотреть список задач, затемkubectl get vcjob <task name>, чтобы посмотреть статус задачиVolcanoJob. - Выполните
kubectl get pod, чтобы посмотреть статус pod, иkubectl logs <pod name>, чтобы просмотреть логи задачи. Обратите внимание, что для распределенных задач может существовать несколько pod. - Если pod не создан, выполните
kubectl describe vcjob <task name>илиkubectl get podgroups, чтобы посмотреть Volcano podgroup. Вы также можете проверить лог планировщикаVolcano, чтобы определить, связана ли проблема планирования с недостатком ресурсов, невозможностью смонтировать PVC или с другими проблемами планирования. - После успешного выполнения задачи дообученная модель будет автоматически отправлена в репозиторий моделей. Обратите внимание, что задача автоматически создаст ветку репозитория для отправки на основе времени. При использовании выходной модели обязательно выбирайте правильную версию.
Выполните kubectl delete vcjob <task name>, чтобы удалить задачу.
Отслеживание экспериментов
В приведенной выше задаче-примере дообучения мы используем LLaMA-Factory для запуска задачи дообучения и устанавливаем report_to: mlflow в конфигурации задачи. Это автоматически выводит метрики обучения на сервер mlflow. После запуска задачи вы можете найти записи отслеживания экспериментов в Alauda AI - Advanced - MLFlow и сравнивать несколько запусков. Например, можно сравнивать loss нескольких экспериментов.
Запуск сервиса инференса с использованием дообученной модели
После завершения задачи дообучения модель автоматически отправляется в репозиторий моделей. Вы можете использовать дообученную модель для запуска сервиса инференса и доступа к нему.
Примечание: В приведенной выше задаче мы используем метод дообучения LoRA. Перед загрузкой модели LoRA adapter был объединен с исходной моделью. Это позволяет напрямую публиковать выходную модель в сервис инференса. Запуск сервиса инференса с использованием базовой модели и adapter'ов в текущей версии НЕ поддерживается.
Шаги:
- Перейдите в 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, поддерживают только chat-возможности.)
Запуск на GPU, отличных от Nvidia
При использовании среды GPU, отличной от Nvidia (например, NPU, Intel Gaudi, AMD и т. д.), вы можете следовать общим шагам ниже, чтобы дообучать модели, запускать задачи обучения и управлять ими в AML Notebook.
Для конкретного примера Huawei Ascend NPU на основе образа workbench PyTorch CANN и ноутбуков MindSpeed-LLM см. Fine-tune and Pretrain LLMs on Ascend NPU Using Workbench.
Примечание: Следующие шаги также можно адаптировать для предобучения LLM и традиционных ML-сценариев. Это общие шаги по переносу vendor-решения на Alauda AI с использованием Notebook и VolcanoJob.
Подготовка
- Предварительное условие: драйвер GPU от производителя и Kubernetes device plugin развернуты в кластере. Устройства доступны внутри pod, созданного Kubernetes.
Примечание: вам необходимо знать имя ресурса vendor GPU и общее количество ресурсов устройства в кластере, чтобы упростить последующую отправку задачи.
Например, для Huawei NPU можно запросить карту NPU с помощью:
huawei.com/Ascend910:1. - Получите документацию и материалы решения, предоставленные производителем, для дообучения на GPU текущего производителя. Обычно это включает:
- Документация и шаги решения. Это можно выполнить в Kubernetes или в контейнере с использованием
nerdctl run. - Image для запуска дообучения. Например, производитель предоставляет решение для дообучения с использованием
LLaMA-Factoryи соответствующий образLLaMA-Factory(который может входить в состав образа). - Модель для запуска дообучения. Обычно устройства производителя поддерживают набор моделей. Используйте модели, поддерживаемые устройством, или модели, предоставленные в vendor-решении.
- Обучающие данные. Используйте пример данных, предоставленный в документации vendor-решения, или подготовьте собственный датасет в том же формате.
- Команда запуска задачи и параметры. Например, решение для дообучения на базе фреймворка
LLaMA-Factoryиспользует командуllamafactory-cliдля запуска задачи дообучения и настройки различных параметров, включая гиперпараметры задачи, в YAML-файле.
Проверка исходного vendor-решения (необязательно)
Чтобы убедиться в корректном выполнении vendor-решения и снизить объем последующей отладки, вы можете сначала полностью выполнить его в соответствии с vendor-решением, чтобы убедиться, что оно работает правильно.
Этот шаг можно пропустить. Однако если позже возникнут проблемы с выполнением задачи, вы можете вернуться к этому шагу, чтобы проверить, не является ли проблема исходным решением.
Преобразование vendor-решения для запуска как Kubernetes Job/Deployment (необязательно)
Если vendor-решение уже запускается как Kubernetes job/deployment/pod, этот шаг можно пропустить.
Если vendor-решение использует контейнерный способ запуска, например nerdctl run, вы можете сначала использовать простой Kubernetes job, чтобы проверить, что решение корректно работает в среде Kubernetes, где развернут device plugin производителя.
Примечание: Этот шаг позволяет исключить проблемы, связанные с тем, что Volcano jobs не могут запланировать vendor GPU-устройства, поэтому его можно проверять отдельно.
Ссылка:
Изменение vendor-решения для запуска как volcano job
См. следующее определение YAML
VolcanoJob YAML File
Отслеживание экспериментов
Некоторые фреймворки дообучения/обучения автоматически записывают ход эксперимента в различные сервисы отслеживания экспериментов. Например, фреймворки LLaMA-Factory и Transformers могут быть настроены на запись хода эксперимента в такие сервисы, как mlflow и wandb. В зависимости от вашей установки можно настроить следующие переменные окружения:
MLFLOW_TRACKING_URI: URL сервера отслеживания mlflow.MLFLOW_EXPERIMENT_NAME: имя эксперимента, обычно используется имя namespace. Это позволяет различать группу задач.
Фреймворк также задает место записи. Например, для LLaMA-Factory необходимо указать report_to: mlflow в YAML-файле конфигурации параметров задачи.
После запуска задачи обучения вы можете найти соответствующую задачу в интерфейсе Alauda AI - "Advanced" - MLFlow и просмотреть кривые каждой записанной метрики в "Metrics" или конфигурацию параметров для каждого запуска. Также можно сравнивать несколько экспериментов.
Итоги
Используя среду разработки Alauda AI Notebook, вы можете быстро отправлять задачи дообучения и обучения в кластер с помощью YAML и командной строки, а также управлять состоянием выполнения этих задач. Такой подход позволяет быстро разрабатывать и настраивать шаги дообучения и обучения моделей, обеспечивая такие сценарии, как LLM SFT, preference alignment, обучение традиционных моделей и сравнение нескольких экспериментов.