Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Узнайте, как настроить модели в Microsoft Foundry для наборов данных и вариантов использования. Позволяет точно настроить:
- Результаты более высокого качества, чем можно получить только с помощью инжиниринга промптов.
- Возможность обучаться на большем количестве примеров, чем может поместиться в лимит контекста запроса модели.
- Экономия токенов благодаря более коротким промптам.
- Запросы с меньшей задержкой, особенно когда вы используете небольшие модели.
В отличие от обучения на нескольких примерах, дообучение улучшает модель за счёт обучения на большем количестве примеров, чем помещается в промпт. Так как весы адаптируются к задаче, вы включаете меньше примеров или инструкций. Если включать меньше данных, это уменьшит количество токенов на запрос и потенциально снизит стоимость и задержку.
Мы используем низкоранговую адаптацию (LoRA) для точной настройки моделей таким образом, чтобы снизить их сложность, не влияя на их производительность. Этот метод работает за счёт аппроксимации исходной матрицы высокого ранга матрицей более низкого ранга. Тонкая настройка меньшего подмножества важных параметров на этапе обучения с учителем делает модель более управляемой и эффективной. Для пользователей это также делает обучение быстрее и более доступным, чем другие методы.
В этой статье описано, как:
- Выберите подходящие наборы данных и форматы для точной настройки.
- Запустите задачу тонкой настройки, отслеживайте состояние и получайте результаты.
- Развертывание и оценка точно настроенной модели.
- Очистите ресурсы, если они больше не нужны.
Необходимые условия
Ознакомьтесь с руководством по использованию тонкой настройки Foundry.
Вам нужна Azure подписка. Создайте его бесплатно.
Вам нужен ресурс проекта Foundry. Чтобы создать его, войдите на портал Foundry.
Для тонкой настройки требуется роль владельца Foundry . В то время как пользователи Foundry могут обучать (точно настроенные) модели, только владельцы ИИ могут развертывать их. Вы также можете создать пользовательскую роль , которая объединяет необходимые действия в одну роль.
Важно
Роли RBAC в Foundry были недавно переименованы. Foundry User, Foundry Owner, Foundry Account Owner и Foundry Project Manager ранее назывались пользователь Azure AI, владелец Azure AI, владелец учетной записи Azure AI и руководитель проекта Azure AI. Пока новое название внедряется, вы всё ещё можете видеть прежние названия в некоторых местах. Идентификаторы ролей и основные разрешения при переименовании не меняются.
Если у вас еще нет доступа к просмотру квот и развертыванию моделей на портале Foundry, вам потребуется больше разрешений.
Поддерживаемые модели
Для точной настройки поддерживаются следующие модели:
| Идентификатор модели | Стандартные регионы | Зона данных | Глобальный | Разработчик | Методы | Статус | Модальность |
|---|---|---|---|---|---|---|---|
gpt-4o-mini (2024-07-18) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT | GA | Текст в текст |
gpt-4o (2024-08-06) |
Восточная часть США2 Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст и визуальное представление для текста |
gpt-4.1 (2025-04-14) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст и визуальное представление для текста |
gpt-4.1-mini (2025-04-14) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст в текст |
gpt-4.1-nano (2025-04-14) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст в текст |
o4-mini (2025-04-16) |
Восточная часть США2 Центральная Швеция |
США | ✅ | ❌ | RFT | GA | Текст в текст |
gpt-5 (2025-08-07) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | RFT | Общедоступная версия* | Текст в текст |
Ministral-3B (2411) |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
Qwen-32B |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
Llama-3.3-70B-Instruct |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
gpt-oss-20b |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
* Поддержка GPT-5 для дообучения с подкреплением стала официально доступна, но доступ к ней ограничен и предоставляется только по приглашению. Обратитесь к вашей команде учетная запись Майкрософт, если вы заинтересованы в регистрации.
Или можно точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}.
Примечание
Модели с открытым кодом (Ministral-3B, Qwen-32B, Llama-3.3-70B-Instruct, gpt-oss-20b) поддерживаются только в ресурсах Foundry и в новом пользовательском интерфейсе Foundry.
Подготовка данных
Ваши обучающий и валидационный наборы данных состоят из примеров входных и выходных данных, отражающих то, как должна работать модель.
Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL). Он также должен быть отформатирован в формате беседы, который использует API завершения чата .
Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер каждого файла должен быть меньше 512 МБ.
Мы рекомендуем использовать инструкции и подсказки, которые, как вы сочли, лучше всего работали в каждом обучающем примере. Этот подход помогает получить лучшие результаты, особенно если у вас меньше сотни примеров.
Если у вас нет существующего набора данных, можно использовать возможности создания данных для создания нового.
Пример формата файла
{"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."}]}
Рекомендации по размеру набора данных
Чем больше примеров обучения у вас есть, тем лучше. Задания точной настройки не будут продолжаться без не менее 10 примеров обучения, но такого небольшого числа недостаточно, чтобы заметно повлиять на ответы модели. Одна из рекомендаций для успешной донастройки — предоставить сотни, если не тысячи, обучающих примеров. Рекомендуется начать с 50 хорошо созданных примеров.
Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучаете модель на большом объёме внутренних данных, не отобрав предварительно в наборе данных только наиболее качественные примеры, модель может работать хуже, чем ожидается.
Создание точно настроенной модели
Чтобы точно настроить модель в существующем проекте Foundry, выполните следующие действия:
Войдите в Foundry и выберите проект. Если у вас еще нет проекта, сначала создайте проект.
Перейдите на страницу Сборка>Тонкая настройка, а затем нажмите кнопку Тонкая настройка в правом верхнем углу.
Теперь вы увидите возможность точной настройки модели для создания нового задания точной настройки. Используйте следующие разделы, чтобы помочь в настройке задания, а затем нажмите кнопку "Отправить ", чтобы начать обучение новой точно настроенной модели.
Выбор базовой модели
Регион проекта может ограничить доступные модели. Выбор модели влияет как на производительность, так и на стоимость модели.
Вы также можете выбрать ранее настроенную модель.
Метод настройки
Поддерживаемые методы настройки зависят от выбранной модели:
Контролируемый тонкой настройкой (SFT): обучает модель на помеченных парах входных и выходных данных. Лучше всего подходит для большинства сценариев, включая специализацию задач.
Прямая оптимизация предпочтений (DPO): согласовывает модель с ответами, которые предпочитают люди. Идеально подходит для улучшения качества отклика.
Тонкая настройка с подкреплением (RFT): Использует сигналы вознаграждения от моделей-оценщиков для оптимизации сложных моделей поведения.
Примечание
В остальной части этой статьи рассматриваются действия по методу SFT. Инструкции, относящиеся к другим методам настройки, см. в руководстве по DPO и руководству по RFT.
Тип обучения
Выберите уровень обучения на основе варианта использования и бюджета:
Стандартный: обучение происходит в текущем регионе ресурса Foundry и предоставляет гарантии для размещения данных. Идеально подходит для рабочих нагрузок, в которых данные должны оставаться в определенном регионе.
Глобальный: обеспечивает более доступные цены по сравнению со стандартом, используя емкость за пределами текущего региона. Данные и весовые значения копируются в регион, где происходит обучение. Идеально подходит, если место размещения данных не является ограничением, и требуется ускорить время очереди.
Разработчик: обеспечивает значительное сокращение затрат за счёт использования незадействованных мощностей для обучения. Нет гарантий в отношении задержки или SLA, поэтому задания в этом классе могут быть автоматически вытеснены и позже возобновлены. Также нет никаких гарантий относительно хранения данных в определённой юрисдикции. Идеально подходит для экспериментов и рабочих нагрузок, чувствительных к цене.
Обучающие и валидационные данные
Если у вас есть наборы данных в проекте Foundry, выберите существующий набор данных для источника данных и выберите свой набор данных.
Чтобы отправить только что подготовленные наборы данных, выберите " Отправить новый набор данных для источника данных" и отправьте JSONL-файл.
После выбора или отправки файлов данных проверка выполняется автоматически, чтобы убедиться, что файлы форматируются как JSONL, кодируются в UTF-8 с BOM и имеют размер менее 512 МБ.
Необязательные параметры
Суффикс
Рекомендуется указать значение Суффикса , чтобы упростить различие между различными итерациями вашей точно настроенной модели. Суффикс принимает строку до 18 символов и используется при именовании полученной точно настроенной модели.
Семян
Начальное число определяет воспроизводимость задачи. При передаче одного и того же начального значения и параметров задания результаты должны быть одинаковыми, но в редких случаях могут отличаться. Если вы не укажете зерно, оно будет сгенерировано случайным образом.
Гиперпараметры
Вы можете вручную настроить гиперпараметры для задания тонкой настройки или оставить их в качестве значений по умолчанию.
Доступны следующие гиперпараметры:
| Имя | Тип | Описание |
|---|---|---|
batch_size |
Целое число | Размер пакета, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для одного прямого и одного обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию и максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. Если значение задано как -1, размер батча вычисляется как 0,2% от числа примеров в обучающем наборе. Максимальное значение — 256. |
learning_rate_multiplier |
Номер | Множитель скорости обучения, используемый при обучении. Скорость обучения при тонкой настройке — это исходная скорость обучения, использованная при предварительном обучении и умноженная на это значение. Более высокие скорости обучения, как правило, дают лучшие результаты при больших размерах пакета. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0.02 до 0.2, чтобы понять, какие из них дают наилучшие результаты. Меньшая скорость обучения может быть полезна для предотвращения переобучения. |
n_epochs |
Целое число | Количество эпох для обучения модели. Эпоха означает один полный проход по обучающему набору данных. Если задано -1значение, число эпох определяется динамически на основе входных данных. |
Автоматическое развертывание
Важно
Для автоматического развертывания требуется роль Foundry Owner или любую роль с действием Microsoft.CognitiveServices/accounts/deployments/write.
Чтобы сэкономить время, можно включить автоматическое развертывание для результирующей модели. Если обучение завершится успешно, модель развертывается в соответствии с выбранным типом развертывания. Имя развертывания формируется на основе уникального имени, сгенерированного для вашей пользовательской модели, и необязательного суффикса, который вы могли указать ранее.
Автоматическое развертывание поддерживается только для моделей OpenAI.
Мониторинг и анализ результатов
После отправки задания на дообучение в табличном представлении отображается список всех отправленных заданий на дообучение. Чтобы просмотреть дополнительные сведения о отдельных результатах, откройте страницу сведений о задании .
Ваше задание может быть поставлено в очередь после других заданий в системе. Обучение модели может занять несколько минут в зависимости от модели и размера набора данных.
Метрики
Вы можете отслеживать следующие метрики, перейдя на вкладку Монитор:
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 можно скопировать контрольные точки между ресурсами и подписками.
Примечание
Во время обучения можно просмотреть метрики и приостановить задание по мере необходимости. Пауза может быть полезной, если метрики не сходятся или если вам кажется, что модель обучается не в нужном темпе. При приостановке задания обучения развертываемая контрольная точка создается после завершения оценки безопасности. Эта контрольная точка доступна для развертывания и использования для вывода или возобновления выполнения задания.
Операцию приостановки можно применять только к заданиям, для которых выполнен хотя бы один шаг обучения и которые находятся в состоянии Running. Приостановка поддерживается только для моделей OpenAI.
Разверните дообученную модель
Важно
Для развертывания моделей требуется роль Foundry Owner или любую роль с действием Microsoft.CognitiveServices/accounts/deployments/write.
Если вас устраивают метрики по результатам задания дообучения, вы можете развернуть модель, нажав кнопку Deploy на странице сведений, а затем настроив параметры развертывания.
Дополнительные сведения см. в руководстве по настройке развертывания.
Используйте развернутую точно настроенную модель
После развертывания тонко настроенную модель можно использовать как любую другую развернутую модель. Вы можете использовать песочницу в Foundry, чтобы поэкспериментировать с новым развертыванием. Вы также можете использовать REST API для вызова вашей точно настроенной модели из собственного приложения. Вы даже можете приступить к использованию этой новой точно настроенной модели в потоке запросов для создания создаваемого приложения ИИ.
Примечание
Для моделей чата системное сообщение, которое вы используете для управления точно настроенной моделью (развернутой или доступной для тестирования на детской площадке), должно совпадать с системным сообщением, используемым для обучения. Если вы используете другое системное сообщение, модель может не выполняться должным образом.
Выполнение непрерывной точной настройки
После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.
Для точной настройки модели, которую вы ранее настроили, используйте тот же процесс, описанный в разделе "Создание точно настроенной модели". Но вместо указания имени универсальной базовой модели можно указать уже настроенную модель. Пользовательская дообученная модель выглядит так: gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft.
Непрерывное дообучение поддерживается только для моделей OpenAI.
Очистка ресурсов
Если вам больше не нужна настраиваемая модель, можно удалить развертывание и модель. Вы также можете удалить файлы обучения и проверки, отправленные в службу при необходимости.
Удаление точно настроенного развертывания модели
Важно
После развертывания настраиваемой модели, если развертывание в любое время остается неактивным в течение более 15 дней, развертывание удаляется. Развертывание настраиваемой модели неактивно , если модель была развернута более 15 дней назад, и в течение непрерывного 15-дневного периода не выполнялись вызовы API чата или ответных вызовов API.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель. Настраиваемая модель может быть развернута в любое время.
Как описано в Azure OpenAI в разделе "Цены на модели Microsoft Foundry", за каждую развернутую пользовательскую (донастроенную) модель взимается почасовая плата за размещение независимо от того, выполняются ли запросы на завершение чата или вызовы API Responses к этой модели. Дополнительные сведения о планировании и управлении затратами на Azure OpenAI см. в статье Plan и управление затратами на Azure OpenAI.
Вы можете удалить развертывание для точно настроенной модели на странице"Модели>" на портале Foundry.
Удаление настраиваемой модели
Вы можете удалить настраиваемую модель на странице точной настройки на портале Foundry. Выберите настраиваемую модель для удаления и нажмите кнопку "Удалить".
Примечание
Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Вы должны удалить развертывание вашей модели, прежде чем сможете удалить свою дообученную модель.
Необходимые условия
Прочитайте руководство о том, когда следует использовать тонкую настройку Azure OpenAI.
Вам нужна Azure подписка. Создайте его бесплатно.
Вам потребуется ресурс Azure OpenAI. Дополнительные сведения см. в разделе Создание ресурса и развертывание модели с помощью Azure OpenAI.
Необходимы следующие библиотеки Python:
os,json,requests,openai.Вам нужна библиотека OpenAI Python.
Для тонкой настройки требуется роль владельца Foundry . В то время как пользователи Foundry могут обучать (точно настроенные) модели, только владельцы ИИ могут развертывать их. Вы также можете создать пользовательскую роль , которая объединяет необходимые действия в одну роль.
Важно
Роли RBAC в Foundry были недавно переименованы. Foundry User, Foundry Owner, Foundry Account Owner и Foundry Project Manager ранее назывались пользователь Azure AI, владелец Azure AI, владелец учетной записи Azure AI и руководитель проекта Azure AI. Пока новое название внедряется, вы всё ещё можете видеть прежние названия в некоторых местах. Идентификаторы ролей и основные разрешения при переименовании не меняются.
Если у вас еще нет доступа к просмотру квот и развертыванию моделей на портале Foundry, вам потребуется больше разрешений.
Поддерживаемые модели
Для точной настройки поддерживаются следующие модели:
| Идентификатор модели | Стандартные регионы | Зона данных | Глобальный | Разработчик | Методы | Статус | Модальность |
|---|---|---|---|---|---|---|---|
gpt-4o-mini (2024-07-18) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT | GA | Текст в текст |
gpt-4o (2024-08-06) |
Восточная часть США2 Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст и визуальное представление для текста |
gpt-4.1 (2025-04-14) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст и визуальное представление для текста |
gpt-4.1-mini (2025-04-14) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст в текст |
gpt-4.1-nano (2025-04-14) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст в текст |
o4-mini (2025-04-16) |
Восточная часть США2 Центральная Швеция |
США | ✅ | ❌ | RFT | GA | Текст в текст |
gpt-5 (2025-08-07) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | RFT | Общедоступная версия* | Текст в текст |
Ministral-3B (2411) |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
Qwen-32B |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
Llama-3.3-70B-Instruct |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
gpt-oss-20b |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
* Поддержка GPT-5 для дообучения с подкреплением стала официально доступна, но доступ к ней ограничен и предоставляется только по приглашению. Обратитесь к вашей команде учетная запись Майкрософт, если вы заинтересованы в регистрации.
Или можно точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}.
Примечание
Модели с открытым кодом (Ministral-3B, Qwen-32B, Llama-3.3-70B-Instruct, gpt-oss-20b) поддерживаются только в ресурсах Foundry и в новом пользовательском интерфейсе Foundry.
Просмотр рабочего процесса для пакета SDK для Python
Ознакомьтесь с процессом тонкой настройки для использования пакета SDK для Python с Azure OpenAI:
- Подготовьте данные обучения и проверки.
- Выберите базовую модель.
- Отправьте данные обучения.
- Обучите новую настраиваемую модель.
- Проверьте состояние настраиваемой модели.
- Разверните настраиваемую модель для использования.
- Используйте настраиваемую модель.
- При необходимости проанализируйте настроенную под ваши требования модель с точки зрения производительности и пригодности.
Подготовьте обучающие и валидационные данные
Ваши обучающий и валидационный наборы данных состоят из примеров входных и выходных данных, отражающих то, как должна работать модель.
Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL). Он также должен быть отформатирован в формате беседы, который использует API завершения чата .
Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер каждого файла должен быть меньше 512 МБ.
Если вы хотите пошаговое руководство по настройке 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/major city 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."}]}
Создание наборов данных для обучения и проверки
Чем больше примеров обучения у вас есть, тем лучше. Задания точной настройки не будут продолжаться без не менее 10 примеров обучения, но такого небольшого числа недостаточно, чтобы заметно повлиять на ответы модели. Одна из рекомендаций для успешной донастройки — предоставить сотни, если не тысячи, обучающих примеров.
Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучаете модель на большом объёме внутренних данных, не отобрав предварительно в наборе данных только наиболее качественные примеры, модель может работать хуже, чем ожидается.
Отправка обучающих данных
Следующим шагом является выбор существующих подготовленных обучающих данных или отправка новых подготовленных обучающих данных для использования при настройке модели. После подготовки обучающих данных вы можете передать файлы в службу. Существует два способа отправки обучающих данных:
Для больших файлов данных рекомендуется импортировать из Хранилище BLOB-объектов. Большие файлы могут загружаться нестабильно при загрузке через multipart-формы, поскольку такие запросы атомарны и их нельзя повторить или возобновить. Дополнительные сведения о хранилище BLOB-объектов см. в статье Что такое хранилище BLOB-объектов Azure?.
Важно
Для импорта из Хранилище BLOB-объектов Azure требуется, чтобы для учетной записи хранения был включен публичный сетевой доступ. Если политики вашей организации не разрешают общедоступный доступ к учетным записям хранения, используйте вместо этого метод отправки локальных файлов .
Следующий 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 коде показан пример создания нового задания тонкой настройки с помощью пакета SDK для Python:
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-4.1-2025-04-14", # Enter the base model name.
suffix="my-model", # Custom suffix for naming the resulting model. Note that in Microsoft Foundry, the model can't contain dot/period characters.
seed=105, # Seed parameter controls reproducibility of the fine-tuning job. If you don't specify a seed, one is generated automatically.
extra_body={ "trainingType": "GlobalStandard" } # Change this value 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 takes some time to start and finish.
print("Job ID:", response.id)
print(response.model_dump_json(indent=2))
Примечание
Мы рекомендуем использовать уровень Global Standard для типа обучения, так как он обеспечивает экономию затрат и использует глобальную емкость для ускорения очередей. Однако он копирует данные и весовые значения за пределами текущего региона ресурсов. Если требуется размещение данных, используйте модель, которая поддерживает обучение уровня Standard.
Вы также можете передать дополнительные необязательные параметры, такие как гиперпараметры, чтобы получить более широкий контроль над процессом тонкой настройки. Для начального обучения рекомендуется использовать автоматические значения по умолчанию, которые присутствуют без указания этих параметров.
Поддерживаемые в настоящее время гиперпараметры для защищенной тонкой настройки:
| Имя | Тип | Описание |
|---|---|---|
batch_size |
Целое число | Размер пакета, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для одного прямого и одного обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию и максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. |
learning_rate_multiplier |
Номер | Множитель скорости обучения, используемый при обучении. Скорость обучения при тонкой настройке — это исходная скорость обучения, использованная при предварительном обучении и умноженная на это значение. Более высокие скорости обучения, как правило, дают лучшие результаты при больших размерах пакета. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0.02 до 0.2, чтобы понять, какие из них дают наилучшие результаты. Меньшая скорость обучения может быть полезна для предотвращения переобучения. |
n_epochs |
Целое число | Количество эпох для обучения модели. Эпоха означает один полный проход по обучающему набору данных. |
seed |
Целое число | Зерно, определяющее воспроизводимость задания. При передаче одного и того же начального значения и параметров задания результаты должны быть одинаковыми, но в редких случаях могут отличаться. Если вы не укажете зерно, оно будет сгенерировано автоматически. |
Чтобы задать пользовательские гиперпараметры с версией 1.x API OpenAI Python, предоставьте их в составе 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 is using supervised fine-tuning.
"supervised": {
"hyperparameters": {
"n_epochs": 2
}
}
},
extra_body={ "trainingType": "GlobalStandard" }
)
Чтобы узнать о поддерживаемых гиперпараметрах для других методов настройки, см. руководство по прямой оптимизации предпочтений и руководство по тонкой настройке с подкреплением.
Тип обучения
Выберите уровень обучения на основе варианта использования и бюджета:
Стандартный: обучение происходит в текущем регионе ресурса Foundry и предоставляет гарантии для размещения данных. Идеально подходит для рабочих нагрузок, в которых данные должны оставаться в определенном регионе.
Глобальный: обеспечивает более доступные цены по сравнению со стандартом, используя емкость за пределами текущего региона. Данные и весовые значения копируются в регион, где происходит обучение. Идеально подходит, если место размещения данных не является ограничением, и требуется ускорить время очереди.
Разработчик: обеспечивает значительное сокращение затрат за счёт использования незадействованных мощностей для обучения. Нет гарантий в отношении задержки или SLA, поэтому задания в этом классе могут быть автоматически вытеснены и позже возобновлены. Также нет никаких гарантий относительно хранения данных в определённой юрисдикции. Идеально подходит для экспериментов и рабочих нагрузок, чувствительных к цене.
import openai
from openai import AzureOpenAI
base_uri = "https://<ACCOUNT-NAME>.services.ai.azure.com"
api_key = "<API-KEY>"
api_version = "2025-04-01-preview"
client = AzureOpenAI(
azure_endpoint=base_uri,
api_key=api_key,
api_version=api_version
)
try:
client.fine_tuning.jobs.create(
model="gpt-4.1-mini",
training_file="<FILE-ID>",
extra_body={"trainingType": "developerTier"}
)
except openai.APIConnectionError as e:
print("The server could not be reached")
print(e.__cause__) # An underlying exception, likely raised within httpx.
except openai.RateLimitError as e:
print("A 429 status code was received; we should back off a bit.")
except openai.APIStatusError as e:
print("Another non-200-range status code was received")
print(e.status_code)
print(e.response)
print(e.body)
Проверить состояние задания дообучения
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))
Вывести список контрольных точек
Завершение каждой эпохи обучения создает контрольную точку. Контрольная точка — это полностью функциональная версия модели, которая может быть развернута и использована в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переподбора.
После завершения задания точной настройки у вас есть три последних версии модели, доступные для развертывания. Ваша точно настроенная модель представляет окончательную эпоху. Предыдущие две эпохи доступны в качестве контрольных точек.
Чтобы получить список контрольных точек, связанных с отдельным заданием точной настройки, можно выполнить следующую команду. Перед выполнением команды может потребоваться обновить клиентную библиотеку 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. При выборе ссылки на обученную модель появляются три диаграммы: функция потерь, средняя точность токенов и точность токенов. Если вы предоставили данные проверки, оба набора данных отображаются на одном графике.
Следите за тем, чтобы значение функции потерь со временем уменьшалось, а точность — увеличивалась. Если обучающие и валидационные данные расходятся, возможно, модель переобучается. Попробуйте уменьшить количество эпох обучения или использовать меньший множитель скорости обучения.
Разверните дообученную модель
Если вы удовлетворены метриками из задания тонкой настройки или хотите перейти к выводу, необходимо развернуть модель.
Если вы выполняете развертывание для дальнейшей проверки, рассмотрите вариант развертывания для тестирования, используя тип развертывания Developer.
В отличие от предыдущих команд ПАКЕТА SDK, для развертывания необходимо использовать API уровня управления. Для этой задачи требуется отдельная авторизация, другой путь к API и другая версия API.
| Переменная | Определение |
|---|---|
token |
Маркер авторизации. Существует несколько способов сгенерировать токен авторизации. Самый простой способ начального тестирования — открыть Azure Cloud Shell на портале Azure. Затем выполните команду az account get-access-token. Этот маркер можно использовать в качестве временного маркера авторизации для тестирования API. Рекомендуется хранить этот маркер в новой переменной среды. |
subscription |
Идентификатор подписки для связанного Azure ресурса OpenAI. |
resource_group |
Имя группы ресурсов для ресурса Azure OpenAI. |
resource_name |
Имя ресурса Azure OpenAI. |
model_deployment_name |
Настраиваемое имя для нового точно настроенного развертывания модели. На это имя ссылаются в вашем коде при вызовах завершения чата. |
fine_tuned_model |
Ваша точно настроенная модель. Извлеките это значение из результатов задания тонкой настройки, полученных на предыдущем шаге. Похоже на gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Необходимо добавить значение в deploy_data JSON. Кроме того, можно развернуть контрольную точку, передав идентификатор контрольной точки, который отображается в формате 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 use to reference the model when making inference calls.
deploy_params = {'api-version': "2024-10-01"} # Control plane API version rather than the data plane 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 looks 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())
Дополнительные сведения о развертывании в нескольких регионах и о том, как использовать развернутую модель, см. в статье Использование развернутой точно настроенной модели.
Если вы готовы развернуть решение в производственной среде или у вас есть особые требования к хранению данных в определённом регионе, следуйте руководству по развертыванию.
Выполнение непрерывной точной настройки
После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения. Непрерывное дообучение поддерживается только для моделей OpenAI.
Для точной настройки модели, которую вы ранее настроили, используйте тот же процесс, описанный в разделе "Создание настраиваемой модели". Но вместо указания имени универсальной базовой модели необходимо указать идентификатор настраиваемой модели. Идентификатор точно настроенной модели выглядит следующим 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 takes some time to start and finish.
print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))
Мы также рекомендуем включить suffix параметр, чтобы проще различать итерации вашей точно настроенной модели. Параметр suffix принимает строку и устанавливается для идентификации точно настроенной модели. С помощью API OpenAI Python можно добавить строку до 18 символов в имя настраиваемой модели.
Если вы не знаете идентификатор существующей дообученной модели, эти сведения можно найти на странице Models в Microsoft Foundry. Кроме того, можно создать список моделей для ресурса OpenAI Azure с помощью REST API.
Очистка развертываний, настраиваемых моделей и файлов обучения
Если настроенная модель вам больше не нужна, вы можете удалить развертывание и модель. Вы также можете удалить файлы обучения и проверки, отправленные в службу при необходимости.
Удалите ваше развертывание модели
Важно
После развертывания настраиваемой модели, если развертывание в любое время остается неактивным в течение более 15 дней, развертывание удаляется. Развертывание настраиваемой модели неактивно , если модель была развернута более 15 дней назад, и в течение непрерывного 15-дневного периода не выполнялись вызовы API чата или ответных вызовов API.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель. Настраиваемая модель может быть развернута в любое время.
Как описано в Azure OpenAI в разделе "Цены на модели Microsoft Foundry", за каждую развернутую пользовательскую (донастроенную) модель взимается почасовая плата за размещение независимо от того, выполняются ли запросы на завершение чата или вызовы API Responses к этой модели. Дополнительные сведения о планировании и управлении затратами на Azure OpenAI см. в статье Plan и управление затратами на Azure OpenAI.
Вы можете использовать любой из этих методов для удаления развертывания для настраиваемой модели:
Удаление настраиваемой модели
Вы можете удалить настраиваемую модель с помощью Foundry.
Примечание
Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Чтобы удалить настраиваемую модель, необходимо сначала удалить развертывание модели.
Удаление обучающих файлов
При желании вы можете удалить из своей подписки Azure OpenAI файлы обучения и проверки, которые вы отправили для обучения, а также файлы результатов, созданные в ходе обучения. Для удаления обучающих, проверки и результирующих файлов можно использовать следующие методы:
В следующем примере Python используется пакет SDK Python для удаления файлов обучения, проверки и результатов для настраиваемой модели:
print('Checking for existing uploaded files.')
results = []
# Get the complete list of uploaded files in your subscription.
files = openai.File.list().data
print(f'Found {len(files)} total uploaded files in the subscription.')
# Enumerate all uploaded files. Extract the IDs for the
# files with file names that match your training dataset file and
# validation dataset file.
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 your files and delete each file.
print(f'Deleting already uploaded files.')
for id in results:
openai.File.delete(sid = id)
Необходимые условия
Ознакомьтесь с руководством по использованию тонкой настройки Foundry.
Вам нужна Azure подписка. Создайте его бесплатно.
Вам нужен ресурс проекта Foundry. Чтобы создать его, войдите на портал Foundry.
Python 3.9 или Node.js 22+.
Пакеты SDK для вашего языка:
-
Python:
azure-ai-projects,azure-identityиrequests(используется для вызова развертывания плоскости управления), а также стандартные модули библиотекиosиjson. -
JavaScript/TypeScript:
@azure/ai-projects,@azure/identityи (для развертывания).@azure/arm-cognitiveservices
-
Python:
Для тонкой настройки требуется роль владельца Foundry . В то время как пользователи Foundry могут обучать (точно настроенные) модели, только владельцы ИИ могут развертывать их. Вы также можете создать пользовательскую роль , которая объединяет необходимые действия в одну роль.
Важно
Роли RBAC в Foundry были недавно переименованы. Foundry User, Foundry Owner, Foundry Account Owner и Foundry Project Manager ранее назывались пользователь Azure AI, владелец Azure AI, владелец учетной записи Azure AI и руководитель проекта Azure AI. Пока новое название внедряется, вы всё ещё можете видеть прежние названия в некоторых местах. Идентификаторы ролей и основные разрешения при переименовании не меняются.
Если у вас еще нет доступа к просмотру квот и развертыванию моделей на портале Foundry, вам потребуется больше разрешений.
Поддерживаемые модели
Для точной настройки поддерживаются следующие модели:
| Идентификатор модели | Стандартные регионы | Зона данных | Глобальный | Разработчик | Методы | Статус | Модальность |
|---|---|---|---|---|---|---|---|
gpt-4o-mini (2024-07-18) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT | GA | Текст в текст |
gpt-4o (2024-08-06) |
Восточная часть США2 Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст и визуальное представление для текста |
gpt-4.1 (2025-04-14) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст и визуальное представление для текста |
gpt-4.1-mini (2025-04-14) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст в текст |
gpt-4.1-nano (2025-04-14) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст в текст |
o4-mini (2025-04-16) |
Восточная часть США2 Центральная Швеция |
США | ✅ | ❌ | RFT | GA | Текст в текст |
gpt-5 (2025-08-07) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | RFT | Общедоступная версия* | Текст в текст |
Ministral-3B (2411) |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
Qwen-32B |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
Llama-3.3-70B-Instruct |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
gpt-oss-20b |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
* Поддержка GPT-5 для дообучения с подкреплением стала официально доступна, но доступ к ней ограничен и предоставляется только по приглашению. Обратитесь к вашей команде учетная запись Майкрософт, если вы заинтересованы в регистрации.
Или можно точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}.
Примечание
Модели с открытым кодом (Ministral-3B, Qwen-32B, Llama-3.3-70B-Instruct, gpt-oss-20b) поддерживаются только в ресурсах Foundry и в новом пользовательском интерфейсе Foundry.
Просмотрите процесс в Foundry SDK
Уделите немного времени, чтобы ознакомиться с процессом тонкой настройки по использованию Foundry SDK на Python или JavaScript/TypeScript:
- Подготовьте данные обучения и проверки.
- Выберите базовую модель.
- Отправьте данные обучения.
- Обучите новую настраиваемую модель.
- Проверьте состояние настраиваемой модели.
- Разверните настраиваемую модель для использования.
- Используйте настраиваемую модель.
- При необходимости проанализируйте настроенную под ваши требования модель с точки зрения производительности и пригодности.
Подготовьте обучающие и валидационные данные
Ваши обучающий и валидационный наборы данных состоят из примеров входных и выходных данных, отражающих то, как должна работать модель.
Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL). Он также должен быть отформатирован в формате беседы, который использует API завершения чата .
Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер каждого файла должен быть меньше 512 МБ.
Если вам нужно пошаговое руководство по тонкой настройке gpt-4o-mini-2024-07-18, см. руководство по тонкой настройке Microsoft Foundry.
Пример формата файла
{"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."}]}
Создание наборов данных для обучения и проверки
Чем больше примеров обучения у вас есть, тем лучше. Задания точной настройки не будут продолжаться без не менее 10 примеров обучения, но такого небольшого числа недостаточно, чтобы заметно повлиять на ответы модели. Одна из рекомендаций для успешной донастройки — предоставить сотни, если не тысячи, обучающих примеров.
Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучаете модель на большом объёме внутренних данных, не отобрав предварительно в наборе данных только наиболее качественные примеры, модель может работать хуже, чем ожидается.
Отправка обучающих данных
Следующим шагом является выбор существующих подготовленных обучающих данных или отправка новых подготовленных обучающих данных для использования при настройке модели. После подготовки обучающих данных вы можете передать файлы в службу. Существует два способа отправки обучающих данных:
Для больших файлов данных рекомендуется импортировать из Хранилище BLOB-объектов. Большие файлы могут загружаться нестабильно при загрузке через multipart-формы, поскольку такие запросы атомарны и их нельзя повторить или возобновить. Дополнительные сведения о хранилище BLOB-объектов см. в статье Что такое хранилище BLOB-объектов Azure?.
Важно
Для импорта из Хранилище BLOB-объектов Azure требуется, чтобы для учетной записи хранения был включен публичный сетевой доступ. Если политики вашей организации не разрешают общедоступный доступ к учетным записям хранения, используйте вместо этого метод отправки локальных файлов .
В следующем примере отправляются локальные файлы обучения и проверки с помощью пакета SDK Foundry и извлекаются возвращенные идентификаторы файлов:
import os
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
# Load the OpenAI client by using the Foundry SDK
client = AIProjectClient(
credential=DefaultAzureCredential(),
endpoint=os.getenv("FOUNDRY_PROJECT_ENDPOINT"),
).get_openai_client()
# 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)
- Справочник: API openAI Files (
files.createоба языка) - Справочник:
AIProjectClient.get_openai_client(Python) /AIProjectClient.getOpenAIClient(JavaScript/TypeScript)
Создание настраиваемой модели
После загрузки файлов для обучения и валидации можно запускать задачу дообучения.
В следующем коде показано, как создать новое задание точной настройки с помощью пакета SDK для Foundry:
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-4.1-2025-04-14", # Enter the base model name.
suffix="my-model", # Custom suffix for naming the resulting model. Note that in Microsoft Foundry, the model can't contain dot/period characters.
seed=105, # Seed parameter controls reproducibility of the fine-tuning job. If you don't specify a seed, one is 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 takes some time to start and finish.
print("Job ID:", response.id)
print(response.model_dump_json(indent=2))
- Справочник. API тонкой настройки OpenAI (
fine_tuning.jobs.createоба языка)
Примечание
Мы рекомендуем использовать уровень Global Standard для типа обучения, так как он обеспечивает экономию затрат и использует глобальную емкость для ускорения очередей. Однако он копирует данные и весовые значения за пределами текущего региона ресурсов. Если требуется размещение данных, используйте модель, которая поддерживает обучение уровня Standard.
Вы также можете передать дополнительные необязательные параметры, такие как гиперпараметры, чтобы получить более широкий контроль над процессом тонкой настройки. Для начального обучения рекомендуется использовать автоматические значения по умолчанию, которые присутствуют без указания этих параметров.
Поддерживаемые в настоящее время гиперпараметры для защищенной тонкой настройки:
| Имя | Тип | Описание |
|---|---|---|
batch_size |
Целое число | Размер пакета, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для одного прямого и одного обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию и максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. |
learning_rate_multiplier |
Номер | Множитель скорости обучения, используемый при обучении. Скорость обучения при тонкой настройке — это исходная скорость обучения, использованная при предварительном обучении и умноженная на это значение. Более высокие скорости обучения, как правило, дают лучшие результаты при больших размерах пакета. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0.02 до 0.2, чтобы понять, какие из них дают наилучшие результаты. Меньшая скорость обучения может быть полезна для предотвращения переобучения. |
n_epochs |
Целое число | Количество эпох для обучения модели. Эпоха означает один полный проход по обучающему набору данных. |
seed |
Целое число | Зерно, определяющее воспроизводимость задания. При передаче одного и того же начального значения и параметров задания результаты должны быть одинаковыми, но в редких случаях могут отличаться. Если вы не укажете зерно, оно будет сгенерировано автоматически. |
Чтобы задать пользовательские гиперпараметры, предоставьте их в составе 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 is using supervised fine tuning.
"supervised": {
"hyperparameters": {
"n_epochs": 2
}
}
},
extra_body={ "trainingType": "GlobalStandard" }
)
- Справочник. API тонкой настройки OpenAI (
fine_tuning.jobs.createсmethodобоими языками)
Чтобы узнать о поддерживаемых гиперпараметрах для других методов настройки, см. руководство по прямой оптимизации предпочтений и руководство по тонкой настройке с подкреплением.
Проверить состояние задания дообучения
response = client.fine_tuning.jobs.retrieve(job_id)
print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))
- Справочник. API тонкой настройки OpenAI (
fine_tuning.jobs.retrieveоба языка)
Список событий тонкой настройки
Чтобы проверить отдельные события тонкой настройки, созданные во время обучения, выполните следующую команду. Перед выполнением команды может потребоваться обновить клиентную библиотеку 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))
- Справка: API тонкой донастройки OpenAI (
fine_tuning.jobs.list_events, на обоих языках)
Вывести список контрольных точек
Завершение каждой эпохи обучения создает контрольную точку. Контрольная точка — это полностью функциональная версия модели, которая может быть развернута и использована в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переподбора.
После завершения задания точной настройки у вас есть три последних версии модели, доступные для развертывания. Ваша точно настроенная модель представляет окончательную эпоху. Предыдущие две эпохи доступны в качестве контрольных точек.
Чтобы получить список контрольных точек, связанных с отдельным заданием тонкой настройки, можно выполнить следующую команду:
response = client.fine_tuning.jobs.checkpoints.list(job_id)
print(response.model_dump_json(indent=2))
- Справочник: API для тонкой настройки OpenAI (
fine_tuning.jobs.checkpoints.list, на обоих языках)
Анализ настраиваемой модели
Foundry присоединяет файл результатов с именем 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 файле как графики на портале Foundry. При выборе ссылки на обученную модель появляются три диаграммы: функция потерь, средняя точность токенов и точность токенов. Если вы предоставили данные проверки, оба набора данных отображаются на одном графике.
Следите за тем, чтобы значение функции потерь со временем уменьшалось, а точность — увеличивалась. Если обучающие и валидационные данные расходятся, возможно, модель переобучается. Попробуйте уменьшить количество эпох обучения или использовать меньший множитель скорости обучения.
Разверните дообученную модель
Если вы удовлетворены метриками из задания тонкой настройки или хотите перейти к выводу, необходимо развернуть модель.
Если вы выполняете развертывание для дальнейшей проверки, рассмотрите вариант развертывания для тестирования, используя тип развертывания Developer.
В отличие от предыдущих команд ПАКЕТА SDK, для развертывания необходимо использовать API уровня управления. Для этой задачи требуется отдельная авторизация, другой путь к API и другая версия API.
| Переменная | Определение |
|---|---|
token |
Маркер авторизации. Существует несколько способов сгенерировать токен авторизации. Самый простой способ начального тестирования — открыть Azure Cloud Shell на портале Azure. Затем выполните команду az account get-access-token. Этот маркер можно использовать в качестве временного маркера авторизации для тестирования API. Рекомендуется хранить этот маркер в новой переменной среды. |
subscription |
Идентификатор подписки для связанного ресурса Foundry. |
resource_group |
Имя группы ресурсов для ресурса Foundry. |
resource_name |
Имя ресурса Foundry. |
model_deployment_name |
Настраиваемое имя для нового точно настроенного развертывания модели. На это имя ссылаются в вашем коде при вызовах завершения чата. |
fine_tuned_model |
Ваша точно настроенная модель. Извлеките это значение из результатов задания тонкой настройки, полученных на предыдущем шаге. Похоже на gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Необходимо добавить значение в deploy_data JSON. Кроме того, можно развернуть контрольную точку, передав идентификатор контрольной точки, который отображается в формате 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 use to reference the model when making inference calls.
deploy_params = {'api-version': "2024-10-01"} # Control plane API version rather than the data plane 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 looks 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())
- Справочник. Развертывания— создание или обновление (REST API) (вызов уровня управления Python)
- Справочник:
CognitiveServicesManagementClient(JavaScript/TypeScript)
Дополнительные сведения о развертывании в нескольких регионах и о том, как использовать развернутую модель, см. в статье Использование развернутой точно настроенной модели.
Если вы готовы развернуть решение в производственной среде или у вас есть особые требования к хранению данных в определённом регионе, следуйте руководству по развертыванию.
Выполнение непрерывной точной настройки
После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения. Непрерывное дообучение поддерживается только для моделей OpenAI.
Для точной настройки модели, которую вы ранее настроили, используйте тот же процесс, описанный в разделе "Создание настраиваемой модели". Но вместо указания имени универсальной базовой модели необходимо указать идентификатор настраиваемой модели. Идентификатор точно настроенной модели выглядит следующим 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 takes some time to start and finish.
print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))
- Справочник. API тонкой настройки OpenAI (
fine_tuning.jobs.createоба языка)
Мы также рекомендуем включить suffix параметр, чтобы проще различать итерации вашей точно настроенной модели. Параметр suffix принимает строку и устанавливается для идентификации точно настроенной модели. Вы можете добавить строку до 18 символов в имя настраиваемой модели.
Если вы не уверены в идентификаторе существующей точно настроенной модели, эти сведения можно найти на странице "Модели " в Foundry.
Необходимые условия
Прочитайте руководство о том, когда следует использовать тонкую настройку Azure OpenAI.
Вам нужна Azure подписка. Создайте его бесплатно.
Вам потребуется ресурс Azure OpenAI. Дополнительные сведения см. в разделе Создание ресурса и развертывание модели с помощью Azure OpenAI.
Для тонкой настройки требуется роль владельца Foundry . В то время как пользователи Foundry могут обучать (точно настроенные) модели, только владельцы ИИ могут развертывать их. Вы также можете создать пользовательскую роль , которая объединяет необходимые действия в одну роль.
Важно
Роли RBAC в Foundry были недавно переименованы. Foundry User, Foundry Owner, Foundry Account Owner и Foundry Project Manager ранее назывались пользователь Azure AI, владелец Azure AI, владелец учетной записи Azure AI и руководитель проекта Azure AI. Пока новое название внедряется, вы всё ещё можете видеть прежние названия в некоторых местах. Идентификаторы ролей и основные разрешения при переименовании не меняются.
Если у вас еще нет доступа к просмотру квот и развертыванию моделей на портале Foundry, вам потребуется больше разрешений.
Поддерживаемые модели
Для точной настройки поддерживаются следующие модели:
| Идентификатор модели | Стандартные регионы | Зона данных | Глобальный | Разработчик | Методы | Статус | Модальность |
|---|---|---|---|---|---|---|---|
gpt-4o-mini (2024-07-18) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT | GA | Текст в текст |
gpt-4o (2024-08-06) |
Восточная часть США2 Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст и визуальное представление для текста |
gpt-4.1 (2025-04-14) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст и визуальное представление для текста |
gpt-4.1-mini (2025-04-14) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст в текст |
gpt-4.1-nano (2025-04-14) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | SFT, DPO | GA | Текст в текст |
o4-mini (2025-04-16) |
Восточная часть США2 Центральная Швеция |
США | ✅ | ❌ | RFT | GA | Текст в текст |
gpt-5 (2025-08-07) |
Северная часть США Центральная Швеция |
США | ✅ | ✅ | RFT | Общедоступная версия* | Текст в текст |
Ministral-3B (2411) |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
Qwen-32B |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
Llama-3.3-70B-Instruct |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
gpt-oss-20b |
Не поддерживается | США | ✅ | ❌ | SFT | GA | Текст в текст |
* Поддержка GPT-5 для дообучения с подкреплением стала официально доступна, но доступ к ней ограничен и предоставляется только по приглашению. Обратитесь к вашей команде учетная запись Майкрософт, если вы заинтересованы в регистрации.
Или можно точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}.
Примечание
Модели с открытым кодом (Ministral-3B, Qwen-32B, Llama-3.3-70B-Instruct, gpt-oss-20b) поддерживаются только в ресурсах Foundry и в новом пользовательском интерфейсе Foundry.
Просмотр рабочего процесса для REST API
Ознакомьтесь с процессом тонкой настройки с использованием REST API и Python в Azure OpenAI:
- Подготовьте данные обучения и проверки.
- Выберите базовую модель.
- Отправьте данные обучения.
- Обучите новую настраиваемую модель.
- Проверьте состояние настраиваемой модели.
- Разверните настраиваемую модель для использования.
- Используйте настраиваемую модель.
- При необходимости проанализируйте настроенную под ваши требования модель с точки зрения производительности и пригодности.
Подготовьте обучающие и валидационные данные
Ваши обучающий и валидационный наборы данных состоят из примеров входных и выходных данных, отражающих то, как должна работать модель.
Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL). Он также должен быть отформатирован в формате беседы, который использует API завершения чата .
Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер каждого файла должен быть меньше 512 МБ.
Если вы хотите пошаговое руководство по настройке 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/major city 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."}]}
Создание наборов данных для обучения и проверки
Чем больше примеров обучения у вас есть, тем лучше. Задания точной настройки не будут продолжаться без не менее 10 примеров обучения, но такого небольшого числа недостаточно, чтобы заметно повлиять на ответы модели. Одна из рекомендаций для успешной донастройки — предоставить сотни, если не тысячи, обучающих примеров.
Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучаете модель на большом объёме внутренних данных, не отобрав предварительно в наборе данных только наиболее качественные примеры, модель может работать хуже, чем ожидается.
Отправка обучающих данных
Следующим шагом является выбор существующих подготовленных обучающих данных или отправка новых подготовленных обучающих данных для использования при настройке модели. После подготовки обучающих данных вы можете передать файлы в службу. Существует два способа отправки обучающих данных:
Для больших файлов данных рекомендуется импортировать из Хранилище BLOB-объектов. Большие файлы могут загружаться нестабильно при загрузке через multipart-формы, поскольку такие запросы атомарны и их нельзя повторить или возобновить. Дополнительные сведения о хранилище BLOB-объектов см. в статье Что такое хранилище BLOB-объектов Azure?.
Важно
Для импорта из Хранилище BLOB-объектов Azure требуется, чтобы для учетной записи хранения был включен публичный сетевой доступ. Если политики вашей организации не разрешают общедоступный доступ к учетным записям хранения, используйте вместо этого метод отправки локальных файлов .
Отправка обучающих данных
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.
Этот пример включает передачу параметра seed. Зерно определяет воспроизводимость задачи. При передаче одного и того же начального значения и параметров задания результаты должны быть одинаковыми, но в редких случаях могут отличаться. Если вы не укажете зерно, оно будет сгенерировано автоматически.
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
}'
Если вы настраиваете модель, поддерживающую глобальное обучение, можно указать тип обучения с помощью 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 |
Целое число | Зерно, определяющее воспроизводимость задания. |
Чтобы узнать о поддерживаемых гиперпараметрах для других методов настройки, см. руководство по прямой оптимизации предпочтений и руководство по тонкой настройке с подкреплением.
Выбор типа обучения
Выберите уровень обучения на основе варианта использования и бюджета:
Стандартный: обучение происходит в текущем регионе ресурса Foundry и предоставляет гарантии для размещения данных. Идеально подходит для рабочих нагрузок, в которых данные должны оставаться в определенном регионе.
Глобальный: обеспечивает более доступные цены по сравнению со стандартом, используя емкость за пределами текущего региона. Данные и весовые значения копируются в регион, где происходит обучение. Идеально подходит, если место размещения данных не является ограничением, и требуется ускорить время очереди.
Разработчик: обеспечивает значительное сокращение затрат за счёт использования незадействованных мощностей для обучения. Нет гарантий в отношении задержки или SLA, поэтому задания в этом классе могут быть автоматически вытеснены и позже возобновлены. Гарантий локализации данных тоже нет. Идеально подходит для экспериментов и рабочих нагрузок, чувствительных к цене.
curl -X POST "https://<ACCOUNT-NAME>.openai.azure.com/openai/fine_tuning/jobs?api-version=2025-04-01-preview" -H "Content-Type: application/json" -H "api-key: <API-KEY>" -d "{"model": "gpt-4.1", "training_file": "<FILE_ID>", "hyperparameters": {"prompt_loss_weight": 0.1}, "trainingType": "developerTier"}"
Проверка состояния настраиваемой модели
После запуска задания точной настройки может пройти некоторое время, прежде чем оно завершится. Ваше задание может быть поставлено в очередь после других заданий в системе. Обучение модели может занять несколько минут или часов в зависимости от размера модели и набора данных.
В следующем примере используется 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}/events \
-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}/checkpoints \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Приостановка и возобновление
Во время обучения можно просмотреть журналы и метрики и приостановить задание по мере необходимости. Пауза может быть полезной, если метрики не сходятся или если вам кажется, что модель обучается не в нужном темпе.
После приостановки задания обучения и завершения оценки безопасности создается развертываемая контрольная точка. Эта контрольная точка доступна для развертывания и использования для вывода или возобновления выполнения задания.
Операцию приостановки можно применять только к заданиям, для которых выполнен хотя бы один шаг обучения и которые находятся в состоянии Running.
Пауза
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"
Копирование модели (предварительная версия)
Теперь можно скопировать настраиваемую модель контрольных точек из одного региона в другой, в разных подписках, но в одном клиенте. Этот процесс использует выделенные API для обеспечения эффективной и безопасной передачи. Эта функция в настоящее время доступна только с помощью API, а не через портал Foundry.
После копирования модели из региона А в регион B можно постоянно настраивать модель в регионе B и развертывать модель из этого расположения.
Примечание
Удаление контрольной точки модели в исходном регионе не приводит к удалению модели в целевом регионе. Чтобы удалить модель из обоих регионов после её копирования, необходимо развернуть модель отдельно в каждом регионе.
Необходимые условия
- Целевой ресурс или учетная запись должны иметь как минимум одно задание дообучения.
- Целевой ресурс или учетная запись не должны отключать доступ к общедоступной сети (по крайней мере при отправке запроса на копирование).
- Вы можете скопировать только в целевую учетную запись, если учетная запись, инициирующая копию, имеет достаточные разрешения для доступа к целевой учетной записи.
Настройка разрешений
- Создайте управляемое удостоверение, назначаемое пользователем.
- Назначьте роль "Пользователь Foundry" управляемому удостоверению, назначаемому пользователем, для целевого ресурса или учетной записи.
- Назначьте управляемое удостоверение, назначаемое пользователем, для учетной записи исходного ресурса.
Скопировать модель
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.
Анализ настраиваемой модели
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. При выборе ссылки на обученную модель появляются три диаграммы: функция потерь, средняя точность токенов и точность токенов. Если вы предоставили данные проверки, оба набора данных отображаются на одном графике.
Следите за тем, чтобы значение функции потерь со временем уменьшалось, а точность — увеличивалась. Если обучающие и валидационные данные расходятся, возможно, модель переобучается. Попробуйте уменьшить количество эпох обучения или использовать меньший множитель скорости обучения.
Разверните дообученную модель
Если вы удовлетворены метриками из задания тонкой настройки или хотите перейти к выводу, необходимо развернуть модель.
Если вы выполняете развертывание для дальнейшей проверки, рассмотрите вариант развертывания для тестирования, используя тип развертывания Developer.
Если вы готовы развернуть решение в производственной среде или у вас есть особые требования к хранению данных в определённом регионе, следуйте руководству по развертыванию.
| Переменная | Определение |
|---|---|
token |
Маркер авторизации. Существует несколько способов сгенерировать токен авторизации. Самый простой способ начального тестирования — открыть Azure Cloud Shell на портале Azure. Затем выполните команду az account get-access-token. Этот маркер можно использовать в качестве временного маркера авторизации для тестирования API. Рекомендуется хранить этот маркер в новой переменной среды. |
subscription |
Идентификатор подписки для связанного Azure ресурса OpenAI. |
resource_group |
Имя группы ресурсов для ресурса Azure OpenAI. |
resource_name |
Имя ресурса Azure OpenAI. |
model_deployment_name |
Настраиваемое имя для нового точно настроенного развертывания модели. На это имя ссылаются в вашем коде при вызовах завершения чата. |
fine_tuned_model |
Ваша точно настроенная модель. Извлеките это значение из результатов задания тонкой настройки, полученных на предыдущем шаге. Похоже на gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Необходимо добавить значение в deploy_data JSON. Кроме того, можно развернуть контрольную точку, передав идентификатор контрольной точки, который отображается в формате 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"
}
}
}'
Дополнительные сведения о развертывании в нескольких регионах и о том, как использовать развернутую модель, см. в статье Использование развернутой точно настроенной модели.
Выполнение непрерывной точной настройки
После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения. Непрерывное дообучение поддерживается только для моделей OpenAI.
Для точной настройки модели, которую вы ранее настроили, используйте тот же процесс, описанный в разделе "Создание настраиваемой модели". Но вместо указания имени универсальной базовой модели необходимо указать идентификатор настраиваемой модели. Идентификатор точно настроенной модели выглядит следующим 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. Кроме того, можно создать список моделей для ресурса OpenAI Azure с помощью REST API.
Очистка развертываний, настраиваемых моделей и файлов обучения
Если настроенная модель вам больше не нужна, вы можете удалить развертывание и модель. Вы также можете удалить файлы обучения и проверки, отправленные в службу при необходимости.
Удалите ваше развертывание модели
Вы можете использовать любой из этих методов для удаления развертывания для настраиваемой модели:
Удаление настраиваемой модели
Вы можете удалить настраиваемую модель с помощью Foundry.
Примечание
Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Чтобы удалить настраиваемую модель, необходимо сначала удалить развертывание модели.
Удаление обучающих файлов
При желании вы можете удалить из своей подписки Azure OpenAI файлы обучения и проверки, которые вы отправили для обучения, а также файлы результатов, созданные в ходе обучения. Для удаления файлов можно использовать Foundry .