Поделиться через


Настройка модели с помощью уточнения параметров

Узнайте, как настроить модели в Microsoft Foundry для наборов данных и вариантов использования. Позволяет точно настроить:

  • Более качественные результаты, чем то, что вы можете получить только от промпт-инжиниринга
  • Возможность обучать модель на большем количестве примеров, чем вмещается в её максимальный контекст запроса.
  • Экономия токенов из-за более коротких запросов
  • Запросы, для которых требуется низкая задержка, особенно при использовании небольших моделей.

В отличие от обучения с малыми выборками, тонкая настройка улучшает модель, обучая её на большем количестве примеров, чем вмещается в подсказку. Поскольку веса адаптируются к вашей задаче, вы включаете меньше примеров или инструкций, снижая количество токенов на вызов и потенциально уменьшая затраты и задержку.

Мы используем LoRA или низкоранговую адаптацию для точной настройки моделей таким образом, чтобы снизить их сложность, не влияя на их производительность. Этот метод работает путем аппроксимации исходной матрицы высокого ранга матрицей более низкого ранга, благодаря чему на этапе контролируемого обучения производится тонкая настройка лишь небольшой части важных параметров, что делает модель более управляемой и эффективной. Для пользователей это делает обучение быстрее и более доступным, чем другие методы.

В этой статье раскрываются следующие темы:

  • Выбор соответствующих наборов данных и форматов для точной настройки
  • Активируйте задание тонкой подстройки, отслеживайте состояние и получайте результаты.
  • Развертывание и оценка точно настроенной модели.
  • Итерировать на основе отзывов о результатах оценки.

Предпосылки

Поддерживаемые модели

Ознакомьтесь со страницей моделей, чтобы проверить, какие регионы в настоящее время поддерживают точную настройку.

Или можно точно настроить ранее настроенную модель, отформатированную как base-model.ft-{jobid}.

Подготовка данных

Обучающие данные и наборы данных проверки состоят из входных и выходных примеров того, как модель должна выполняться.

Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL) и должны быть отформатированы в формате беседы, который используется API завершения чата .

Рекомендуется использовать те инструкции и подсказки, которые вы нашли наиболее эффективными в каждом примере обучения. Это помогает получить лучшие результаты, особенно если у вас меньше сотни примеров.

Если у вас нет подготовленного набора данных, можно использовать возможности создания данных .

Пример формата файла

{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}

Формат файла многократного чата

Кроме того, поддерживается несколько поворотов беседы в одной строке файла обучения jsonl. Чтобы пропустить тонкую настройку для определенных сообщений помощника, добавьте пару необязательных weight значений ключа. weight В настоящее время можно задать значение 0 или 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the biggest city in France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Завершение чата с помощью визуального зрения

{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}

Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.

Рекомендации по размеру наборов данных

Чем больше примеров обучения у вас есть, тем лучше. Задания тонкой настройки не будут продолжаться без по крайней мере 10 примеров обучения, но такое небольшое число недостаточно, чтобы заметно повлиять на ответы модели. Рекомендуется предоставить сотни, если не тысячи, примеры обучения, которые будут успешными. Рекомендуется начать с 50 хорошо созданных обучающих данных.

Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучите модель на больших объёмах внутренних данных, не отсеяв менее качественные примеры из набора данных, то в результате вы можете получить модель, показатели которой хуже, чем ожидалось.

Создайте точно настроенную модель

Чтобы точно настроить модель в существующем проекте Foundry, выполните следующие действия:

  1. Войдите в Foundry и выберите проект. Если у вас еще нет проекта, сначала создайте проект.

  2. Перейдите на страницу > и нажмите кнопку Настроить в правом верхнем углу.

  3. Теперь вы увидите интерфейс для точной настройки модели для создания нового задания по настройке. Используйте приведенные ниже разделы, чтобы помочь в настройке задания и выбрать команду "Отправить ", чтобы начать обучение новой точно настроенной модели.

Выбор базовой модели

Доступные модели могут быть ограничены регионом проекта. Выбор модели влияет как на производительность, так и на стоимость модели.

При выборе модели можно также выбрать ранее настроенную модель.

Метод настройки

Различные методы настройки могут поддерживаться на основе выбранной модели:

  • Контролируемое обучение (SFT): обучает модель на парных помеченных входных и выходных данных. Лучше всего подходит для большинства сценариев, включая специализацию задач.

  • Прямая оптимизация предпочтений (DPO): выравнивает модель с предпочитаемыми людьми ответами. Идеально подходит для улучшения качества отклика.

  • Подкрепление (RFT): использует сигналы вознаграждения от классировщиков моделей для оптимизации сложного поведения.

Замечание

Остальная часть этого документа будет освещать шаги для метода тонкой настройки с управляемым обучением. Инструкции, относящиеся к другим методам настройки, см. в статьях по DPO или RFT.

Тип обучения

Выберите уровень обучения на основе варианта использования и бюджета.

  • Стандартный: обучение проводится в текущем регионе ресурса Foundry, предоставляя гарантии резидентности данных. Идеально подходит для рабочих нагрузок, в которых данные должны оставаться в определенном регионе.

  • Global: обеспечивает более доступные цены по сравнению со стандартом, используя емкость за пределами текущего региона. Данные и весовые значения копируются в регион, где происходит обучение. Идеально подходит, если место размещения данных не является ограничением, и требуется ускорить время очереди.

  • Разработчик (предварительная версия): обеспечивает значительную экономию расходов за счет использования свободных мощностей для обучения. Нет гарантий задержки или гарантий соглашения об уровне обслуживания, поэтому задания на этом уровне могут быть автоматически прерваны и позже возобновлены. Нет никаких гарантий местонахождения данных. Идеально подходит для экспериментов и рабочих нагрузок, чувствительных к стоимости.

Данные для обучения и проверки

Если у вас есть наборы данных в проекте Foundry, выберите существующий набор данных для источника данных и выберите свой набор данных.

Чтобы отправить только что подготовленные наборы данных, выберите " Отправить новый набор данных " для источника данных , а затем отправьте JSONL-файл.

После выбора или отправки файлов данных проверка автоматически выполняется, чтобы убедиться, что они находятся в правильном формате.

Замечание

Обучающие файлы данных должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ. Хотя 10 — это минимальное количество требуемых образцов в наборе данных, рекомендуется использовать по крайней мере сотни обучающих примеров для обучения модели новой способности.

Необязательные параметры

Суффикс

Рекомендуется заполнить поле суффикса , чтобы упростить различие между различными итерациями вашей точно настроенной модели. Суффикс принимает строку до 18 символов и используется при именовании полученной точно настроенной модели.

Семя

Управляет воспроизводимостью задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если начальное значение не указано, он создается случайным образом.

Гиперпараметры

Гиперпараметры для задания тонкой настройки можно настроить вручную или оставить в качестве значений по умолчанию.

Доступны следующие гиперпараметры:

Имя Тип Описание
batch_size целое число Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию, а также максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. Если задано значение -1, batch_size вычисляется как 0,2% примеров в обучающем наборе, а максимальное значение — 256.
learning_rate_multiplier число/номер Множитель скорости обучения, используемый для тренировки. Скорость обучения точной настройки — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0,02 до 0,2, чтобы увидеть, что дает лучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переобучения.
n_epochs целое число Количество эпох, на которое следует обучать модель. Под эпохой понимается один полный цикл обработки набора данных для обучения. Если задано значение -1, число эпох определяется динамически на основе входных данных.

Включение автоматического развертывания

Чтобы сэкономить время, можно включить автоматическое развертывание для результирующей модели. Если обучение завершится успешно, модель развертывается с помощью выбранного типа развертывания. Имя развертывания основано на уникальном имени, созданном для пользовательской модели, и необязательном суффиксе, который вы, возможно, предоставили ранее.

Мониторинг и анализ результатов

После отправки задания тонкой настройки вы увидите представление таблицы со списком всех отправленных заданий точной настройки. Щелкните в страницу сведений о задании, чтобы просмотреть дополнительные сведения об отдельных результатах.

Задание может находиться в очереди за другими заданиями в системе. Обучение модели может занять несколько минут в зависимости от размера модели и набора данных.

Metrics

Чтобы отслеживать следующие метрики, перейдите ко вкладке монитор:

  • train_loss: потеря для пакета обучения. Каждый шаг обучения на оси x представляет собой один проход, вперед и назад в пакете обучающих данных.
  • full_valid_loss: величина потерь на валидации, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, потеря должна уменьшиться.
  • train_mean_token_accuracy: процент токенов в пакете обучения, предсказанных правильно моделью.
    Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]].
  • full_valid_mean_token_accuracy. Допустимая точность среднего токена, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, точность токенов должна увеличиваться.

Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если вы видите расхождение между данными обучения и валидации, это может указывать на то, что вы переобучаетесь. Попробуйте обучение с меньшим количеством эпох или меньшим коэффициентом скорости обучения.

Контрольные точки

При завершении каждой эпохи обучения создается контрольная точка. Контрольные точки можно просмотреть, перейдя на вкладку Контрольные точки.

Контрольная точка — это полностью функциональная версия модели, которую можно развернуть и использовать в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переобучения. Когда задание точной настройки завершится, у вас будут три последние версии модели, доступные для развертывания. С помощью REST API можно скопировать контрольные точки между ресурсами и подписками.

Замечание

Во время обучения можно просмотреть метрики и приостановить задание по мере необходимости. Приостановка может быть полезной, если метрики не сходятся или если вы чувствуете, что модель не обучается с нужной скоростью. После приостановки задания обучения развертываемая контрольная точка будет создана после завершения оценки безопасности. Эта контрольная точка доступна для развертывания и использования для вывода или возобновления задания до завершения. Операция приостановки применима только для заданий, которые были обучены по крайней мере на одном шаге и находятся в состоянии выполнения .

Разверните точно настроенную модель

Когда вы удовлетворены метриками из задания тонкой настройки, вы можете развернуть модель, нажав на кнопку "Развернуть" в правом верхнем углу страницы деталей и настроив параметры развертывания.

Дополнительные сведения см. в руководстве по подробному развертыванию .

Использовать развернутую модель, настроенную с высокой точностью

После развертывания настроенной модели ее можно использовать как любую другую развернутую модель. Вы можете использовать детскую площадку в Foundry для экспериментов с новым развертыванием. Вы также можете использовать REST API для вызова вашей точно настроенной модели из собственного приложения. Вы уже можете приступить к использованию этой новой точно настроенной модели в потоке запросов для построения генеративного приложения ИИ.

Замечание

Для моделей чата системное сообщение, которое вы используете для управления точно настроенной моделью (развернутой или доступной для тестирования на детской площадке), должно совпадать с системным сообщением, которое вы использовали для обучения. Если вы используете другое системное сообщение, модель может не выполняться должным образом.

Непрерывная настройка

После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.

Для точной настройки модели, которую вы ранее настроили, вы будете использовать тот же процесс, что и при создании точно настроенной модели, но вместо указания имени универсальной базовой модели можно указать уже настраиваемую модель. Настроенная модель будет выглядеть следующим образом gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft.

