Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Узнайте, как настроить модели в Microsoft Foundry для наборов данных и вариантов использования. Позволяет точно настроить:
- Более качественные результаты, чем вы могли бы получить только с помощью инженерии подсказок.
- Возможность обучать на большем количестве примеров, чем позволяет ограничение контекста запроса модели.
- Экономия токенов из-за более коротких запросов.
- Запросы с низкой задержкой, особенно при использовании небольших моделей.
В отличие от обучения с небольшим числом образцов, тонкая настройка улучшает модель, обучая на большем количестве примеров, чем вмещает запрос. Так как весы адаптируются к задаче, вы включаете меньше примеров или инструкций. Сокращение числа маркеров на вызов позволяет потенциально снизить затраты и задержки.
Мы используем низкоранговую адаптацию (LoRA) для точной настройки моделей таким образом, чтобы снизить их сложность, не влияя на их производительность. Этот метод работает за счет приближения исходной матрицы высокого ранга к матрице более низкого ранга. Тонкая настройка более мелкого подмножества важных параметров на этапе ограничиваемого обучения делает модель более контролируемой и эффективной. Для пользователей это также делает обучение быстрее и более доступным, чем другие методы.
В этой статье вы узнаете, как:
- Выберите подходящие наборы данных и форматы для точной настройки.
- Активируйте задание тонкой подстройки, отслеживайте состояние и получайте результаты.
- Развертывание и оценка точно настроенной модели.
- Итерировать на основе отзывов о результатах оценки.
Предпосылки
- Ознакомьтесь с руководством по использованию тонкой настройки Foundry.
- Вам требуется подписка Azure. Создайте его бесплатно.
- Вам нужен ресурс проекта Foundry. Чтобы создать его, войдите на портал Foundry.
- Для точной настройки требуется роль владельца ИИ Azure . Хотя пользователи ИИ Azure могут обучать (точно настроить) модели, их могут развертывать только владельцы ИИ.
- Если у вас еще нет доступа к просмотру квот и развертыванию моделей на портале Foundry, вам потребуется больше разрешений.
Поддерживаемые модели
Чтобы проверить, какие регионы в настоящее время поддерживают точную настройку, ознакомьтесь со статьей о моделях.
Или можно точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}.
Подготовка данных
Наборы данных для обучения и валидации состоят из примеров входных и выходных данных, чтобы модель работала.
Используемые данные обучения и проверки должны быть отформатированы в виде документа 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 символов и используется при именовании полученной точно настроенной модели.
Семя
Начальное значение (seed) контролирует воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если вы не указываете начальное значение, оно генерируется случайным образом для вас.
Гиперпараметры
Вы можете вручную настроить гиперпараметры для задания тонкой настройки или оставить их в качестве значений по умолчанию.
Доступны следующие гиперпараметры:
| Имя | Тип | Описание |
|---|---|---|
batch_size |
Целое число | Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию и максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. Если задано значение -1, размер пакета вычисляется как 0,2% от количества примеров в обучающем наборе. Максимальное значение — 256. |
learning_rate_multiplier |
Number | Множитель скорости обучения, используемый для тренировки. Скорость обучения при дотонкой настройке — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0.02 до 0.2, чтобы увидеть, что дает лучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переобучения. |
n_epochs |
Целое число | Количество эпох, на которое следует обучать модель. Под эпохой понимается один полный цикл обработки набора данных для обучения. Если задано -1значение, число эпох определяется динамически на основе входных данных. |
Автоматическое развертывание
[! IMPROTANT] Для автоматического развертывания необходимо назначить роль
Azure AI ownerили любую роль с действием "Microsfot.CognitiveServices/accounts/deployments/write".
Чтобы сэкономить время, можно включить автоматическое развертывание для результирующей модели. Если обучение завершится успешно, модель развертывается в соответствии с выбранным типом развертывания. Имя развертывания основано на уникальном имени, созданном для вашей пользовательской модели, и необязательном суффиксе, который мог быть предоставлен вами ранее.
Автоматическое развертывание поддерживается только для моделей OpenAI.
Мониторинг и анализ результатов
После отправки задания тонкой настройки в табличном представлении отображается список всех отправленных заданий тонкой настройки. Чтобы просмотреть дополнительные сведения о отдельных результатах, откройте страницу сведений о задании .
Ваша задача может стоять в очереди за другими задачами в системе. Обучение модели может занять несколько минут в зависимости от модели и размера набора данных.
Metrics
Чтобы отслеживать следующие метрики, перейдите на вкладку Монитор:
train_loss: убыток для обучающего пакета. Каждый шаг обучения на оси x представляет собой один проход, вперед и назад в пакете обучающих данных.full_valid_loss: потеря проверки, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, потеря должна уменьшиться.train_mean_token_accuracy: процент токенов в пакете обучения, которые модель правильно предсказала.Например, если задан размер пакета
3, и ваши данные содержат завершения[[1, 2], [0, 5], [4, 2]], это значение будет равно0.83(5 из 6), если модель выдала предсказание[[1, 1], [0, 5], [4, 2]].full_valid_mean_token_accuracy: валидная средняя точность токенов, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, точность токенов должна увеличиваться.
Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если данные обучения и проверки различаются, возможно, вы переобучаетесь. Попробуйте обучать, используя меньшее количество эпох или уменьшенный коэффициент скорости обучения.
Контрольные точки
После завершения каждой эпохи обучения создается контрольная точка. Вы можете просмотреть контрольные точки, перейдя в раздел контрольных точек.
Контрольная точка — это полностью функциональная версия модели, которая может быть развернута и использована в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переобучения. После завершения задания точной настройки у вас есть три последних версии модели, доступные для развертывания. С помощью REST API можно скопировать контрольные точки между ресурсами и подписками.
Замечание
Во время обучения можно просмотреть метрики и приостановить задание по мере необходимости. Приостановка может быть полезной, если метрики не сходятся или если вы считаете, что модель не обучается с правильной скоростью. При приостановке задания обучения развертываемая контрольная точка создается после завершения оценки безопасности. Эта контрольная точка доступна для развертывания и использования для вывода или возобновления выполнения задания.
Операция приостановки применима только для заданий, которые прошли по крайней мере один шаг обучения и находятся в состоянии выполнения. Приостановка поддерживается только для моделей OpenAI.
Разверните точно настроенную модель
[!IMPORTANT] Для развертывания моделей необходимо быть назначенным на роль
Azure AI ownerили любую роль, предоставляющую право на выполнение действия "Microsoft.CognitiveServices/accounts/deployments/write".
Если вы удовлетворены метриками из задания по тонкой настройке, можно развернуть модель, нажав кнопку "Развернуть" на странице деталей, а затем настроив параметры развертывания.
Дополнительные сведения см. в руководстве по настройке развертывания.
Использовать развернутую модель, настроенную с высокой точностью
После развертывания точно настроенной модели ее можно использовать как любую другую развернутую модель. Вы можете использовать игровую площадку в Foundry для экспериментов с новым развертыванием. Вы также можете использовать REST API для вызова вашей точно настроенной модели из собственного приложения. Вы уже можете приступить к использованию этой новой точно настроенной модели в потоке запросов для построения генеративного приложения ИИ.
Замечание
Для моделей чата системное сообщение, которое вы используете для управления точно настроенной моделью (развернутой или доступной для тестирования на детской площадке), должно совпадать с системным сообщением, используемым для обучения. Если вы используете другое системное сообщение, модель может не выполняться должным образом.
Выполнение непрерывной точной настройки
После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.
Для точной настройки модели, которую вы ранее настроили, используйте тот же процесс, описанный в разделе "Создание точно настроенной модели". Но вместо указания имени универсальной базовой модели можно указать уже настроенную модель. Настроенная настраиваемая модель выглядит следующим образом gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft.
Непрерывная тонкая настройка поддерживается только для моделей OpenAI.
Очистка ресурсов
Если вам больше не нужна настраиваемая модель, можно удалить её развертывание и саму модель. Вы также можете удалить файлы обучения и проверки, отправленные в службу при необходимости.
Удаление точно настроенного развертывания модели
Это важно
После развертывания настраиваемой модели, если развертывание в любое время остается неактивным в течение более 15 дней, развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более 15 дней назад и непрерывно в течение 15 дней не были сделаны вызовы чата или API ответа.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель. Настраиваемая модель может быть развернута в любое время.
Как описано в ценах на Azure OpenAI в Microsoft Foundry Models, каждая настраиваемая (точно настроенная) модель, которая была развернута, несет почасовую стоимость хостинга, независимо от того, совершаются ли завершения чата или вызовы API для ответов на модель. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в статье "Планирование затрат на Azure OpenAI" и управление ими.
Вы можете удалить развертывание для точно настроенной модели на странице Сборка>Модели в портале Foundry.
Удалите модель с тонкой настройкой
Вы можете удалить настраиваемую модель на странице точной настройки на портале Foundry. Выберите настраиваемую модель для удаления и нажмите кнопку "Удалить".
Замечание
Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Перед удалением настраиваемой модели необходимо удалить её развертывание.
Предпосылки
- Прочтите руководство о том, как использовать тонкую настройку Azure OpenAI.
- Вам требуется подписка Azure. Создайте его бесплатно.
- Вам нужен ресурс Azure OpenAI. Дополнительные сведения см. в статье "Создание ресурса" и развертывание модели с помощью Azure OpenAI.
- Вам нужны следующие библиотеки Python:
os,json,requests.openai - Вам нужна библиотека OpenAI Python.
- Для точной настройки требуется роль владельца ИИ Azure . Хотя пользователи ИИ Azure могут обучать (точно настроить) модели, их могут развертывать только владельцы ИИ.
- Если у вас еще нет доступа к просмотру квот и развертыванию моделей на портале Foundry, вам потребуется больше разрешений.
Поддерживаемые модели
Чтобы проверить, какие регионы в настоящее время поддерживают точную настройку, ознакомьтесь со статьей о моделях.
Или можно точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}.
Просмотр рабочего процесса пакета 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 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. Большие файлы могут стать нестабильными при отправке их через многочастные формы, так как запросы являются атомарными и не могут быть повторно отправлены или возобновлены. Дополнительные сведения о хранилище BLOB-объектов см. в статье "Что такое хранилище 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 для типа обучения, так как он обеспечивает экономию затрат и использует глобальную емкость для ускорения очередей. Однако он копирует данные и весовые значения за пределами текущего региона ресурсов. Если необходимо соблюдение требований по размещению данных, используйте модель, которая поддерживает обучение стандартного уровня.
Вы также можете передать дополнительные необязательные параметры, такие как гиперпараметры, чтобы получить более широкий контроль над процессом тонкой настройки. Для начального обучения рекомендуется использовать автоматические значения по умолчанию, которые присутствуют без указания этих параметров.
Поддерживаемые в настоящее время гиперпараметры для защищенной тонкой настройки:
| Имя | Тип | Описание |
|---|---|---|
batch_size |
Целое число | Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию и максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. |
learning_rate_multiplier |
Number | Множитель скорости обучения, используемый для тренировки. Скорость обучения при дотонкой настройке — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 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. При выборе ссылки для обученной модели отображаются три диаграммы: функция потерь, усреднённая точность токенов и точность токенов. Если вы предоставили данные проверки, оба набора данных отображаются на одном графике.
Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если данные обучения и проверки различаются, возможно, вы переобучаетесь. Попробуйте обучать, используя меньшее количество эпох или уменьшенный коэффициент скорости обучения.
Разверните точно настроенную модель
Если вы удовлетворены метриками из задания тонкой настройки или хотите перейти к проведению вывода, необходимо развернуть модель.
Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среду разработчика.
В отличие от предыдущих команд ПАКЕТА SDK, для развертывания необходимо использовать API уровня управления. Для этой задачи требуется отдельная авторизация, другой путь к API и другая версия API.
| Variable | Определение |
|---|---|
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 символов в имя настраиваемой модели.
Если вы не уверены в идентификаторе существующей точно настроенной модели, эти сведения можно найти на странице моделей Microsoft Foundry. Вы также можете создать список моделей для ресурса Azure OpenAI с помощью REST API.
Очистка развертываний, настраиваемых моделей и файлов обучения
Если вам больше не нужна кастомизируемая модель, можно удалить развертывание и модель. Вы также можете удалить файлы обучения и проверки, отправленные в службу при необходимости.
Удалите развертывание вашей модели
Это важно
После развертывания настраиваемой модели, если развертывание в любое время остается неактивным в течение более 15 дней, развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более 15 дней назад и непрерывно в течение 15 дней не были сделаны вызовы чата или API ответа.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель. Настраиваемая модель может быть развернута в любое время.
Как описано в ценах на Azure OpenAI в Microsoft Foundry Models, каждая настраиваемая (точно настроенная) модель, которая была развернута, несет почасовую стоимость хостинга, независимо от того, совершаются ли завершения чата или вызовы API для ответов на модель. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в статье "Планирование затрат на Azure OpenAI" и управление ими.
Вы можете использовать любой из этих методов для удаления развертывания для настраиваемой модели:
Удаление настраиваемой модели
Вы можете удалить настраиваемую модель с помощью Foundry.
Замечание
Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Перед удалением настроенной модели необходимо удалить развертывание модели.
Удаление обучающих файлов
Кроме того, вы можете удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, из подписки Azure OpenAI. Для удаления обучающих, проверки и результирующих файлов можно использовать следующие методы:
В следующем примере Python используется комплект разработки программного обеспечения (SDK) для удаления файлов обучения, проверки и результатов вашей настраиваемой модели.
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)
Предпосылки
- Прочтите руководство о том, как использовать тонкую настройку Azure OpenAI.
- Вам требуется подписка Azure. Создайте его бесплатно.
- Вам нужен ресурс Azure OpenAI. Дополнительные сведения см. в статье "Создание ресурса" и развертывание модели с помощью Azure OpenAI.
- Для точной настройки требуется роль владельца ИИ Azure. Хотя пользователи ИИ Azure могут обучать (точно настроить) модели, их могут развертывать только владельцы ИИ.
- Если у вас еще нет доступа к просмотру квот и развертыванию моделей на портале Foundry, вам потребуется больше разрешений.
Поддерживаемые модели
Чтобы проверить, какие регионы в настоящее время поддерживают точную настройку, ознакомьтесь со статьей о моделях.
Или можно точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}.
Просмотр рабочего процесса для 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 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. Большие файлы могут стать нестабильными при отправке их через многочастные формы, так как запросы являются атомарными и не могут быть повторно отправлены или возобновлены. Дополнительные сведения о хранилище BLOB-объектов см. в статье "Что такое хранилище 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.
Этот пример включает передачу параметра начального числа. Сид определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если вы не указываете начальное число, оно автоматически создается для вас.
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 |
Number | Множитель скорости обучения, используемый для тренировки. Скорость обучения при дотонкой настройке — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 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"
Остановка и возобновление
Во время обучения можно просмотреть журналы и метрики и приостановить задание по мере необходимости. Приостановка может быть полезной, если метрики не сходятся или если вы считаете, что модель не обучается с правильной скоростью.
После приостановки задания обучения и завершения оценки безопасности создается развертываемая контрольная точка. Эта контрольная точка доступна для развертывания и использования для вывода или возобновления выполнения задания.
Операция приостановки применима только для заданий, которые прошли по крайней мере один шаг обучения и находятся в состоянии выполнения.
Пауза
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 и развертывать модель из этого расположения.
Замечание
Удаление контрольной точки модели в исходном регионе не приводит к удалению модели в целевом регионе. Чтобы удалить модель в обоих регионах после её копирования, необходимо развернуть модель в каждом регионе отдельно.
Предпосылки
- Целевой ресурс или учетная запись должны иметь по крайней мере одно задание тонкой настройки.
- Целевой ресурс или учетная запись не должны отключать доступ к общедоступной сети (по крайней мере при отправке запроса на копирование).
- Вы можете скопировать только в целевую учетную запись, если учетная запись, инициирующая копию, имеет достаточные разрешения для доступа к целевой учетной записи.
Настройка разрешений
- Создайте управляемое удостоверение, назначаемое пользователем.
- Предоставьте роль Azure AI User вашему пользовательскому управляемому удостоверению на целевом ресурсе или учетной записи.
- Назначьте управляемое удостоверение, назначаемое пользователем, учетной записи исходного ресурса.
Скопируйте модель
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. При выборе ссылки для обученной модели отображаются три диаграммы: функция потерь, усреднённая точность токенов и точность токенов. Если вы предоставили данные проверки, оба набора данных отображаются на одном графике.
Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если данные обучения и проверки различаются, возможно, вы переобучаетесь. Попробуйте обучать, используя меньшее количество эпох или уменьшенный коэффициент скорости обучения.
Разверните точно настроенную модель
Если вы удовлетворены метриками из задания тонкой настройки или хотите перейти к проведению вывода, необходимо развернуть модель.
Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среду разработчика.
Если вы готовы к развертыванию в рабочей среде или у вас есть конкретные требования к размещению данных, следуйте руководству по развертыванию.
| Variable | Определение |
|---|---|
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. Вы также можете создать список моделей для ресурса Azure OpenAI с помощью REST API.
Очистка развертываний, настраиваемых моделей и файлов обучения
Если вам больше не нужна кастомизируемая модель, можно удалить развертывание и модель. Вы также можете удалить файлы обучения и проверки, отправленные в службу при необходимости.
Удалите развертывание вашей модели
Вы можете использовать любой из этих методов для удаления развертывания для настраиваемой модели:
Удаление настраиваемой модели
Вы можете удалить настраиваемую модель с помощью Foundry.
Замечание
Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Перед удалением настроенной модели необходимо удалить развертывание модели.
Удаление обучающих файлов
Кроме того, вы можете удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, из подписки Azure OpenAI. Для удаления файлов можно использовать Foundry .
На портале Microsoft Foundry есть два уникальных способа настройки.
- Общий вид центра или проекта: поддерживает модели тонкой настройки от нескольких поставщиков, таких как Azure OpenAI, Meta Llama и Microsoft Phi.
- Представление Azure OpenAI: поддерживает только тонкую настройку моделей Azure OpenAI, но имеет поддержку дополнительных функций, таких как предварительная интеграция с Weights & Biases (W&B). Если вы настраиваете только модели Azure OpenAI, мы рекомендуем использовать эту среду.
Это важно
Элементы, обозначенные в этой статье как (предварительная версия), сейчас предлагаются в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Для получения дополнительной информации см. Дополнительные условия использования для предварительных версий Microsoft Azure.
Предпосылки
- Прочтите руководство о том, как использовать тонкую настройку Azure OpenAI.
- Вам требуется подписка Azure. Создайте его бесплатно.
- Вам нужен ресурс Azure OpenAI, расположенный в регионе, который поддерживает настройку модели Azure OpenAI. Список доступных моделей по регионам и поддерживаемым функциям см. в сводной таблице модели и доступности регионов. Дополнительные сведения см. в статье "Создание ресурса" и развертывание модели с помощью Azure OpenAI.
- Для точной настройки требуется роль владельца ИИ Azure . Хотя пользователи ИИ Azure могут обучать (точно настроить) модели, их могут развертывать только владельцы ИИ.
- Если у вас еще нет доступа к просмотру квот и развертыванию моделей на портале Foundry, вам потребуется больше разрешений.
Поддерживаемые модели
Чтобы проверить, какие регионы в настоящее время поддерживают точную настройку, ознакомьтесь со статьей о моделях.
Или можно точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}.
Просмотр рабочего процесса на портале Foundry
Просмотрите рабочий процесс тонкой настройки для использования портала 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."}]}
Формат файла многоходового чата для Azure OpenAI
Кроме того, поддерживаются несколько поворотов беседы в одной строке файла обучения JSONL. Чтобы пропустить тонкую настройку для определенных сообщений помощника, добавьте необязательную weight пару "ключ-значение". В настоящее время weight можно задать значение 0 или 1.
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}
Завершение чата с помощью визуального зрения
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Рекомендации по размеру набора данных
Чем больше примеров обучения у вас есть, тем лучше. Задания точной настройки не будут продолжаться без не менее 10 примеров обучения, но такого небольшого числа недостаточно, чтобы заметно повлиять на ответы модели. Оптимальной практикой для успешной настройки является предоставление сотен, а то и тысяч обучающих примеров. Рекомендуется начать с 50 хорошо созданных примеров.
Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучаете модель на большом количестве исходных данных без предварительного отбора только наилучших примеров, модель может работать хуже, чем ожидалось.
Создание точно настроенной модели
Портал Foundry предоставляет диалоговое окно "Создание точно настроенной модели ", чтобы создать и обучить настраиваемую модель для ресурса Azure в одном месте.
Перейдите на портал Foundry и войдите с учетными данными, имеющими доступ к ресурсу Azure OpenAI. Во время рабочего процесса входа выберите соответствующий каталог, подписку Azure и ресурс Azure OpenAI.
Перейдите в раздел"Точное настройка>", а затем выберите модель точной настройки.
Выберите модель для точной настройки и нажмите кнопку "Далее".
Откроется диалоговое окно "Создание точно настроенной модели ".
Выбор метода обучения
Первым шагом является подтверждение выбора модели и метода обучения. Не все модели поддерживают все методы обучения.
- Контролируемая донастройка: поддерживается всеми немыслящими моделями.
- Оптимизация прямых предпочтений (предварительная версия): поддерживается GPT-4o.
- Тонкая настройка с подкреплением: поддерживаемая моделями рассуждения, такими как o4-mini.
При выборе модели можно также выбрать ранее настраиваемую модель, как описано далее в этой статье.
Выбрать тип обучения
Foundry предлагает три уровня обучения для удовлетворения потребностей клиентов.
Уровень обучения "Стандартный"
Уровень "Стандартный" предоставляет выделенную емкость для точной настройки с прогнозируемой производительностью и соглашениями об уровне обслуживания. Это идеально подходит для рабочих нагрузок, требующих гарантированной пропускной способности.
Глобальный уровень обучения уровня "Стандартный"
Уровень глобального обучения расширяет возможности настройки модели благодаря более доступным ценам в рамках других глобальных услуг. Он не предлагает географическое размещение данных. Если вам нужна резиденция данных, см. список доступных регионов для выбранной модели.
Возможно, ваши данные обучения и результирующие веса модели будут скопированы в другой регион Azure.
При использовании этого уровня можно:
- Тренировать наиболее новые модели OpenAI в более чем десятке регионов Azure OpenAI.
- Воспользуйтесь преимуществами более низких тарифов за обучение на один токен по сравнению с уровнем "Стандарт".
Уровень обучения разработчика
Уровень разработчика — это экономичный вариант, который использует резервные мощности для рабочих нагрузок, не требующих незамедлительных действий или имеющих исследовательский характер. Задания на этом уровне могут прерываться и возобновляться позже, поэтому он идеально подходит для экспериментов и сценариев использования с учетом затрат.
Выбор обучающих данных
Следующим шагом является выбор существующих подготовленных обучающих данных или отправка новых подготовленных обучающих данных для использования при настройке модели, нажав кнопку "Добавить обучающие данные".
В диалоговом окне "Обучающие данные" отображаются все существующие ранее загруженные наборы данных. Он также предоставляет возможности для отправки новых обучающих данных.
Если данные обучения уже отправлены в службу, выберите "Файлы" из ресурса Подключенного искусственного интеллекта. Затем выберите файл из раскрывающегося списка.
Чтобы отправить новые обучающие данные, используйте один из следующих вариантов:
- Выберите " Отправить файлы " для отправки обучающих данных из локального файла.
- Выберите объект BLOB в Azure или другие общие веб-места, чтобы импортировать обучающие данные из хранилища объектов BLOB в Azure или другого общего веб-места.
Для больших файлов данных рекомендуется импортировать из хранилища объектов Blob. Большие файлы могут стать нестабильными при отправке их через многочастные формы, так как запросы являются атомарными и не могут быть повторно отправлены или возобновлены. Дополнительные сведения о хранилище BLOB-объектов см. в статье "Что такое хранилище BLOB-объектов Azure?".
Выберите данные проверки (необязательно)
Если у вас есть набор данных проверки, выберите "Добавить обучающие данные". Вы можете выбрать существующие подготовленные данные проверки или отправить новые подготовленные данные проверки для использования при настройке модели.
В диалоговом окне "Данные проверки " отображаются все существующие ранее загруженные наборы данных для обучения и проверки. Он также предоставляет варианты отправки новых данных проверки.
Если данные проверки уже отправлены в службу, выберите " Выбрать набор данных". Затем выберите файл из раскрывающегося списка.
Чтобы отправить новые данные проверки, используйте один из следующих вариантов:
- Выберите локальный файл для отправки данных проверки из локального файла.
- Выберите объект BLOB Azure или другое общее веб-расположение, чтобы импортировать валидационные данные из хранилища объектов BLOB Azure или другого общего веб-расположения.
Для больших файлов данных рекомендуется импортировать из хранилища объектов Blob. Большие файлы могут стать нестабильными при отправке их через многочастные формы, так как запросы являются атомарными и не могут быть повторно отправлены или возобновлены.
Сделать модель идентифицируемой (необязательно)
Мы рекомендуем включить suffix параметр, чтобы проще различать итерации вашей точно настроенной модели. Параметр suffix принимает строку до 18 символов и используется для именования полученной точно настроенной модели.
Настройка параметров обучения (необязательно)
Вы можете задать необязательное начальное значение и настроить дополнительные гиперпараметры.
Начальное значение (seed) контролирует воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если вы не указываете начальное значение, оно генерируется случайным образом для вас.
Для настройки на портале Foundry доступны следующие гиперпараметры:
| Имя | Тип | Описание |
|---|---|---|
| Размер пакета | Целое число | Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию и максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. |
| Умножение скорости обучения | Number | Множитель скорости обучения, используемый для тренировки. Скорость обучения при дотонкой настройке — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем экспериментировать со значениями в диапазоне от 0,02 до 0,2 , чтобы увидеть, что дает лучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переобучения. |
| Число эпох | Целое число | Количество эпох, на которое следует обучать модель. Под эпохой понимается один полный цикл обработки набора данных для обучения. |
Включение автоматического развертывания (необязательно)
Чтобы сэкономить время, можно дополнительно включить автоматическое развертывание для результирующей модели. Если обучение завершится успешно, модель развертывается в соответствии с выбранным типом развертывания. Имя развертывания основано на уникальном имени, созданном для вашей пользовательской модели, и необязательном суффиксе, который мог быть предоставлен вами ранее.
Замечание
В настоящее время для автоматического развертывания поддерживаются только развертывания Global Standard и Developer. Ни в чем из этих вариантов не предусмотрено размещение данных. Дополнительные сведения см. в документации по типам развертывания.
Просмотрите варианты и обучите модель
Просмотрите выбранные варианты и нажмите кнопку "Отправить ", чтобы начать обучение новой точно настроенной модели.
Проверка состояния пользовательской модели
После отправки задания тонкой настройки откроется страница с подробной информацией о вашей модели, подвергнутой тонкой настройке. Состояние и дополнительные сведения о настраиваемой модели можно найти на странице точной настройки на портале Foundry.
Ваша задача может стоять в очереди за другими задачами в системе. Обучение модели может занять несколько минут или часов в зависимости от размера модели и набора данных.
Создание контрольных точек
После завершения каждой эпохи обучения создается контрольная точка. Контрольная точка — это полностью функциональная версия модели, которая может быть развернута и использована в качестве целевой модели для последующих заданий точной настройки.
Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переобучения. После завершения задания точной настройки у вас есть три последних версии модели, доступные для развертывания. С помощью REST API можно скопировать контрольные точки между ресурсами и подписками.
Остановка и возобновление
Вы можете отслеживать ход выполнения в обоих представлениях тонкой настройки на портале Foundry. Задание проходит через те же состояния, что и обычные задания тонкой настройки (В очереди, Выполняется, Успех).
Вы также можете просматривать файлы результатов во время выполнения тренировки, чтобы получить представление о ходе процесса и идёт ли обучение так, как ожидается.
Во время обучения можно просмотреть метрики и приостановить задание по мере необходимости. Приостановка может быть полезной, если метрики не сходятся или если вы считаете, что модель не обучается с правильной скоростью. При приостановке задания обучения развертываемая контрольная точка создается после завершения оценки безопасности. Эта контрольная точка доступна для развертывания и использования для вывода или возобновления выполнения задания. Операция приостановки применима только для заданий, которые прошли по крайней мере один шаг обучения и находятся в состоянии выполнения.
Анализ пользовательской модели
Azure OpenAI присоединяет файл результатов с именем results.csv к каждому заданию тонкой настройки после завершения. Вы можете использовать файл результатов для анализа производительности обучения и проверки пользовательской модели. Идентификатор файла результата указан для каждой пользовательской модели в столбце идентификатора файла результатов на панели "Модели " портала Foundry. Идентификатор файла можно использовать для идентификации и скачивания файла результатов на панели файлов данных на портале Foundry.
Результирующий файл представляет собой CSV-файл, который содержит строку заголовка и строку для каждого шага обучения, выполненного в процессе тонкой настройки. Результирующий файл содержит следующие столбцы:
| Имя столбца | Описание |
|---|---|
step |
Количество шага обучения. Шаг обучения представляет собой один проход вперед и назад в пакете обучающих данных. |
train_loss |
Потеря для обучаемого пакета. |
train_mean_token_accuracy |
Процент токенов в батче обучения, который модель правильно предсказала. Например, если задан размер пакета 3, и ваши данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение будет равно 0.83 (5 из 6), если модель выдала предсказание [[1, 1], [0, 5], [4, 2]]. |
valid_loss |
Потеря пакета проверки. |
validation_mean_token_accuracy |
Процент токенов в валидационном пакете, который модель правильно предсказала. Например, если задан размер пакета 3, и ваши данные содержат завершения [[1, 2], [0, 5], [4, 2]], это значение будет равно 0.83 (5 из 6), если модель выдала предсказание [[1, 1], [0, 5], [4, 2]]. |
full_valid_loss |
Потеря проверки, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, потеря должна уменьшиться. |
full_valid_mean_token_accuracy |
Действительная средняя точность токена, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, точность токенов должна увеличиваться. |
Вы также можете просмотреть данные в results.csv файле как графики на портале Foundry. При выборе ссылки для обученной модели отображаются три диаграммы: функция потерь, усреднённая точность токенов и точность токенов. Если вы предоставили данные проверки, оба набора данных отображаются на одном графике.
Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если данные обучения и проверки различаются, возможно, вы переобучаетесь. Попробуйте обучать, используя меньшее количество эпох или уменьшенный коэффициент скорости обучения.
Разверните точно настроенную модель
Если вы удовлетворены метриками из задания тонкой настройки или хотите перейти к проведению вывода, необходимо развернуть модель.
Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среду разработчика.
Если вы готовы к развертыванию в рабочей среде или у вас есть конкретные требования к размещению данных, следуйте руководству по развертыванию.
Использовать развернутую модель, настроенную с высокой точностью
После развертывания точно настроенной модели ее можно использовать как любую другую развернутую модель. Вы можете использовать игровую площадку в Foundry для экспериментов с новым развертыванием. Вы также можете использовать REST API для вызова вашей точно настроенной модели из собственного приложения. Вы уже можете приступить к использованию этой новой точно настроенной модели в потоке запросов для построения генеративного приложения ИИ.
Замечание
Для моделей чата системное сообщение, которое вы используете для управления точно настроенной моделью (развернутой или доступной для тестирования на детской площадке), должно совпадать с системным сообщением, используемым для обучения. Если вы используете другое системное сообщение, модель может не выполняться должным образом.
Выполнение непрерывной точной настройки
После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.
Для точной настройки модели, которую вы ранее настроили, используйте тот же процесс, который описан в разделе "Создание точно настроенной модели". Но вместо указания имени универсальной базовой модели можно указать уже настроенную модель. Настроенная настраиваемая модель выглядит следующим образом gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft.
Очистка развертываний, пользовательских моделей и файлов обучения
Если вам больше не нужна настраиваемая модель, можно удалить развертывание и модель. Вы также можете удалить файлы обучения и проверки, отправленные в службу при необходимости.
Удалите развертывание вашей модели
Это важно
После развертывания настраиваемой модели, если развертывание в любое время остается неактивным в течение более 15 дней, развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более 15 дней назад и непрерывно в течение 15 дней не были сделаны вызовы чата или API ответа.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель. Настраиваемая модель может быть развернута в любое время.
Как описано в ценах на Azure OpenAI в Microsoft Foundry Models, каждая настраиваемая (точно настроенная) модель, которая была развернута, несет почасовую стоимость хостинга, независимо от того, совершаются ли завершения чата или вызовы API для ответов на модель. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в статье "Планирование затрат на Azure OpenAI" и управление ими.
Развертывание настраиваемой модели можно удалить на панели "Развертывания " на портале Foundry. Выберите развертывание для удаления и затем выберите "Удалить".
Удалите вашу пользовательскую модель
Вы можете удалить настраиваемую модель на панели Модели на портале Foundry. Выберите пользовательскую модель для удаления на вкладке "Настраиваемые модели " и нажмите кнопку "Удалить".
Замечание
Вы не можете удалить пользовательскую модель, если она имеет существующее развертывание. Перед тем как удалить пользовательскую модель, необходимо удалить её развертывание.
Удаление обучающих файлов
При необходимости можно удалить файлы обучения и проверки, отправленные для обучения, а также файлы результатов, созданные во время обучения, на панели "Данные управления>и индексы " на портале Foundry. Выберите файл для удаления и нажмите кнопку "Удалить".
Предпосылки
- Прочтите руководство о том, как использовать тонкую настройку Azure OpenAI.
- Вам требуется подписка Azure. Создайте его бесплатно.
- Вам нужен ресурс Azure OpenAI. Дополнительные сведения см. в статье "Создание ресурса" и развертывание модели с помощью Azure OpenAI.
- Вам нужны следующие библиотеки Python:
os,json,requests.openai - Вам нужна библиотека OpenAI Python.
- Для точной настройки требуется роль владельца ИИ Azure . Хотя пользователи ИИ Azure могут обучать (точно настроить) модели, их могут развертывать только владельцы ИИ.
- Если у вас еще нет доступа к просмотру квот и развертыванию моделей на портале Foundry, вам потребуется больше разрешений.
Поддерживаемые модели
Чтобы проверить, какие регионы в настоящее время поддерживают точную настройку, ознакомьтесь со статьей о моделях.
Или можно точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}.
Просмотр рабочего процесса пакета 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 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. Большие файлы могут стать нестабильными при отправке их через многочастные формы, так как запросы являются атомарными и не могут быть повторно отправлены или возобновлены. Дополнительные сведения о хранилище BLOB-объектов см. в статье "Что такое хранилище 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 для типа обучения, так как он обеспечивает экономию затрат и использует глобальную емкость для ускорения очередей. Однако он копирует данные и весовые значения за пределами текущего региона ресурсов. Если необходимо соблюдение требований по размещению данных, используйте модель, которая поддерживает обучение стандартного уровня.
Вы также можете передать дополнительные необязательные параметры, такие как гиперпараметры, чтобы получить более широкий контроль над процессом тонкой настройки. Для начального обучения рекомендуется использовать автоматические значения по умолчанию, которые присутствуют без указания этих параметров.
Поддерживаемые в настоящее время гиперпараметры для защищенной тонкой настройки:
| Имя | Тип | Описание |
|---|---|---|
batch_size |
Целое число | Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию и максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. |
learning_rate_multiplier |
Number | Множитель скорости обучения, используемый для тренировки. Скорость обучения при дотонкой настройке — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 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. При выборе ссылки для обученной модели отображаются три диаграммы: функция потерь, усреднённая точность токенов и точность токенов. Если вы предоставили данные проверки, оба набора данных отображаются на одном графике.
Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если данные обучения и проверки различаются, возможно, вы переобучаетесь. Попробуйте обучать, используя меньшее количество эпох или уменьшенный коэффициент скорости обучения.
Разверните точно настроенную модель
Если вы удовлетворены метриками из задания тонкой настройки или хотите перейти к проведению вывода, необходимо развернуть модель.
Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среду разработчика.
В отличие от предыдущих команд ПАКЕТА SDK, для развертывания необходимо использовать API уровня управления. Для этой задачи требуется отдельная авторизация, другой путь к API и другая версия API.
| Variable | Определение |
|---|---|
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 символов в имя настраиваемой модели.
Если вы не уверены в идентификаторе существующей точно настроенной модели, эти сведения можно найти на странице моделей Microsoft Foundry. Вы также можете создать список моделей для ресурса Azure OpenAI с помощью REST API.
Очистка развертываний, настраиваемых моделей и файлов обучения
Если вам больше не нужна кастомизируемая модель, можно удалить развертывание и модель. Вы также можете удалить файлы обучения и проверки, отправленные в службу при необходимости.
Удалите развертывание вашей модели
Это важно
После развертывания настраиваемой модели, если развертывание в любое время остается неактивным в течение более 15 дней, развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более 15 дней назад и непрерывно в течение 15 дней не были сделаны вызовы чата или API ответа.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель. Настраиваемая модель может быть развернута в любое время.
Как описано в ценах на Azure OpenAI в Microsoft Foundry Models, каждая настраиваемая (точно настроенная) модель, которая была развернута, несет почасовую стоимость хостинга, независимо от того, совершаются ли завершения чата или вызовы API для ответов на модель. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в статье "Планирование затрат на Azure OpenAI" и управление ими.
Вы можете использовать любой из этих методов для удаления развертывания для настраиваемой модели:
Удаление настраиваемой модели
Вы можете удалить настраиваемую модель с помощью Foundry.
Замечание
Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Перед удалением настроенной модели необходимо удалить развертывание модели.
Удаление обучающих файлов
Кроме того, вы можете удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, из подписки Azure OpenAI. Для удаления обучающих, проверки и результирующих файлов можно использовать следующие методы:
В следующем примере Python используется комплект разработки программного обеспечения (SDK) для удаления файлов обучения, проверки и результатов вашей настраиваемой модели.
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)
Предпосылки
- Прочтите руководство о том, как использовать тонкую настройку Azure OpenAI.
- Вам требуется подписка Azure. Создайте его бесплатно.
- Вам нужен ресурс Azure OpenAI. Дополнительные сведения см. в статье "Создание ресурса" и развертывание модели с помощью Azure OpenAI.
- Для точной настройки требуется роль владельца ИИ Azure. Хотя пользователи ИИ Azure могут обучать (точно настроить) модели, их могут развертывать только владельцы ИИ.
- Если у вас еще нет доступа к просмотру квот и развертыванию моделей на портале Foundry, вам потребуется больше разрешений.
Поддерживаемые модели
Чтобы проверить, какие регионы в настоящее время поддерживают точную настройку, ознакомьтесь со статьей о моделях.
Или можно точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}.
Просмотр рабочего процесса для 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 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. Большие файлы могут стать нестабильными при отправке их через многочастные формы, так как запросы являются атомарными и не могут быть повторно отправлены или возобновлены. Дополнительные сведения о хранилище BLOB-объектов см. в статье "Что такое хранилище 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.
Этот пример включает передачу параметра начального числа. Сид определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если вы не указываете начальное число, оно автоматически создается для вас.
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 |
Number | Множитель скорости обучения, используемый для тренировки. Скорость обучения при дотонкой настройке — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 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"
Остановка и возобновление
Во время обучения можно просмотреть журналы и метрики и приостановить задание по мере необходимости. Приостановка может быть полезной, если метрики не сходятся или если вы считаете, что модель не обучается с правильной скоростью.
После приостановки задания обучения и завершения оценки безопасности создается развертываемая контрольная точка. Эта контрольная точка доступна для развертывания и использования для вывода или возобновления выполнения задания.
Операция приостановки применима только для заданий, которые прошли по крайней мере один шаг обучения и находятся в состоянии выполнения.
Пауза
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 и развертывать модель из этого расположения.
Замечание
Удаление контрольной точки модели в исходном регионе не приводит к удалению модели в целевом регионе. Чтобы удалить модель в обоих регионах после её копирования, необходимо развернуть модель в каждом регионе отдельно.
Предпосылки
- Целевой ресурс или учетная запись должны иметь по крайней мере одно задание тонкой настройки.
- Целевой ресурс или учетная запись не должны отключать доступ к общедоступной сети (по крайней мере при отправке запроса на копирование).
- Вы можете скопировать только в целевую учетную запись, если учетная запись, инициирующая копию, имеет достаточные разрешения для доступа к целевой учетной записи.
Настройка разрешений
- Создайте управляемое удостоверение, назначаемое пользователем.
- Предоставьте роль Azure AI User вашему пользовательскому управляемому удостоверению на целевом ресурсе или учетной записи.
- Назначьте управляемое удостоверение, назначаемое пользователем, учетной записи исходного ресурса.
Скопируйте модель
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. При выборе ссылки для обученной модели отображаются три диаграммы: функция потерь, усреднённая точность токенов и точность токенов. Если вы предоставили данные проверки, оба набора данных отображаются на одном графике.
Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если данные обучения и проверки различаются, возможно, вы переобучаетесь. Попробуйте обучать, используя меньшее количество эпох или уменьшенный коэффициент скорости обучения.
Разверните точно настроенную модель
Если вы удовлетворены метриками из задания тонкой настройки или хотите перейти к проведению вывода, необходимо развернуть модель.
Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среду разработчика.
Если вы готовы к развертыванию в рабочей среде или у вас есть конкретные требования к размещению данных, следуйте руководству по развертыванию.
| Variable | Определение |
|---|---|
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. Вы также можете создать список моделей для ресурса Azure OpenAI с помощью REST API.
Очистка развертываний, настраиваемых моделей и файлов обучения
Если вам больше не нужна кастомизируемая модель, можно удалить развертывание и модель. Вы также можете удалить файлы обучения и проверки, отправленные в службу при необходимости.
Удалите развертывание вашей модели
Вы можете использовать любой из этих методов для удаления развертывания для настраиваемой модели:
Удаление настраиваемой модели
Вы можете удалить настраиваемую модель с помощью Foundry.
Замечание
Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Перед удалением настроенной модели необходимо удалить развертывание модели.
Удаление обучающих файлов
Кроме того, вы можете удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, из подписки Azure OpenAI. Для удаления файлов можно использовать Foundry .