Очистка ресурсов

Когда вы закончите работу с тонко настроенной моделью, вы можете удалить её развертывание и саму модель. При необходимости вы также можете удалить файлы обучения и проверки, отправленные в службу.

Удаление точно настроенного развертывания модели

Это важно

После развертывания настраиваемой модели, если в любое время развертывание остается неактивным в течение более чем пятнадцати дней (15) развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более 15 дней назад, и в течение непрерывного 15-дневного периода не выполнялись вызовы завершений задач или завершений чата.

Удаление неактивного развертывания не влияет на базовую настраиваемую модель, а настраиваемую модель можно повторно развернуть в любое время. Как описано в Azure OpenAI в Microsoft Foundry Models pricing, каждая настраиваемая (специализированная) модель, развертываемая модель несет за собой почасовую стоимость размещения, независимо от того, выполняются ли к модели вызовы на завершение или завершение чата. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в руководстве по управлению затратами на Azure OpenAI.

Вы можете удалить развертывание для вашей точно настроенной модели на странице "Создание моделей>" на портале Foundry.

Удалите модель с тонкой настройкой

Вы можете удалить настраиваемую модель на странице тонкой настройки на портале Foundry. Выберите настраиваемую модель, чтобы удалить, а затем выберите "Удалить ", чтобы удалить настроенную модель.

Замечание

Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Прежде чем удалить настроенную модель, необходимо сначала удалить развертывание модели.

Предпосылки

Поддерживаемые модели

Ознакомьтесь со страницей моделей, чтобы проверить, какие регионы в настоящее время поддерживают точную настройку.

Или вы можете точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}.

Просмотр рабочего процесса пакета SDK для Python

Ознакомьтесь с рабочим процессом точной настройки пакета SDK для Python с Azure OpenAI:

  1. Подготовьте данные обучения и проверки.
  2. Выберите базовую модель.
  3. Отправьте данные обучения.
  4. Обучите новую кастомизированную модель.
  5. Проверьте состояние настраиваемой модели.
  6. Разверните настраиваемую модель для использования.
  7. Используйте настраиваемую модель.
  8. Опционально проведите анализ вашей настраиваемой модели на производительность и соответствие.

Подготовьте данные для обучения и проверки

Обучающие данные и наборы данных проверки состоят из входных и выходных примеров того, как модель должна выполняться.

Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL) и должны быть отформатированы в формате беседы, который используется API завершения чата .

Если вы хотите пошаговое руководство по настройке точной настройкиgpt-4o-mini-2024-07-18, ознакомьтесь с руководством по настройке Azure OpenAI.

Пример формата файла

{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}

Формат файла многократного чата

Кроме того, поддерживается несколько поворотов беседы в одной строке файла обучения jsonl. Чтобы пропустить тонкую настройку для определенных сообщений помощника, добавьте пару необязательных weight значений ключа. weight В настоящее время можно задать значение 0 или 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Завершение чата с помощью визуального зрения

{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}

Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.

Создание наборов данных для обучения и проверки

Чем больше примеров обучения у вас есть, тем лучше. Задания тонкой настройки не будут продолжаться без по крайней мере 10 примеров обучения, но такое небольшое число недостаточно, чтобы заметно повлиять на ответы модели. Рекомендуется предоставить сотни, если не тысячи, примеры обучения, которые будут успешными.

Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучите модель на большом объеме внутренних данных, без предварительной очистки набора данных для самых качественных примеров, вы можете в конечном итоге получить модель, которая работает гораздо хуже, чем ожидалось.

Отправка обучающих данных

Следующим шагом является выбор существующих подготовленных обучающих данных или отправка новых подготовленных обучающих данных для использования при настройке модели. После подготовки обучающих данных вы можете передать файлы в службу. Существует два способа отправки обучающих данных:

Для больших файлов данных рекомендуется импортировать из хранилища BLOB-объектов Azure. Большие файлы могут работать нестабильно при отправке через многокомпонентные формы, так как запросы являются атомарными, и их невозможно повторить или возобновить. Дополнительные сведения о хранилище BLOB-объектов Azure см. в статье "Что такое хранилище BLOB-объектов Azure"?

Замечание

Обучающие файлы данных должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.

В следующем примере Python отправляются локальные файлы обучения и проверки с помощью пакета SDK для Python и извлекаются идентификаторы возвращенных файлов.

import os
from openai import OpenAI

# Load the OpenAI client
client = OpenAI(
  api_key = os.getenv("AZURE_OPENAI_API_KEY"),  
  base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
)

# Upload the training and validation dataset files to Microsoft Foundry with the SDK.
training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'

training_response = client.files.create(file=open(training_file_name, "rb"), purpose="fine-tune")
validation_response = client.files.create(file=open(validation_file_name, "rb"), purpose="fine-tune")
training_file_id = training_response.id
validation_file_id = validation_response.id

print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)

Создание настраиваемой модели

После загрузки файлов для обучения и проверки вы можете начать процесс тонкой настройки.

В следующем примере кода на Python показано, как создать новую задачу настройки с помощью Python SDK.

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-4.1-2025-04-14", # Enter base model name.
    suffix="my-model", # Custom suffix for naming the resulting model. Note that in Microsoft Foundry the model cannot contain dot/period characters.
    seed=105, # Seed parameter controls reproducibility of the fine-tuning job. If no seed is specified one will be generated automatically.
    extra_body={ "trainingType": "GlobalStandard" } # Change this to your preferred training type. Other options are `Standard` and `Developer`.
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print(response.model_dump_json(indent=2))

Замечание

Мы рекомендуем использовать глобальный уровень "Стандартный" для типа обучения, так как он обеспечивает экономию затрат и использует глобальную емкость для ускорения очередей. Однако он копирует данные и весовые значения за пределами текущего региона ресурсов. Если размещение данных является обязательным требованием, используйте модель , которая поддерживает обучение уровня "Стандартный".

Кроме того, можно передать дополнительные необязательные параметры, такие как гиперпараметры, чтобы получить более широкий контроль над процессом тонкой настройки. Для начального обучения рекомендуется использовать автоматические значения по умолчанию, которые присутствуют без указания этих параметров.

Текущие поддерживаемые гиперпараметры для контролируемой точной настройки:

Имя Тип Описание
batch_size целое число Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию, а также максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией.
learning_rate_multiplier число/номер Множитель скорости обучения, используемый для тренировки. Скорость обучения точной настройки — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0,02 до 0,2, чтобы увидеть, что дает лучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переобучения.
n_epochs целое число Количество эпох, на которое следует обучать модель. Под эпохой понимается один полный цикл обработки набора данных для обучения.
seed целое число Сид определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если семя не указано, оно будет сгенерировано для вас.

Чтобы задать пользовательские гиперпараметры в версии 1.x OpenAI Python API, предоставьте их в составе method:

client.fine_tuning.jobs.create(
  training_file="file-abc123", 
  model="gpt-4.1-2025-04-14",
  suffix="my-model",
  seed=105,
  method={
    "type": "supervised", # In this case, the job will be using Supervised Fine Tuning.
    "supervised": {
      "hyperparameters": {
        "n_epochs": 2
      }
    }
  },
  extra_body={ "trainingType": "GlobalStandard" }
)

Замечание

Дополнительные сведения о поддерживаемых гиперпараметрах см. в руководствах по оптимизации непосредственных предпочтений и тонкой настройке с подкреплением.

Проверьте статус задания по точной настройке

response = client.fine_tuning.jobs.retrieve(job_id)

print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))

Список событий настройки параметров

Чтобы изучить отдельные события тонкой настройки, которые были созданы во время обучения, вам может понадобиться обновить клиентскую библиотеку OpenAI до последней версии. После этого можно выполнить эту команду с помощью pip install openai --upgrade.

response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))

Контрольные точки

При завершении каждой эпохи обучения создается контрольная точка. Контрольная точка — это полностью функциональная версия модели, которую можно развернуть и использовать в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переобучения. Когда задание точной настройки завершится, у вас будут три последние версии модели, доступные для развертывания. Последняя эпоха будет представлена вашей тонкой моделью, предыдущие две эпохи будут доступны в качестве контрольных точек.

Чтобы получить список контрольных точек, связанных с конкретным заданием точной настройки, можно выполнить команду list checkpoints. Для выполнения этой команды может потребоваться обновить клиентную библиотеку OpenAI до последней версии pip install openai --upgrade .

response = client.fine_tuning.jobs.checkpoints.list(job_id)
print(response.model_dump_json(indent=2))

Анализ настраиваемой модели

Azure OpenAI присоединяет файл результатов с именем results.csv к каждому заданию точной настройки после завершения. Вы можете использовать файл результатов для анализа производительности обучения и проверки настраиваемой модели. Идентификатор файла результата указан для каждой настраиваемой модели, и вы можете использовать пакет SDK Для Python для получения идентификатора файла и скачивания файла результатов для анализа.

В следующем примере Python извлекается идентификатор файла первого файла результатов, присоединенного к заданию тонкой настройки для настраиваемой модели, а затем используется пакет SDK Python для скачивания файла в текущий рабочий каталог для анализа.

# Retrieve the file ID of the first result file from the fine-tuning job
# for the customized model.
response = client.fine_tuning.jobs.retrieve(job_id)
if response.status == 'succeeded':
    result_file_id = response.result_files[0]

retrieve = client.files.retrieve(result_file_id)

# Download the result file.
print(f'Downloading result file: {result_file_id}')

with open(retrieve.filename, "wb") as file:
    result = client.files.content(result_file_id).read()
    file.write(result)

Результатом будет CSV-файл, содержащий строку заголовка и строку для каждого шага обучения, выполняемого в процессе тонкой настройки. Результирующий файл содержит следующие столбцы:

Имя столбца Описание
step Количество шага обучения. Шаг обучения представляет собой один проход вперед и назад в пакете обучающих данных.
train_loss Потеря для обучаемого пакета.
train_mean_token_accuracy Процент токенов в пакете обучения, правильно предсказанных моделью.
Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]].
valid_loss Потеря пакета проверки.
validation_mean_token_accuracy Процент токенов в пакете проверки, которые модель правильно предсказала.
Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]].
full_valid_loss Потеря проверки, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, потеря должна уменьшиться.
full_valid_mean_token_accuracy Действительная средняя точность токена, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, точность токенов должна увеличиваться.

Вы также можете просмотреть данные в файле results.csv как графики на портале Microsoft Foundry. Выберите ссылку для обученной модели, и вы увидите три диаграммы: ошибка, средняя точность токена и точность токена. Если вы предоставили данные проверки, оба набора данных будут отображаться на одном графике.

Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если вы видите расхождение между данными обучения и валидации, это может указывать на то, что вы переобучаетесь. Попробуйте обучение с меньшим количеством эпох или меньшим коэффициентом скорости обучения.

Разверните точно настроенную модель

Когда вы удовлетворены метриками из задания тонкой настройки или просто хотите перейти к предсказанию, необходимо развернуть модель.

Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среде разработчика.

В отличие от предыдущих команд ПАКЕТА SDK, развертывание должно выполняться с помощью API уровня управления, который требует отдельной авторизации, другого пути API и другой версии API.

переменная Определение
токен Существует несколько способов создания токена авторизации. Самый простой способ начального тестирования — запустить Cloud Shell на портале Azure. Затем выполните az account get-access-token. Этот маркер можно использовать в качестве временного маркера авторизации для тестирования API. Мы рекомендуем сохранить это в новой переменной окружения.
подписка Идентификатор подписки для связанного ресурса Azure OpenAI.
ресурсная группа Имя группы ресурсов для ресурса Azure OpenAI.
имя_ресурса Название ресурса Azure OpenAI.
имя_развертывания_модели Настраиваемое имя для нового точно настроенного развертывания модели. Это имя будет использоваться в вашем коде при совершении вызовов завершения чата.
тонко настроенная модель Извлеките это значение из результатов задания по точной настройке на предыдущем шаге. Оно выглядит так: gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Вам нужно добавить это значение в deploy_data json. В качестве альтернативы вы также можете развернуть контрольную точку, передав ID контрольной точки, который будет отображаться в формате ftchkpt-e559c011ecc04fc68eaa339d8227d02d
import json
import os
import requests

token= os.getenv("<TOKEN>") 
subscription = "<YOUR_SUBSCRIPTION_ID>"  
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name ="gpt-41-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2024-10-01"} # control plane API version rather than dataplane API for this call 
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}

deploy_data = {
    "sku": {"name": "standard", "capacity": 1}, 
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": <"fine_tuned_model">, #retrieve this value from the previous call, it will look like gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83
            "version": "1"
        }
    }
}
deploy_data = json.dumps(deploy_data)

request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'

print('Creating a new deployment...')

r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)

print(r)
print(r.reason)
print(r.json())

Дополнительные сведения о развертывании между регионами и использовании развернутой модели см. здесь.

Если вы готовы к развертыванию в промышленной среде или у вас есть особые требования к размещению данных, следуйте нашему руководству по развертыванию.

Непрерывная настройка

После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.

Для точной настройки модели, которую вы ранее настроили, вы будете использовать тот же процесс, что и при создании настраиваемой модели , но вместо указания имени универсальной базовой модели можно указать идентификатор уже точно настроенной модели. Идентификатор точно настроенной модели выглядит следующим образом. gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7"
)
job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

Мы также рекомендуем включить suffix параметр, чтобы упростить различие между различными итерациями вашей точно настроенной модели. suffix принимает строку и используется для идентификации модели с тонкой настройкой. С помощью API Python OpenAI поддерживается строка до 18 символов, которые будут добавлены в имя настраиваемой модели.

Если вы не уверены в идентификаторе существующей точно настроенной модели, эти сведения можно найти на странице моделей Microsoft Foundry или создать список моделей для определенного ресурса Azure OpenAI с помощью REST API.

Очистка развертываний, настраиваемых моделей и файлов обучения

После завершения работы с настроенной моделью можно удалить развертывание и модель. При необходимости вы также можете удалить файлы обучения и проверки, отправленные в службу.

Удалите развертывание вашей модели

Это важно

После развертывания настраиваемой модели, если в любое время развертывание остается неактивным в течение более чем пятнадцати дней (15) развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более 15 дней назад, и в течение непрерывного 15-дневного периода не выполнялись вызовы завершений задач или завершений чата.

Удаление неактивного развертывания не влияет на базовую настраиваемую модель, а настраиваемую модель можно повторно развернуть в любое время. Как описано в Azure OpenAI в Microsoft Foundry Models pricing, каждая настраиваемая (специализированная) модель, развертываемая модель несет за собой почасовую стоимость размещения, независимо от того, выполняются ли к модели вызовы на завершение или завершение чата. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в руководстве по управлению затратами на Azure OpenAI.

Вы можете использовать различные методы для удаления развертывания вашей настраиваемой модели.

Удаление настраиваемой модели

Аналогичным образом можно использовать различные методы для удаления настраиваемой модели:

Замечание

Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Сначала необходимо удалить развертывание модели, прежде чем удалить настраиваемую модель.

Удаление обучающих файлов

Кроме того, вы можете удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, из подписки Azure OpenAI. Для удаления обучающих, проверки и результирующих файлов можно использовать следующие методы:

В следующем примере Python используется комплект разработки программного обеспечения (SDK) для удаления файлов обучения, проверки и результатов вашей настраиваемой модели.

print('Checking for existing uploaded files.')
results = []

# Get the complete list of uploaded files in our subscription.
files = openai.File.list().data
print(f'Found {len(files)} total uploaded files in the subscription.')

# Enumerate all uploaded files, extracting the file IDs for the
# files with file names that match your training dataset file and
# validation dataset file names.
for item in files:
    if item["filename"] in [training_file_name, validation_file_name, result_file_name]:
        results.append(item["id"])
print(f'Found {len(results)} already uploaded files that match our files')

# Enumerate the file IDs for our files and delete each file.
print(f'Deleting already uploaded files.')
for id in results:
    openai.File.delete(sid = id)

Предпосылки

Поддерживаемые модели

Ознакомьтесь со страницей моделей, чтобы проверить, какие регионы в настоящее время поддерживают точную настройку.

Или можно точно настроить ранее настроенную модель, отформатированную как base-model.ft-{jobid}.

Просмотр рабочего процесса для REST API

Ознакомьтесь с рабочим процессом тонкой настройки для использования REST API и Python с Azure OpenAI.

  1. Подготовьте данные обучения и проверки.
  2. Выберите базовую модель.
  3. Отправьте данные обучения.
  4. Обучите новую кастомизированную модель.
  5. Проверьте состояние настраиваемой модели.
  6. Разверните настраиваемую модель для использования.
  7. Используйте настраиваемую модель.
  8. Опционально проведите анализ вашей настраиваемой модели на производительность и соответствие.

Подготовьте данные для обучения и проверки

Обучающие данные и наборы данных проверки состоят из входных и выходных примеров того, как модель должна выполняться.

Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL) и должны быть отформатированы в формате беседы, который используется API завершения чата .

Если вы хотите пошаговые инструкции gpt-4o-mini-2024-07-18 по настройке, обратитесь к руководству по настройке Azure OpenAI.

Пример формата файла

{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}

Формат файла многократного чата

Кроме того, поддерживается несколько поворотов беседы в одной строке файла обучения jsonl. Чтобы пропустить тонкую настройку для определенных сообщений помощника, добавьте пару необязательных weight значений ключа. weight В настоящее время можно задать значение 0 или 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Завершение чата с помощью визуального зрения

{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}

Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.

Создание наборов данных для обучения и проверки

Чем больше примеров обучения у вас есть, тем лучше. Задания тонкой настройки не будут продолжаться без по крайней мере 10 примеров обучения, но такое небольшое число недостаточно, чтобы заметно повлиять на ответы модели. Рекомендуется предоставить сотни, если не тысячи, примеры обучения, которые будут успешными.

Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучите модель на большом количестве внутренних данных без первого обрезки набора данных только для самых качественных примеров, вы можете в конечном итоге получить модель, которая выполняет гораздо хуже, чем ожидалось.

Отправка обучающих данных

Следующим шагом является выбор существующих подготовленных обучающих данных или отправка новых подготовленных обучающих данных для использования при точной настройке модели. После подготовки обучающих данных вы можете передать файлы в службу. Существует два способа отправки обучающих данных:

Для больших файлов данных рекомендуется импортировать из хранилища BLOB-объектов Azure. Большие файлы могут работать нестабильно при отправке через многокомпонентные формы, так как запросы являются атомарными, и их невозможно повторить или возобновить. Дополнительные сведения о хранилище BLOB-объектов Azure см. в статье "Что такое хранилище BLOB-объектов Azure"?

Замечание

Обучающие файлы данных должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.

Отправка обучающих данных

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/files \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\training_set.jsonl;type=application/json"

Отправка данных проверки

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/files \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\validation_set.jsonl;type=application/json"

Создание настраиваемой модели

После загрузки обучающих и проверочных файлов вы готовы начать процесс точной настройки. В следующем коде показано, как создать новое задание точной настройки с помощью REST API.

В этом примере мы также передаём начальный параметр. Сид определяет воспроизводимость задания. Передача начальных параметров семян и заданий должна приводить к одинаковым результатам, но может в редких случаях дать разные результаты. Если начальное значение не указано, он будет создан для вас.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4.1-2025-04-14",
    "training_file": "<TRAINING_FILE_ID>",
    "validation_file": "<VALIDATION_FILE_ID>",
    "seed": 105
}'

Если вы настраиваете модель, которая поддерживает Global Training, можно указать тип обучения с помощью extra_body именованного аргумента и используя api-version 2025-04-01-preview:

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2025-04-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4.1-2025-04-14",
    "training_file": "<TRAINING_FILE_ID>",
    "validation_file": "<VALIDATION_FILE_ID>",
    "seed": 105,
    "trainingType": "globalstandard"
}'

Кроме того, можно передать дополнительные необязательные параметры, такие как гиперпараметры , чтобы получить более широкий контроль над процессом тонкой настройки. Для начального обучения рекомендуется использовать автоматические значения по умолчанию, которые присутствуют без указания этих параметров.

Текущие поддерживаемые гиперпараметры для контролируемой точной настройки:

Имя Тип Описание
batch_size целое число Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию, а также максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией.
learning_rate_multiplier число/номер Множитель скорости обучения, используемый для тренировки. Скорость обучения точной настройки — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0,02 до 0,2, чтобы увидеть, что дает лучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переобучения.
n_epochs целое число Количество эпох, на которое следует обучать модель. Под эпохой понимается один полный цикл обработки набора данных для обучения.
seed целое число Сид определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если семя не указано, оно будет сгенерировано для вас.

Замечание

Дополнительные сведения о поддерживаемых гиперпараметрах см. в руководствах по оптимизации непосредственных предпочтений и тонкой настройке с подкреплением.

Проверка состояния настраиваемой модели

После запуска задания точной настройки может потребоваться некоторое время. Ваша задача может стоять в очереди за другими задачами в системе. Обучение модели может занять несколько минут или часов в зависимости от размера модели и набора данных. В следующем примере REST API используется для проверки состояния задания по финальной настройке. В примере извлекаются сведения о задании с помощью идентификатора задания, возвращаемого из предыдущего примера:

curl -X GET $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/<YOUR-JOB-ID> \
  -H "api-key: $AZURE_OPENAI_API_KEY"

Остановка и возобновление

Во время обучения можно просмотреть журналы и метрики и приостановить задание по мере необходимости. Приостановка может быть полезной, если метрики не конвергентно или если вы чувствуете, что модель не учится в правильном темпе. После приостановки задания обучения развертываемая контрольная точка будет создана после завершения проверки безопасности. Эта контрольная точка доступна для развертывания и использования для вывода или возобновления задания до завершения. Операция приостановки применима только для заданий, которые были обучены по крайней мере на одном шаге и находятся в состоянии выполнения .

Пауза

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/pause \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Резюме

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/resume \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Список событий настройки параметров

Чтобы проверить отдельные события тонкой настройки, созданные во время обучения, выполните следующие действия.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/events \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Копирование модели (предварительная версия)

Теперь можно скопировать настраиваемую модель контрольных точек из одного региона в другой, в разных подписках, но в одном клиенте. Этот процесс использует выделенные API для обеспечения эффективной и безопасной передачи. Эта функция в настоящее время доступна только с помощью API, а не через портал Foundry. После копирования модели из региона А в регион B можно постоянно настраивать модель в регионе B и развертывать модель из этого расположения.

Замечание

Удаление контрольной точки модели в исходном регионе не приведет к удалению модели в целевом регионе. Чтобы удалить модель в обоих регионах после его копирования, модель должна быть удалена отдельно в каждом регионе.

Предварительные требования

  • Целевой ресурс или учетная запись должны иметь по крайней мере одно задание точной настройки.
  • Целевой ресурс или учетная запись не должны отключать доступ к общедоступной сети. (По крайней мере при отправке запроса на копирование).
  • Вы можете скопировать только в целевую учетную запись, если учетная запись, инициирующая копию, имеет достаточные разрешения для доступа к целевой учетной записи.

Конфигурация разрешений

  1. Создайте управляемое удостоверение, назначаемое пользователем.
  2. Предоставьте роли участника OpenAI Cognitive Services управляемому удостоверению, назначаемому пользователем, в целевом ресурсе или учетной записи.
  3. Назначьте управляемое удостоверение, назначаемое пользователем, учетной записи исходного ресурса.

Копирование модели

curl --request POST \
  --url 'https://<aoai-resource>.openai.azure.com/openai/v1/fine_tuning/jobs/<ftjob>/checkpoints/<checkpoint-name>/copy' \
  --header 'Content-Type: application/json' \
  --header 'api-key: <api-key>' \
  --header 'aoai-copy-ft-checkpoints: preview' \
  --data '{
  "destinationResourceId": "<resourceId>",
  "region": "<region>"
}'

Так как это длительная операция, проверьте состояние копии точно настроенной модели, указав идентификатор контрольной точки исходной учетной записи, используемой в вызове POST.

Проверка состояния копирования

curl --request GET \
  --url 'https://<aoai-resource>.openai.azure.com//openai/v1/fine_tuning/jobs/<ftjob>/checkpoints/<checkpoint-name>/copy' \
  --header 'Content-Type: application/json' \
  --header 'api-key: <api-key>' \
  --header 'aoai-copy-ft-checkpoints: preview' 

Замечание

При копировании контрольной точки из исходной учетной записи имя контрольной точки сохраняется в целевой учетной записи. Убедитесь, что вы используете это точное имя для точной настройки, развертывания или для любой другой операции в целевой учетной записи. Эта контрольная точка не отображается в пользовательском интерфейсе list checkpoints или в API.

Контрольные точки

При завершении каждой эпохи обучения создается контрольная точка. Контрольная точка — это полностью функциональная версия модели, которую можно развернуть и использовать в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переобучения. Когда задание точной настройки завершится, у вас будут три последние версии модели, доступные для развертывания. Последняя эпоха будет представлена вашей тонкой моделью, предыдущие две эпохи будут доступны в качестве контрольных точек.

Чтобы получить список контрольных точек, связанных с отдельным заданием на тонкую настройку, можно выполнить команду списка контрольных точек.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Анализ настраиваемой модели

Azure OpenAI присоединяет файл результатов с именем results.csv к каждому заданию точной настройки после завершения. Вы можете использовать файл результатов для анализа производительности обучения и проверки настраиваемой модели. Идентификатор файла для результирующих файлов указан для каждой настраиваемой модели, и вы можете использовать REST API для получения идентификатора файла и скачивания файла результатов для анализа.

В следующем примере Python используется REST API для получения идентификатора файла первого файла результатов, присоединенного к заданию точной настройки для настраиваемой модели, а затем загружает файл в рабочий каталог для анализа.

curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/<JOB_ID>" \
  -H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/v1/files/<RESULT_FILE_ID>/content" \
    -H "api-key: $AZURE_OPENAI_API_KEY" > <RESULT_FILENAME>

Результатом будет CSV-файл, содержащий строку заголовка и строку для каждого шага обучения, выполняемого в процессе тонкой настройки. Результирующий файл содержит следующие столбцы:

Имя столбца Описание
step Количество шага обучения. Шаг обучения представляет собой один проход вперед и назад в пакете обучающих данных.
train_loss Потеря для обучаемого пакета.
train_mean_token_accuracy Процент токенов в пакете обучения, правильно предсказанных моделью.
Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]].
valid_loss Потеря пакета проверки.
validation_mean_token_accuracy Процент токенов в пакете проверки, которые модель правильно предсказала.
Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]].
full_valid_loss Потеря проверки, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, потеря должна уменьшиться.
full_valid_mean_token_accuracy Действительная средняя точность токена, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, точность токенов должна увеличиваться.

Вы также можете просмотреть данные в файле results.csv как графики на портале Foundry. Выберите ссылку для обученной модели, и вы увидите три диаграммы: ошибка, средняя точность токена и точность токена. Если вы предоставили данные проверки, оба набора данных будут отображаться на одном графике.

Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если вы видите расхождение между данными обучения и валидации, это может указывать на то, что вы переобучаетесь. Попробуйте обучение с меньшим количеством эпох или меньшим коэффициентом скорости обучения.

Разверните точно настроенную модель

Когда вы удовлетворены метриками из задания тонкой настройки или просто хотите перейти к предсказанию, необходимо развернуть модель.

Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среде разработчика.

Если вы готовы к развертыванию в промышленной среде или у вас есть особые требования к размещению данных, следуйте нашему руководству по развертыванию.

переменная Определение
токен Существует несколько способов создания токена авторизации. Самый простой способ начального тестирования — запустить Cloud Shell на портале Azure. Затем выполните az account get-access-token. Этот маркер можно использовать в качестве временного маркера авторизации для тестирования API. Мы рекомендуем сохранить это в новой переменной окружения.
подписка Идентификатор подписки для связанного ресурса Azure OpenAI.
ресурсная группа Имя группы ресурсов для ресурса Azure OpenAI.
имя_ресурса Название ресурса Azure OpenAI.
имя_развертывания_модели Настраиваемое имя для нового точно настроенного развертывания модели. Это имя будет использоваться в вашем коде при совершении вызовов завершения чата.
тонко настроенная модель Извлеките это значение из результатов задания по точной настройке на предыдущем шаге. Оно выглядит так: gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Необходимо добавить это значение в json deploy_data. В качестве альтернативы вы также можете развернуть контрольную точку, передав ID контрольной точки, который будет отображаться в формате ftchkpt-e559c011ecc04fc68eaa339d8227d02d
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>?api-version=2024-10-21" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "sku": {"name": "standard", "capacity": 1},
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": "<FINE_TUNED_MODEL>",
            "version": "1"
        }
    }
}'

Дополнительные сведения о развертывании между регионами и использовании развернутой модели см. здесь.

Непрерывная настройка

После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.

Для точной настройки модели, которую вы ранее настроили, можно использовать тот же процесс, что и при создании настраиваемой модели , но вместо указания имени универсальной базовой модели можно указать идентификатор уже точно настроенной модели. Идентификатор точно настроенной модели выглядит следующим образом. gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7",
    "training_file": "<TRAINING_FILE_ID>",
    "validation_file": "<VALIDATION_FILE_ID>",
    "suffix": "<additional text used to help identify fine-tuned models>"
}'

Мы также рекомендуем включить suffix параметр, чтобы упростить различие между различными итерациями вашей точно настроенной модели. suffix принимает строку и используется для идентификации модели с тонкой настройкой. Суффикс может содержать до 40 символов (a-z, A-Z, 0-9 и _), которые будут добавлены в имя вашей точной модели.

Если вы не уверены в идентификаторе вашей точно настроенной модели, эти сведения можно найти на странице "Модели " в Foundry или создать список моделей для определенного ресурса Azure OpenAI с помощью REST API.

Очистка развертываний, настраиваемых моделей и файлов обучения

После завершения работы с настроенной моделью можно удалить развертывание и модель. При необходимости вы также можете удалить файлы обучения и проверки, отправленные в службу.

Удалите развертывание вашей модели

Вы можете использовать различные методы для удаления развертывания вашей настраиваемой модели.

Удаление настраиваемой модели

Аналогичным образом можно использовать различные методы для удаления настраиваемой модели:

Замечание

Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Сначала необходимо удалить развертывание модели, прежде чем удалить настраиваемую модель.

Удаление обучающих файлов

Кроме того, вы можете удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, из подписки Azure OpenAI. Для удаления обучающих, проверки и результирующих файлов можно использовать следующие методы:

На портале Microsoft Foundry есть два уникальных способа настройки.

Если вы настраиваете только модели Azure OpenAI, мы рекомендуем использовать персонализированную настройку Azure OpenAI, которая доступна путем перехода к https://ai.azure.com/resource/overview.

Это важно

Элементы, обозначенные в этой статье как (предварительная версия), сейчас предлагаются в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Для получения дополнительной информации см. Дополнительные условия использования для предварительных версий Microsoft Azure.

Предпосылки

Поддерживаемые модели

Ознакомьтесь со страницей моделей, чтобы проверить, какие регионы в настоящее время поддерживают точную настройку.

Или можно точно настроить ранее настроенную модель, отформатированную как base-model.ft-{jobid}.

Просмотр рабочего процесса на портале Foundry

Просмотрите рабочий процесс тонкой настройки для использования портала Foundry:

  1. Подготовьте данные обучения и проверки.
  2. Используйте диалоговое окно "Создание точно настроенной модели" на портале Foundry для обучения пользовательской модели.
    1. Выберите метод обучения.
    2. Выберите базовую модель.
    3. Выбор типа обучения
    4. Выберите данные обучения.
    5. При необходимости выберите данные проверки.
    6. При необходимости настройте параметры задачи для задачи тонкой настройки.
    7. При необходимости включите автоматическое развертывание для результирующей пользовательской модели.
    8. Пересмотрите свои варианты и обучите новую пользовательскую модель.
  3. Проверьте состояние вашей настраиваемой модели.
  4. Разверните настраиваемую модель для использования.
  5. Используйте настраиваемую модель.
  6. При необходимости проанализируйте настраиваемую модель для повышения производительности и соответствия.

Подготовьте данные для обучения и проверки

Обучающие данные и наборы данных проверки состоят из входных и выходных примеров того, как модель должна выполняться.

Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL) и должны быть отформатированы в формате беседы, который используется API завершения чата .

Обычно рекомендуется использовать инструкции и подсказки, которые, по вашему мнению, работали лучше всего в каждом тренировочном примере. Это поможет вам получить лучшие результаты, особенно если у вас меньше сотни примеров.

Пример формата файла

{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}

Многоэтапный формат файла чата Azure OpenAI

Кроме того, поддерживается несколько поворотов беседы в одной строке файла обучения jsonl. Чтобы пропустить тонкую настройку для определенных сообщений помощника, добавьте пару необязательных weight значений ключа. weight В настоящее время можно задать значение 0 или 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Завершение чата с помощью визуального зрения

{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}

Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.

Рекомендации по размеру наборов данных

Чем больше примеров обучения у вас есть, тем лучше. Задания точной настройки не будут продолжаться без по крайней мере 10 примеров обучения, но такого небольшого числа недостаточно, чтобы заметно повлиять на ответы модели. Рекомендуется предоставить сотни, если не тысячи, примеры обучения, которые будут успешными. Рекомендуется начать с 50 хорошо созданных обучающих данных.

Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучите модель на большом объеме внутренних данных, без предварительной очистки набора данных для самых качественных примеров, вы можете в конечном итоге получить модель, которая работает гораздо хуже, чем ожидалось.

Создание точно настроенной модели

Портал Foundry предоставляет диалоговое окно "Создание точно настроенной модели" , поэтому в одном месте можно легко создать и обучить настраиваемую модель для ресурса Azure.

  1. Перейдите на портал https://ai.azure.com/ Foundry и войдите с учетными данными, имеющими доступ к ресурсу Azure OpenAI. Во время рабочего процесса входа выберите соответствующий каталог, подписку Azure и ресурс Azure OpenAI.

  2. На портале Foundry перейдите на > панель "Средства тонкой настройки" и выберите модель точной настройки.

    Снимок экрана, на котором показано, как получить доступ к мастеру создания пользовательской модели на портале Foundry.

  3. Выберите модель для точной настройки и нажмите кнопку "Далее ".

    Снимок экрана: диалоговое окно выбора модели на портале Foundry.

Теперь вы увидите диалоговое окно "Создание точно настроенной модели".

Снимок экрана: диалоговое окно

Выбор метода обучения

Первым шагом является подтверждение выбора модели и метода обучения. Не все модели поддерживают все методы обучения.

  • Контролируемая тонкая настройка (SFT): поддерживается всеми моделями, не использующими рассуждение.
  • Прямая оптимизация предпочтений (предварительная версия) (DPO): поддерживается GPT-4o.
  • Тонкая настройка с подкреплением (предварительная версия) (RFT): поддерживается рациональными моделями, например o4-mini.

При выборе модели можно также выбрать ранее настроенную модель.

Выбрать тип обучения

Foundry предлагает три уровня обучения, предназначенные для удовлетворения различных потребностей клиентов:

Уровень обучения "Стандартный"

Предоставляет выделенную емкость для точной настройки с прогнозируемой производительностью и соглашениями об уровне обслуживания. Идеально подходит для рабочих нагрузок, требующих гарантированной пропускной способности.

Глобальный стандартный уровень обучения

Расширяя доступность настройки моделей, Global Training предлагает более доступные цены на другие глобальные предложения. Не предлагает размещение данных. Если вам требуется расположение данных, ознакомьтесь с регионами, указанными в разделе доступность модели для вашей выбранной модели.

Данные обучения и результирующий вес модели могут быть скопированы в другой регион Azure.

  • Обучить последние модели OpenAI из более чем десятка регионов Azure OpenAI.
  • Воспользуйтесь преимуществами более низких тарифов за обучение на один токен по сравнению с уровнем "Стандарт".

Уровень обучения разработчика

Экономически эффективный вариант, использующий незадействованные мощности для несрочных или исследовательских рабочих нагрузок.
Задания на этом уровне могут быть прерваны и возобновлены позже, что делает его идеальным для экспериментов и вариантов использования с учетом затрат.

Выбор обучающих данных

Следующий шаг — выбрать существующие подготовленные данные обучения или отправить новые подготовленные обучающие данные для использования при настройке модели, нажав кнопку "Добавить обучающие данные".

В диалоговом окне "Обучающие данные " отображаются все существующие ранее загруженные наборы данных, а также предоставляются параметры для отправки новых обучающих данных.

Снимок экрана: панель данных обучения для мастера создания пользовательской модели на портале Foundry.

  • Если данные обучения уже отправлены в службу, выберите "Файлы" из ресурса Подключенного искусственного интеллекта.

    • Выберите файл из раскрывающегося списка.
  • Чтобы отправить новые обучающие данные, используйте один из следующих вариантов:

    • Выберите " Отправить файлы " для отправки обучающих данных из локального файла.
    • Выберите Azure Blob или другие общие веб-расположения, чтобы импортировать данные обучения из Azure Blob или другого общего веб-расположения.

Для больших файлов данных рекомендуется импортировать из хранилища BLOB-объектов Azure. Большие файлы могут работать нестабильно при отправке через многокомпонентные формы, так как запросы являются атомарными, и их невозможно повторить или возобновить. Дополнительные сведения о Хранилище BLOB-объектов Azure см. в разделе "Что такое Хранилище BLOB-объектов Azure?".

Замечание

Обучающие файлы данных должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.

Выберите данные проверки (необязательно)

Если у вас есть набор данных проверки, выберите "Добавить обучающие данные". Вы можете выбрать существующие подготовленные данные проверки или отправить новые подготовленные данные проверки для использования при настройке модели.

В диалоговом окне "Данные проверки " отображаются существующие ранее загруженные наборы данных для обучения и проверки и предоставляются параметры, с помощью которых можно отправить новые данные проверки.

Снимок экрана: панель данных проверки для мастера создания пользовательской модели на портале Foundry.

  • Если данные проверки уже отправлены в службу, выберите " Выбрать набор данных".

    • Выберите файл из списка, показанного в области проверки данных.
  • Чтобы отправить новые данные проверки, используйте один из следующих вариантов:

    • Выберите локальный файл для отправки данных проверки из локального файла.
    • Выберите хранилище BLOB Azure или другие общие веб-расположения, чтобы импортировать данные проверки из хранилища BLOB Azure или другого общего веб-расположения.

Для больших файлов данных рекомендуется импортировать из хранилища BLOB-объектов Azure. Большие файлы могут работать нестабильно при отправке через многокомпонентные формы, так как запросы являются атомарными, и их невозможно повторить или возобновить.

Замечание

Как и для обучающих файлов данных, файлы данных проверки должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.

Сделать модель идентифицируемой (необязательно)

Мы также рекомендуем включить suffix параметр, чтобы упростить различие между различными итерациями вашей точно настроенной модели. suffix принимает строку длиной до 18 символов и используется при именовании модели после её тонкой настройки.

Настройка параметров обучения (необязательно)

Вы можете предоставить дополнительное начальное значение и настроить дополнительные гиперпараметры.

Начальное значение определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если начальное значение не указано, он будет случайным образом создан для вас.

Снимок экрана: раздел параметров мастера создания пользовательской модели на портале Foundry.

Для настройки на портале Foundry доступны следующие гиперпараметры:

Имя Тип Описание
Размер пакета целое число Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию, а также максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией.
Умножение скорости обучения число/номер Множитель скорости обучения, используемый для тренировки. Скорость обучения точной настройки — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0,02 до 0,2, чтобы увидеть, что дает лучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переобучения.
Число эпох целое число Количество эпох, на которое следует обучать модель. Под эпохой понимается один полный цикл обработки набора данных для обучения.

Включение автоматического развертывания (необязательно)

Чтобы сэкономить время, можно включить автоматическое развертывание для результирующей модели. Если обучение завершено успешно, модель будет развернута с помощью выбранного типа развертывания. Развертывание будет названо на основе уникального имени, созданного для пользовательской модели, и необязательного суффикса , который вы могли предоставить ранее.

Снимок экрана: переключатель автоматического развертывания в мастере создания пользовательской модели на портале Foundry.

Замечание

В настоящее время для автоматического развертывания поддерживаются только глобальные развертывания уровня "Стандартный" и "Разработчик". Нет ни одного из этих вариантов размещения данных. Дополнительные сведения см. в документации по типу развертывания .

Просмотрите варианты и обучите модель

Просмотрите выбранные варианты и нажмите кнопку "Отправить ", чтобы начать обучение новой точно настроенной модели.

Проверка состояния пользовательской модели

После отправки задания по точной настройке вы увидите страницу со сведениями о вашей точно настроенной модели. Состояние и дополнительные сведения о настраиваемой модели можно найти на странице точной настройки на портале Foundry.

Задание может находиться в очереди за другими заданиями в системе. Обучение модели может занять несколько минут или часов в зависимости от размера модели и набора данных.

Контрольные точки

При завершении каждой эпохи обучения создается контрольная точка. Контрольная точка — это полностью функциональная версия модели, которую можно развернуть и использовать в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переобучения. Когда задание точной настройки завершится, у вас будут три последние версии модели, доступные для развертывания. С помощью REST API можно скопировать контрольные точки между ресурсами и подписками.

Остановка и возобновление

Вы можете отслеживать ход выполнения в обоих представлениях тонкой настройки на портале Foundry. Вы увидите, что ваше задание проходит через те же состояния, что и обычные задания тонкой настройки (в процессе постановки в очередь, в процессе выполнения, выполнено успешно).

Вы также можете просмотреть файлы результатов во время обучения, чтобы получить пик хода выполнения и продолжить обучение должным образом.

Замечание

Во время обучения можно просмотреть журналы и метрики и приостановить задание по мере необходимости. Приостановка может быть полезной, если метрики не конвергентно или если вы чувствуете, что модель не учится в правильном темпе. После приостановки задания обучения развертываемая контрольная точка будет создана после завершения проверки безопасности. Эта контрольная точка доступна для развертывания и использования для вывода или возобновления задания до завершения. Операция приостановки применима только для заданий, которые были обучены по крайней мере на одном шаге и находятся в состоянии выполнения .

Скриншот: тонкая настройка с подкреплением и выполняющейся задачей.

Анализ пользовательской модели

Azure OpenAI присоединяет файл результатов с именем results.csv к каждому заданию тонкой настройки после завершения. Вы можете использовать файл результатов для анализа производительности обучения и проверки пользовательской модели. Идентификатор файла для результата указан для каждой пользовательской модели в столбце Идентификатор файла результата на панели Models портала Foundry. Идентификатор файла можно использовать для идентификации и скачивания файла результатов на панели файлов данных на портале Foundry.

Результатом будет CSV-файл, содержащий строку заголовка и строку для каждого шага обучения, выполняемого в процессе тонкой настройки. Результирующий файл содержит следующие столбцы:

Имя столбца Описание
step Количество шага обучения. Шаг обучения представляет собой один проход вперед и назад в пакете обучающих данных.
train_loss Потеря для обучаемого пакета.
train_mean_token_accuracy Процент токенов в пакете обучения, правильно предсказанных моделью.
Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]].
valid_loss Потеря пакета проверки.
validation_mean_token_accuracy Процент токенов в пакете проверки, которые модель правильно предсказала.
Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]].
full_valid_loss Потеря проверки, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, потеря должна уменьшиться.
full_valid_mean_token_accuracy Действительная средняя точность токена, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, точность токенов должна увеличиваться.

Вы также можете просмотреть данные в файле results.csv как графики на портале Foundry. Выберите ссылку для обученной модели, и вы увидите три диаграммы: ошибка, средняя точность токена и точность токена. Если вы предоставили данные проверки, оба набора данных будут отображаться на одном графике.

Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если вы видите расхождение между данными обучения и валидации, это может указывать на то, что вы переобучаетесь. Попробуйте обучение с меньшим количеством эпох или меньшим коэффициентом скорости обучения.

Разверните точно настроенную модель

После того как вас устраивают метрики по заданию тонкой настройки или если вы хотите перейти к этапу вывода, необходимо развернуть модель.

Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среде разработчика.

Если вы готовы к развертыванию в промышленной среде или у вас есть особые требования к размещению данных, следуйте нашему руководству по развертыванию.

Использовать развернутую модель, настроенную с высокой точностью

После развертывания настроенной модели ее можно использовать как любую другую развернутую модель. Вы можете использовать детскую площадку в Foundry для экспериментов с новым развертыванием. Вы также можете использовать REST API для вызова вашей точно настроенной модели из собственного приложения. Вы уже можете приступить к использованию этой новой точно настроенной модели в потоке запросов для построения генеративного приложения ИИ.

Замечание

Для моделей чата системное сообщение, которое вы используете для управления точно настроенной моделью (развернутой или доступной для тестирования на детской площадке), должно совпадать с системным сообщением, которое вы использовали для обучения. Если вы используете другое системное сообщение, модель может не выполняться должным образом.

Непрерывная настройка

После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.

Для точной настройки модели, которую вы ранее настроили, вы будете использовать тот же процесс, что и при создании точно настроенной модели, но вместо указания имени универсальной базовой модели можно указать уже настраиваемую модель. Пользовательская настроенная модель будет выглядеть так: gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft

Снимок экрана пользовательского интерфейса создания модели с выделенной настроенной моделью.

Очистка развертываний, пользовательских моделей и файлов обучения

После завершения работы с вашей пользовательской моделью вы можете удалить развертывание и саму модель. При необходимости вы также можете удалить файлы обучения и проверки, отправленные в службу.

Удалите развертывание вашей модели

Это важно

После развертывания настраиваемой модели, если в любое время развертывание остается неактивным в течение более чем пятнадцати дней (15) развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более 15 дней назад, и в течение непрерывного 15-дневного периода не выполнялись вызовы завершений задач или завершений чата.

Удаление неактивного развертывания не влияет на базовую настраиваемую модель, а настраиваемую модель можно повторно развернуть в любое время. Как описано в Azure OpenAI в Microsoft Foundry Models pricing, каждая настраиваемая (специализированная) модель, развертываемая модель несет за собой почасовую стоимость размещения, независимо от того, выполняются ли к модели вызовы на завершение или завершение чата. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в руководстве по управлению затратами на Azure OpenAI.

Развертывание вашей настраиваемой модели можно удалить на панели Развертывания на портале Foundry. Выберите развертывание для удаления и нажмите кнопку "Удалить ", чтобы удалить развертывание.

Удалите вашу пользовательскую модель

Вы можете удалить пользовательскую модель на панели «Модели» на портале Foundry. Выберите пользовательскую модель, чтобы удалить ее на вкладке "Настраиваемые модели ", а затем выберите "Удалить ", чтобы удалить пользовательскую модель.

Замечание

Вы не можете удалить пользовательскую модель, если она имеет существующее развертывание. Сначала необходимо удалить развертывание модели, прежде чем можно будет удалить пользовательскую модель.

Удаление обучающих файлов

При необходимости можно удалить файлы обучения и проверки, которые вы загрузили для обучения, а также результативные файлы, созданные во время обучения, на панели Управление>Данные + индексы в портале Foundry. Выберите файл, который нужно удалить, и нажмите кнопку "Удалить ", чтобы удалить файл.

Предпосылки

Поддерживаемые модели

Ознакомьтесь со страницей моделей, чтобы проверить, какие регионы в настоящее время поддерживают точную настройку.

Или вы можете точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}.

Просмотр рабочего процесса пакета SDK для Python

Ознакомьтесь с рабочим процессом точной настройки пакета SDK для Python с Azure OpenAI:

  1. Подготовьте данные обучения и проверки.
  2. Выберите базовую модель.
  3. Отправьте данные обучения.
  4. Обучите новую кастомизированную модель.
  5. Проверьте состояние настраиваемой модели.
  6. Разверните настраиваемую модель для использования.
  7. Используйте настраиваемую модель.
  8. Опционально проведите анализ вашей настраиваемой модели на производительность и соответствие.

Подготовьте данные для обучения и проверки

Обучающие данные и наборы данных проверки состоят из входных и выходных примеров того, как модель должна выполняться.

Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL) и должны быть отформатированы в формате беседы, который используется API завершения чата .

Если вы хотите пошаговое руководство по настройке точной настройкиgpt-4o-mini-2024-07-18, ознакомьтесь с руководством по настройке Azure OpenAI.

Пример формата файла

{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}

Формат файла многократного чата

Кроме того, поддерживается несколько поворотов беседы в одной строке файла обучения jsonl. Чтобы пропустить тонкую настройку для определенных сообщений помощника, добавьте пару необязательных weight значений ключа. weight В настоящее время можно задать значение 0 или 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Завершение чата с помощью визуального зрения

{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}

Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.

Создание наборов данных для обучения и проверки

Чем больше примеров обучения у вас есть, тем лучше. Задания тонкой настройки не будут продолжаться без по крайней мере 10 примеров обучения, но такое небольшое число недостаточно, чтобы заметно повлиять на ответы модели. Рекомендуется предоставить сотни, если не тысячи, примеры обучения, которые будут успешными.

Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучите модель на большом объеме внутренних данных, без предварительной очистки набора данных для самых качественных примеров, вы можете в конечном итоге получить модель, которая работает гораздо хуже, чем ожидалось.

Отправка обучающих данных

Следующим шагом является выбор существующих подготовленных обучающих данных или отправка новых подготовленных обучающих данных для использования при настройке модели. После подготовки обучающих данных вы можете передать файлы в службу. Существует два способа отправки обучающих данных:

Для больших файлов данных рекомендуется импортировать из хранилища BLOB-объектов Azure. Большие файлы могут работать нестабильно при отправке через многокомпонентные формы, так как запросы являются атомарными, и их невозможно повторить или возобновить. Дополнительные сведения о хранилище BLOB-объектов Azure см. в статье "Что такое хранилище BLOB-объектов Azure"?

Замечание

Обучающие файлы данных должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.

В следующем примере Python отправляются локальные файлы обучения и проверки с помощью пакета SDK для Python и извлекаются идентификаторы возвращенных файлов.

import os
from openai import OpenAI

# Load the OpenAI client
client = OpenAI(
  api_key = os.getenv("AZURE_OPENAI_API_KEY"),  
  base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
)

# Upload the training and validation dataset files to Microsoft Foundry with the SDK.
training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'

training_response = client.files.create(file=open(training_file_name, "rb"), purpose="fine-tune")
validation_response = client.files.create(file=open(validation_file_name, "rb"), purpose="fine-tune")
training_file_id = training_response.id
validation_file_id = validation_response.id

print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)

Создание настраиваемой модели

После загрузки файлов для обучения и проверки вы можете начать процесс тонкой настройки.

В следующем примере кода на Python показано, как создать новую задачу настройки с помощью Python SDK.

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-4.1-2025-04-14", # Enter base model name.
    suffix="my-model", # Custom suffix for naming the resulting model. Note that in Microsoft Foundry the model cannot contain dot/period characters.
    seed=105, # Seed parameter controls reproducibility of the fine-tuning job. If no seed is specified one will be generated automatically.
    extra_body={ "trainingType": "GlobalStandard" } # Change this to your preferred training type. Other options are `Standard` and `Developer`.
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print(response.model_dump_json(indent=2))

Замечание

Мы рекомендуем использовать глобальный уровень "Стандартный" для типа обучения, так как он обеспечивает экономию затрат и использует глобальную емкость для ускорения очередей. Однако он копирует данные и весовые значения за пределами текущего региона ресурсов. Если размещение данных является обязательным требованием, используйте модель , которая поддерживает обучение уровня "Стандартный".

Кроме того, можно передать дополнительные необязательные параметры, такие как гиперпараметры, чтобы получить более широкий контроль над процессом тонкой настройки. Для начального обучения рекомендуется использовать автоматические значения по умолчанию, которые присутствуют без указания этих параметров.

Текущие поддерживаемые гиперпараметры для контролируемой точной настройки:

Имя Тип Описание
batch_size целое число Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию, а также максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией.
learning_rate_multiplier число/номер Множитель скорости обучения, используемый для тренировки. Скорость обучения точной настройки — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0,02 до 0,2, чтобы увидеть, что дает лучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переобучения.
n_epochs целое число Количество эпох, на которое следует обучать модель. Под эпохой понимается один полный цикл обработки набора данных для обучения.
seed целое число Сид определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если семя не указано, оно будет сгенерировано для вас.

Чтобы задать пользовательские гиперпараметры в версии 1.x OpenAI Python API, предоставьте их в составе method:

client.fine_tuning.jobs.create(
  training_file="file-abc123", 
  model="gpt-4.1-2025-04-14",
  suffix="my-model",
  seed=105,
  method={
    "type": "supervised", # In this case, the job will be using Supervised Fine Tuning.
    "supervised": {
      "hyperparameters": {
        "n_epochs": 2
      }
    }
  },
  extra_body={ "trainingType": "GlobalStandard" }
)

Замечание

Дополнительные сведения о поддерживаемых гиперпараметрах см. в руководствах по оптимизации непосредственных предпочтений и тонкой настройке с подкреплением.

Проверьте статус задания по точной настройке

response = client.fine_tuning.jobs.retrieve(job_id)

print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))

Список событий настройки параметров

Чтобы изучить отдельные события тонкой настройки, которые были созданы во время обучения, вам может понадобиться обновить клиентскую библиотеку OpenAI до последней версии. После этого можно выполнить эту команду с помощью pip install openai --upgrade.

response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))

Контрольные точки

При завершении каждой эпохи обучения создается контрольная точка. Контрольная точка — это полностью функциональная версия модели, которую можно развернуть и использовать в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переобучения. Когда задание точной настройки завершится, у вас будут три последние версии модели, доступные для развертывания. Последняя эпоха будет представлена вашей тонкой моделью, предыдущие две эпохи будут доступны в качестве контрольных точек.

Чтобы получить список контрольных точек, связанных с конкретным заданием точной настройки, можно выполнить команду list checkpoints. Для выполнения этой команды может потребоваться обновить клиентную библиотеку OpenAI до последней версии pip install openai --upgrade .

response = client.fine_tuning.jobs.checkpoints.list(job_id)
print(response.model_dump_json(indent=2))

Анализ настраиваемой модели

Azure OpenAI присоединяет файл результатов с именем results.csv к каждому заданию точной настройки после завершения. Вы можете использовать файл результатов для анализа производительности обучения и проверки настраиваемой модели. Идентификатор файла результата указан для каждой настраиваемой модели, и вы можете использовать пакет SDK Для Python для получения идентификатора файла и скачивания файла результатов для анализа.

В следующем примере Python извлекается идентификатор файла первого файла результатов, присоединенного к заданию тонкой настройки для настраиваемой модели, а затем используется пакет SDK Python для скачивания файла в текущий рабочий каталог для анализа.

# Retrieve the file ID of the first result file from the fine-tuning job
# for the customized model.
response = client.fine_tuning.jobs.retrieve(job_id)
if response.status == 'succeeded':
    result_file_id = response.result_files[0]

retrieve = client.files.retrieve(result_file_id)

# Download the result file.
print(f'Downloading result file: {result_file_id}')

with open(retrieve.filename, "wb") as file:
    result = client.files.content(result_file_id).read()
    file.write(result)

Результатом будет CSV-файл, содержащий строку заголовка и строку для каждого шага обучения, выполняемого в процессе тонкой настройки. Результирующий файл содержит следующие столбцы:

Имя столбца Описание
step Количество шага обучения. Шаг обучения представляет собой один проход вперед и назад в пакете обучающих данных.
train_loss Потеря для обучаемого пакета.
train_mean_token_accuracy Процент токенов в пакете обучения, правильно предсказанных моделью.
Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]].
valid_loss Потеря пакета проверки.
validation_mean_token_accuracy Процент токенов в пакете проверки, которые модель правильно предсказала.
Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]].
full_valid_loss Потеря проверки, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, потеря должна уменьшиться.
full_valid_mean_token_accuracy Действительная средняя точность токена, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, точность токенов должна увеличиваться.

Вы также можете просмотреть данные в файле results.csv как графики на портале Microsoft Foundry. Выберите ссылку для обученной модели, и вы увидите три диаграммы: ошибка, средняя точность токена и точность токена. Если вы предоставили данные проверки, оба набора данных будут отображаться на одном графике.

Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если вы видите расхождение между данными обучения и валидации, это может указывать на то, что вы переобучаетесь. Попробуйте обучение с меньшим количеством эпох или меньшим коэффициентом скорости обучения.

Разверните точно настроенную модель

Когда вы удовлетворены метриками из задания тонкой настройки или просто хотите перейти к предсказанию, необходимо развернуть модель.

Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среде разработчика.

В отличие от предыдущих команд ПАКЕТА SDK, развертывание должно выполняться с помощью API уровня управления, который требует отдельной авторизации, другого пути API и другой версии API.

переменная Определение
токен Существует несколько способов создания токена авторизации. Самый простой способ начального тестирования — запустить Cloud Shell на портале Azure. Затем выполните az account get-access-token. Этот маркер можно использовать в качестве временного маркера авторизации для тестирования API. Мы рекомендуем сохранить это в новой переменной окружения.
подписка Идентификатор подписки для связанного ресурса Azure OpenAI.
ресурсная группа Имя группы ресурсов для ресурса Azure OpenAI.
имя_ресурса Название ресурса Azure OpenAI.
имя_развертывания_модели Настраиваемое имя для нового точно настроенного развертывания модели. Это имя будет использоваться в вашем коде при совершении вызовов завершения чата.
тонко настроенная модель Извлеките это значение из результатов задания по точной настройке на предыдущем шаге. Оно выглядит так: gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Вам нужно добавить это значение в deploy_data json. В качестве альтернативы вы также можете развернуть контрольную точку, передав ID контрольной точки, который будет отображаться в формате ftchkpt-e559c011ecc04fc68eaa339d8227d02d
import json
import os
import requests

token= os.getenv("<TOKEN>") 
subscription = "<YOUR_SUBSCRIPTION_ID>"  
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name ="gpt-41-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2024-10-01"} # control plane API version rather than dataplane API for this call 
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}

deploy_data = {
    "sku": {"name": "standard", "capacity": 1}, 
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": <"fine_tuned_model">, #retrieve this value from the previous call, it will look like gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83
            "version": "1"
        }
    }
}
deploy_data = json.dumps(deploy_data)

request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'

print('Creating a new deployment...')

r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)

print(r)
print(r.reason)
print(r.json())

Дополнительные сведения о развертывании между регионами и использовании развернутой модели см. здесь.

Если вы готовы к развертыванию в промышленной среде или у вас есть особые требования к размещению данных, следуйте нашему руководству по развертыванию.

Непрерывная настройка

После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.

Для точной настройки модели, которую вы ранее настроили, вы будете использовать тот же процесс, что и при создании настраиваемой модели , но вместо указания имени универсальной базовой модели можно указать идентификатор уже точно настроенной модели. Идентификатор точно настроенной модели выглядит следующим образом. gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7"
)
job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

Мы также рекомендуем включить suffix параметр, чтобы упростить различие между различными итерациями вашей точно настроенной модели. suffix принимает строку и используется для идентификации модели с тонкой настройкой. С помощью API Python OpenAI поддерживается строка до 18 символов, которые будут добавлены в имя настраиваемой модели.

Если вы не уверены в идентификаторе существующей точно настроенной модели, эти сведения можно найти на странице моделей Microsoft Foundry или создать список моделей для определенного ресурса Azure OpenAI с помощью REST API.

Очистка развертываний, настраиваемых моделей и файлов обучения

После завершения работы с настроенной моделью можно удалить развертывание и модель. При необходимости вы также можете удалить файлы обучения и проверки, отправленные в службу.

Удалите развертывание вашей модели

Это важно

После развертывания настраиваемой модели, если в любое время развертывание остается неактивным в течение более чем пятнадцати дней (15) развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более 15 дней назад, и в течение непрерывного 15-дневного периода не выполнялись вызовы завершений задач или завершений чата.

Удаление неактивного развертывания не влияет на базовую настраиваемую модель, а настраиваемую модель можно повторно развернуть в любое время. Как описано в Azure OpenAI в Microsoft Foundry Models pricing, каждая настраиваемая (специализированная) модель, развертываемая модель несет за собой почасовую стоимость размещения, независимо от того, выполняются ли к модели вызовы на завершение или завершение чата. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в руководстве по управлению затратами на Azure OpenAI.

Вы можете использовать различные методы для удаления развертывания вашей настраиваемой модели.

Удаление настраиваемой модели

Аналогичным образом можно использовать различные методы для удаления настраиваемой модели:

Замечание

Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Сначала необходимо удалить развертывание модели, прежде чем удалить настраиваемую модель.

Удаление обучающих файлов

Кроме того, вы можете удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, из подписки Azure OpenAI. Для удаления обучающих, проверки и результирующих файлов можно использовать следующие методы:

В следующем примере Python используется комплект разработки программного обеспечения (SDK) для удаления файлов обучения, проверки и результатов вашей настраиваемой модели.

print('Checking for existing uploaded files.')
results = []

# Get the complete list of uploaded files in our subscription.
files = openai.File.list().data
print(f'Found {len(files)} total uploaded files in the subscription.')

# Enumerate all uploaded files, extracting the file IDs for the
# files with file names that match your training dataset file and
# validation dataset file names.
for item in files:
    if item["filename"] in [training_file_name, validation_file_name, result_file_name]:
        results.append(item["id"])
print(f'Found {len(results)} already uploaded files that match our files')

# Enumerate the file IDs for our files and delete each file.
print(f'Deleting already uploaded files.')
for id in results:
    openai.File.delete(sid = id)

Предпосылки

Поддерживаемые модели

Ознакомьтесь со страницей моделей, чтобы проверить, какие регионы в настоящее время поддерживают точную настройку.

Или можно точно настроить ранее настроенную модель, отформатированную как base-model.ft-{jobid}.

Просмотр рабочего процесса для REST API

Ознакомьтесь с рабочим процессом тонкой настройки для использования REST API и Python с Azure OpenAI.

  1. Подготовьте данные обучения и проверки.
  2. Выберите базовую модель.
  3. Отправьте данные обучения.
  4. Обучите новую кастомизированную модель.
  5. Проверьте состояние настраиваемой модели.
  6. Разверните настраиваемую модель для использования.
  7. Используйте настраиваемую модель.
  8. Опционально проведите анализ вашей настраиваемой модели на производительность и соответствие.

Подготовьте данные для обучения и проверки

Обучающие данные и наборы данных проверки состоят из входных и выходных примеров того, как модель должна выполняться.

Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL) и должны быть отформатированы в формате беседы, который используется API завершения чата .

Если вы хотите пошаговые инструкции gpt-4o-mini-2024-07-18 по настройке, обратитесь к руководству по настройке Azure OpenAI.

Пример формата файла

{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}

Формат файла многократного чата

Кроме того, поддерживается несколько поворотов беседы в одной строке файла обучения jsonl. Чтобы пропустить тонкую настройку для определенных сообщений помощника, добавьте пару необязательных weight значений ключа. weight В настоящее время можно задать значение 0 или 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Завершение чата с помощью визуального зрения

{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}

Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.

Создание наборов данных для обучения и проверки

Чем больше примеров обучения у вас есть, тем лучше. Задания тонкой настройки не будут продолжаться без по крайней мере 10 примеров обучения, но такое небольшое число недостаточно, чтобы заметно повлиять на ответы модели. Рекомендуется предоставить сотни, если не тысячи, примеры обучения, которые будут успешными.

Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучите модель на большом количестве внутренних данных без первого обрезки набора данных только для самых качественных примеров, вы можете в конечном итоге получить модель, которая выполняет гораздо хуже, чем ожидалось.

Отправка обучающих данных

Следующим шагом является выбор существующих подготовленных обучающих данных или отправка новых подготовленных обучающих данных для использования при точной настройке модели. После подготовки обучающих данных вы можете передать файлы в службу. Существует два способа отправки обучающих данных:

Для больших файлов данных рекомендуется импортировать из хранилища BLOB-объектов Azure. Большие файлы могут работать нестабильно при отправке через многокомпонентные формы, так как запросы являются атомарными, и их невозможно повторить или возобновить. Дополнительные сведения о хранилище BLOB-объектов Azure см. в статье "Что такое хранилище BLOB-объектов Azure"?

Замечание

Обучающие файлы данных должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.

Отправка обучающих данных

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/files \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\training_set.jsonl;type=application/json"

Отправка данных проверки

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/files \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\validation_set.jsonl;type=application/json"

Создание настраиваемой модели

После загрузки обучающих и проверочных файлов вы готовы начать процесс точной настройки. В следующем коде показано, как создать новое задание точной настройки с помощью REST API.

В этом примере мы также передаём начальный параметр. Сид определяет воспроизводимость задания. Передача начальных параметров семян и заданий должна приводить к одинаковым результатам, но может в редких случаях дать разные результаты. Если начальное значение не указано, он будет создан для вас.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4.1-2025-04-14",
    "training_file": "<TRAINING_FILE_ID>",
    "validation_file": "<VALIDATION_FILE_ID>",
    "seed": 105
}'

Если вы настраиваете модель, которая поддерживает Global Training, можно указать тип обучения с помощью extra_body именованного аргумента и используя api-version 2025-04-01-preview:

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2025-04-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4.1-2025-04-14",
    "training_file": "<TRAINING_FILE_ID>",
    "validation_file": "<VALIDATION_FILE_ID>",
    "seed": 105,
    "trainingType": "globalstandard"
}'

Кроме того, можно передать дополнительные необязательные параметры, такие как гиперпараметры , чтобы получить более широкий контроль над процессом тонкой настройки. Для начального обучения рекомендуется использовать автоматические значения по умолчанию, которые присутствуют без указания этих параметров.

Текущие поддерживаемые гиперпараметры для контролируемой точной настройки:

Имя Тип Описание
batch_size целое число Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию, а также максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией.
learning_rate_multiplier число/номер Множитель скорости обучения, используемый для тренировки. Скорость обучения точной настройки — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0,02 до 0,2, чтобы увидеть, что дает лучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переобучения.
n_epochs целое число Количество эпох, на которое следует обучать модель. Под эпохой понимается один полный цикл обработки набора данных для обучения.
seed целое число Сид определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если семя не указано, оно будет сгенерировано для вас.

Замечание

Дополнительные сведения о поддерживаемых гиперпараметрах см. в руководствах по оптимизации непосредственных предпочтений и тонкой настройке с подкреплением.

Проверка состояния настраиваемой модели

После запуска задания точной настройки может потребоваться некоторое время. Ваша задача может стоять в очереди за другими задачами в системе. Обучение модели может занять несколько минут или часов в зависимости от размера модели и набора данных. В следующем примере REST API используется для проверки состояния задания по финальной настройке. В примере извлекаются сведения о задании с помощью идентификатора задания, возвращаемого из предыдущего примера:

curl -X GET $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/<YOUR-JOB-ID> \
  -H "api-key: $AZURE_OPENAI_API_KEY"

Остановка и возобновление

Во время обучения можно просмотреть журналы и метрики и приостановить задание по мере необходимости. Приостановка может быть полезной, если метрики не конвергентно или если вы чувствуете, что модель не учится в правильном темпе. После приостановки задания обучения развертываемая контрольная точка будет создана после завершения проверки безопасности. Эта контрольная точка доступна для развертывания и использования для вывода или возобновления задания до завершения. Операция приостановки применима только для заданий, которые были обучены по крайней мере на одном шаге и находятся в состоянии выполнения .

Пауза

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/pause \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Резюме

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/resume \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Список событий настройки параметров

Чтобы проверить отдельные события тонкой настройки, созданные во время обучения, выполните следующие действия.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/events \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Копирование модели (предварительная версия)

Теперь можно скопировать настраиваемую модель контрольных точек из одного региона в другой, в разных подписках, но в одном клиенте. Этот процесс использует выделенные API для обеспечения эффективной и безопасной передачи. Эта функция в настоящее время доступна только с помощью API, а не через портал Foundry. После копирования модели из региона А в регион B можно постоянно настраивать модель в регионе B и развертывать модель из этого расположения.

Замечание

Удаление контрольной точки модели в исходном регионе не приведет к удалению модели в целевом регионе. Чтобы удалить модель в обоих регионах после его копирования, модель должна быть удалена отдельно в каждом регионе.

Предварительные требования

  • Целевой ресурс или учетная запись должны иметь по крайней мере одно задание точной настройки.
  • Целевой ресурс или учетная запись не должны отключать доступ к общедоступной сети. (По крайней мере при отправке запроса на копирование).
  • Вы можете скопировать только в целевую учетную запись, если учетная запись, инициирующая копию, имеет достаточные разрешения для доступа к целевой учетной записи.

Конфигурация разрешений

  1. Создайте управляемое удостоверение, назначаемое пользователем.
  2. Предоставьте роли участника OpenAI Cognitive Services управляемому удостоверению, назначаемому пользователем, в целевом ресурсе или учетной записи.
  3. Назначьте управляемое удостоверение, назначаемое пользователем, учетной записи исходного ресурса.

Копирование модели

curl --request POST \
  --url 'https://<aoai-resource>.openai.azure.com/openai/v1/fine_tuning/jobs/<ftjob>/checkpoints/<checkpoint-name>/copy' \
  --header 'Content-Type: application/json' \
  --header 'api-key: <api-key>' \
  --header 'aoai-copy-ft-checkpoints: preview' \
  --data '{
  "destinationResourceId": "<resourceId>",
  "region": "<region>"
}'

Так как это длительная операция, проверьте состояние копии точно настроенной модели, указав идентификатор контрольной точки исходной учетной записи, используемой в вызове POST.

Проверка состояния копирования

curl --request GET \
  --url 'https://<aoai-resource>.openai.azure.com//openai/v1/fine_tuning/jobs/<ftjob>/checkpoints/<checkpoint-name>/copy' \
  --header 'Content-Type: application/json' \
  --header 'api-key: <api-key>' \
  --header 'aoai-copy-ft-checkpoints: preview' 

Замечание

При копировании контрольной точки из исходной учетной записи имя контрольной точки сохраняется в целевой учетной записи. Убедитесь, что вы используете это точное имя для точной настройки, развертывания или для любой другой операции в целевой учетной записи. Эта контрольная точка не отображается в пользовательском интерфейсе list checkpoints или в API.

Контрольные точки

При завершении каждой эпохи обучения создается контрольная точка. Контрольная точка — это полностью функциональная версия модели, которую можно развернуть и использовать в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переобучения. Когда задание точной настройки завершится, у вас будут три последние версии модели, доступные для развертывания. Последняя эпоха будет представлена вашей тонкой моделью, предыдущие две эпохи будут доступны в качестве контрольных точек.

Чтобы получить список контрольных точек, связанных с отдельным заданием на тонкую настройку, можно выполнить команду списка контрольных точек.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Анализ настраиваемой модели

Azure OpenAI присоединяет файл результатов с именем results.csv к каждому заданию точной настройки после завершения. Вы можете использовать файл результатов для анализа производительности обучения и проверки настраиваемой модели. Идентификатор файла для результирующих файлов указан для каждой настраиваемой модели, и вы можете использовать REST API для получения идентификатора файла и скачивания файла результатов для анализа.

В следующем примере Python используется REST API для получения идентификатора файла первого файла результатов, присоединенного к заданию точной настройки для настраиваемой модели, а затем загружает файл в рабочий каталог для анализа.

curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/<JOB_ID>" \
  -H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/v1/files/<RESULT_FILE_ID>/content" \
    -H "api-key: $AZURE_OPENAI_API_KEY" > <RESULT_FILENAME>

Результатом будет CSV-файл, содержащий строку заголовка и строку для каждого шага обучения, выполняемого в процессе тонкой настройки. Результирующий файл содержит следующие столбцы:

Имя столбца Описание
step Количество шага обучения. Шаг обучения представляет собой один проход вперед и назад в пакете обучающих данных.
train_loss Потеря для обучаемого пакета.
train_mean_token_accuracy Процент токенов в пакете обучения, правильно предсказанных моделью.
Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]].
valid_loss Потеря пакета проверки.
validation_mean_token_accuracy Процент токенов в пакете проверки, которые модель правильно предсказала.
Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]].
full_valid_loss Потеря проверки, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, потеря должна уменьшиться.
full_valid_mean_token_accuracy Действительная средняя точность токена, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, точность токенов должна увеличиваться.

Вы также можете просмотреть данные в файле results.csv как графики на портале Foundry. Выберите ссылку для обученной модели, и вы увидите три диаграммы: ошибка, средняя точность токена и точность токена. Если вы предоставили данные проверки, оба набора данных будут отображаться на одном графике.

Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если вы видите расхождение между данными обучения и валидации, это может указывать на то, что вы переобучаетесь. Попробуйте обучение с меньшим количеством эпох или меньшим коэффициентом скорости обучения.

Разверните точно настроенную модель

Когда вы удовлетворены метриками из задания тонкой настройки или просто хотите перейти к предсказанию, необходимо развернуть модель.

Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среде разработчика.

Если вы готовы к развертыванию в промышленной среде или у вас есть особые требования к размещению данных, следуйте нашему руководству по развертыванию.

переменная Определение
токен Существует несколько способов создания токена авторизации. Самый простой способ начального тестирования — запустить Cloud Shell на портале Azure. Затем выполните az account get-access-token. Этот маркер можно использовать в качестве временного маркера авторизации для тестирования API. Мы рекомендуем сохранить это в новой переменной окружения.
подписка Идентификатор подписки для связанного ресурса Azure OpenAI.
ресурсная группа Имя группы ресурсов для ресурса Azure OpenAI.
имя_ресурса Название ресурса Azure OpenAI.
имя_развертывания_модели Настраиваемое имя для нового точно настроенного развертывания модели. Это имя будет использоваться в вашем коде при совершении вызовов завершения чата.
тонко настроенная модель Извлеките это значение из результатов задания по точной настройке на предыдущем шаге. Оно выглядит так: gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Необходимо добавить это значение в json deploy_data. В качестве альтернативы вы также можете развернуть контрольную точку, передав ID контрольной точки, который будет отображаться в формате ftchkpt-e559c011ecc04fc68eaa339d8227d02d
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>?api-version=2024-10-21" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "sku": {"name": "standard", "capacity": 1},
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": "<FINE_TUNED_MODEL>",
            "version": "1"
        }
    }
}'

Дополнительные сведения о развертывании между регионами и использовании развернутой модели см. здесь.

Непрерывная настройка

После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.

Для точной настройки модели, которую вы ранее настроили, можно использовать тот же процесс, что и при создании настраиваемой модели , но вместо указания имени универсальной базовой модели можно указать идентификатор уже точно настроенной модели. Идентификатор точно настроенной модели выглядит следующим образом. gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7",
    "training_file": "<TRAINING_FILE_ID>",
    "validation_file": "<VALIDATION_FILE_ID>",
    "suffix": "<additional text used to help identify fine-tuned models>"
}'

Мы также рекомендуем включить suffix параметр, чтобы упростить различие между различными итерациями вашей точно настроенной модели. suffix принимает строку и используется для идентификации модели с тонкой настройкой. Суффикс может содержать до 40 символов (a-z, A-Z, 0-9 и _), которые будут добавлены в имя вашей точной модели.

Если вы не уверены в идентификаторе вашей точно настроенной модели, эти сведения можно найти на странице "Модели " в Foundry или создать список моделей для определенного ресурса Azure OpenAI с помощью REST API.

Очистка развертываний, настраиваемых моделей и файлов обучения

После завершения работы с настроенной моделью можно удалить развертывание и модель. При необходимости вы также можете удалить файлы обучения и проверки, отправленные в службу.

Удалите развертывание вашей модели

Вы можете использовать различные методы для удаления развертывания вашей настраиваемой модели.

Удаление настраиваемой модели

Аналогичным образом можно использовать различные методы для удаления настраиваемой модели:

Замечание

Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Сначала необходимо удалить развертывание модели, прежде чем удалить настраиваемую модель.

Удаление обучающих файлов

Кроме того, вы можете удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, из подписки Azure OpenAI. Для удаления обучающих, проверки и результирующих файлов можно использовать следующие методы: