Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure OpenAI в моделях Azure AI Foundry позволяет адаптировать наши модели к личным наборам данных с помощью процесса, известного как тонкой настройки. Этот шаг настройки позволяет получить больше из службы, предоставив следующее:
- Более качественные результаты, чем то, что вы можете получить только от промпт-инжиниринга
- Возможность обучать модель на большем количестве примеров, чем вмещается в её максимальный контекст запроса.
- Экономия токенов из-за более коротких запросов
- Запросы, для которых требуется низкая задержка, особенно при использовании небольших моделей.
В отличие от нескольких выстрелов обучение, тонкой настройке модели улучшается путем обучения на многих примерах, чем может соответствовать запросу, что позволяет добиться лучших результатов по широкому количеству задач. Так как при тонкой настройке вес базовой модели корректируется для повышения производительности конкретной задачи, вам не придется включать столько примеров или инструкций в запрос. Это означает меньше отправленных текста и меньше маркеров, обработанных при каждом вызове API, потенциально экономя затраты и повышая задержку запроса.
Мы используем LoRA или низкоранговую адаптацию для точной настройки моделей таким образом, чтобы снизить их сложность, не влияя на их производительность. Этот метод работает, приближая исходную матрицу высокого ранга к матрице с более низким рангом, тем самым настраивая лишь небольшую часть важных параметров во время контролируемого обучения, что делает модель более управляемой и эффективной. Для пользователей это делает обучение быстрее и более доступным, чем другие методы.
На портале Azure AI Foundry есть два уникальных способа настройки.
- Представление концентратора или проекта — поддерживает модели точной настройки от нескольких поставщиков, включая Azure OpenAI, Meta Llama, Microsoft Phi и т. д.
- Ориентированное представление Azure OpenAI — поддерживает только детализированную настройку моделей Azure OpenAI, но поддерживает дополнительные функции, такие как интеграция с предварительной версией "Весовые и предвзятые" (W&B).
Если вы настраиваете только модели Azure OpenAI, мы рекомендуем использовать персонализированную настройку Azure OpenAI, которая доступна путем перехода к https://ai.azure.com/resource/overview.
Это важно
Элементы, обозначенные в этой статье как (предварительная версия), сейчас предлагаются в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Для получения дополнительной информации см. Дополнительные условия использования для предварительных версий Microsoft Azure.
Предпосылки
- Ознакомьтесь с руководством по настройке Azure OpenAI.
- Подписка Azure. Создайте его бесплатно.
- Ресурс Azure OpenAI, расположенный в регионе, который поддерживает настройку модели Azure OpenAI. Проверьте доступность сводной таблицы модели и региона для списка доступных моделей по регионам и поддерживаемым функциям. Дополнительные сведения см. в статье "Создание ресурса" и развертывание модели с помощью Azure OpenAI.
- Для доступа к тонкой настройке требуется специалист OpenAI Cognitive Services.
- Если у вас еще нет доступа к квоте и развертыванию моделей на портале Azure AI Foundry, вам потребуются дополнительные разрешения.
Поддерживаемые модели
Ознакомьтесь со страницей моделей, чтобы проверить, какие регионы в настоящее время поддерживают точную настройку.
Или можно точно настроить ранее настроенную модель, отформатированную как base-model.ft-{jobid}.
Просмотр рабочего процесса на портале Azure AI Foundry
Ознакомьтесь с рабочим процессом точной настройки для использования портала Azure AI Foundry:
- Подготовьте данные обучения и проверки.
- Используйте диалоговое окно "Создание точно настроенной модели " на портале Azure AI Foundry для обучения пользовательской модели.
- Выберите метод обучения.
- Выберите базовую модель.
- Выбор типа обучения
- Выберите данные обучения.
- При необходимости выберите данные проверки.
- При необходимости настройте параметры задачи для задачи тонкой настройки.
- При необходимости включите автоматическое развертывание для результирующей пользовательской модели.
- Пересмотрите свои варианты и обучите новую пользовательскую модель.
- Проверьте состояние вашей настраиваемой модели.
- Разверните настраиваемую модель для использования.
- Используйте настраиваемую модель.
- При необходимости проанализируйте настраиваемую модель для повышения производительности и соответствия.
Подготовьте данные для обучения и проверки
Обучающие данные и наборы данных проверки состоят из входных и выходных примеров того, как модель должна выполняться.
Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL) и должны быть отформатированы в формате беседы, который используется API завершения чата .
Обычно рекомендуется использовать инструкции и подсказки, которые, по вашему мнению, работали лучше всего в каждом тренировочном примере. Это поможет вам получить лучшие результаты, особенно если у вас меньше сотни примеров.
Пример формата файла
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Многоэтапный формат файла чата Azure OpenAI
Кроме того, поддерживается несколько поворотов беседы в одной строке файла обучения jsonl. Чтобы пропустить тонкую настройку для определенных сообщений помощника, добавьте пару необязательных weight
значений ключа.
weight
В настоящее время можно задать значение 0 или 1.
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}
Завершение чата с помощью визуального зрения
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.
Рекомендации по размеру наборов данных
Чем больше примеров обучения у вас есть, тем лучше. Задания точной настройки не будут продолжаться без по крайней мере 10 примеров обучения, но такого небольшого числа недостаточно, чтобы заметно повлиять на ответы модели. Рекомендуется предоставить сотни, если не тысячи, примеры обучения, которые будут успешными. Рекомендуется начать с 50 хорошо созданных обучающих данных.
Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучите модель на большом объеме внутренних данных, без предварительной очистки набора данных для самых качественных примеров, вы можете в конечном итоге получить модель, которая работает гораздо хуже, чем ожидалось.
Создание точно настроенной модели
Портал Azure AI Foundry предоставляет диалоговое окно "Создание точно настроенной модели ", поэтому в одном месте можно легко создать и обучить настраиваемую модель для ресурса Azure.
Перейдите на портал https://ai.azure.com/ Azure AI Foundry и войдите с учетными данными, имеющими доступ к ресурсу Azure OpenAI. Во время рабочего процесса входа выберите соответствующий каталог, подписку Azure и ресурс Azure OpenAI.
На портале Azure AI Foundry перейдите на > панель "Средства тонкой настройки" и выберите модель точной настройки.
Выберите модель для точной настройки и нажмите кнопку "Далее ".
Теперь вы увидите диалоговое окно "Создание точно настроенной модели".
Выбор метода обучения
Первым шагом является подтверждение выбора модели и метода обучения. Не все модели поддерживают все методы обучения.
- Контролируемая тонкая настройка (SFT): поддерживается всеми моделями, не использующими рассуждение.
- Прямая оптимизация предпочтений (предварительная версия) (DPO): поддерживается GPT-4o.
- Тонкая настройка с подкреплением (предварительная версия) (RFT): поддерживается рациональными моделями, например o4-mini.
При выборе модели можно также выбрать ранее настроенную модель.
Выбрать тип обучения
Выберите уровень тренировки, который вы хотите использовать для задачи тонкой настройки.
- Стандартный: обучение выполняется в текущем регионе ресурса Azure OpenAI, обеспечивая сохранность данных.
- Глобальный (предварительная версия): более доступное обучение для каждого токена, не предлагает размещение данных.
Если у вас нет требований к месту размещения данных, Глобальный является хорошим выбором для использования учебных мощностей за пределами вашего текущего региона. Хотя в общедоступной предварительной версии Global может быть недоступен в вашем текущем регионе. Проконсультироваться
В некоторых случаях Стандарт может быть недоступен в вашем текущем регионе. Если вам требуется расположение данных, ознакомьтесь с регионами, указанными в разделе доступность модели для вашей выбранной модели.
Выбор обучающих данных
Следующий шаг — выбрать существующие подготовленные данные обучения или отправить новые подготовленные обучающие данные для использования при настройке модели, нажав кнопку "Добавить обучающие данные".
В диалоговом окне "Обучающие данные " отображаются все существующие ранее загруженные наборы данных, а также предоставляются параметры для отправки новых обучающих данных.
Если данные обучения уже отправлены в службу, выберите "Файлы" из ресурса Подключенного искусственного интеллекта.
- Выберите файл из раскрывающегося списка.
Чтобы отправить новые обучающие данные, используйте один из следующих вариантов:
- Выберите " Отправить файлы " для отправки обучающих данных из локального файла.
- Выберите Azure Blob или другие общие веб-расположения, чтобы импортировать данные обучения из Azure Blob или другого общего веб-расположения.
Для больших файлов данных рекомендуется импортировать из хранилища BLOB-объектов Azure. Большие файлы могут работать нестабильно при отправке через многокомпонентные формы, так как запросы являются атомарными, и их невозможно повторить или возобновить. Дополнительные сведения о Хранилище BLOB-объектов Azure см. в разделе "Что такое Хранилище BLOB-объектов Azure?".
Замечание
Обучающие файлы данных должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.
Выберите данные проверки (необязательно)
Если у вас есть набор данных проверки, выберите "Добавить обучающие данные". Вы можете выбрать существующие подготовленные данные проверки или отправить новые подготовленные данные проверки для использования при настройке модели.
В диалоговом окне "Данные проверки " отображаются существующие ранее загруженные наборы данных для обучения и проверки и предоставляются параметры, с помощью которых можно отправить новые данные проверки.
Если данные проверки уже отправлены в службу, выберите " Выбрать набор данных".
- Выберите файл из списка, показанного в области проверки данных.
Чтобы отправить новые данные проверки, используйте один из следующих вариантов:
- Выберите локальный файл для отправки данных проверки из локального файла.
- Выберите хранилище BLOB Azure или другие общие веб-расположения, чтобы импортировать данные проверки из хранилища BLOB Azure или другого общего веб-расположения.
Для больших файлов данных рекомендуется импортировать из хранилища BLOB-объектов Azure. Большие файлы могут работать нестабильно при отправке через многокомпонентные формы, так как запросы являются атомарными, и их невозможно повторить или возобновить.
Замечание
Как и для обучающих файлов данных, файлы данных проверки должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.
Сделать модель идентифицируемой (необязательно)
Мы также рекомендуем включить suffix
параметр, чтобы упростить различие между различными итерациями вашей точно настроенной модели.
suffix
принимает строку длиной до 18 символов и используется при именовании модели после её тонкой настройки.
Настройка параметров обучения (необязательно)
Вы можете предоставить дополнительное начальное значение и настроить дополнительные гиперпараметры.
Начальное значение определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если начальное значение не указано, он будет случайным образом создан для вас.
Следующие гиперпараметры доступны для настройки с помощью портала Azure AI Foundry:
Имя | Тип | Описание |
---|---|---|
Размер пакета | целое число | Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию, а также максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. |
Умножение скорости обучения | число/номер | Множитель скорости обучения, используемый для тренировки. Скорость обучения точной настройки — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0,02 до 0,2, чтобы увидеть, что дает лучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переобучения. |
Число эпох | целое число | Количество эпох, на которое следует обучать модель. Под эпохой понимается один полный цикл обработки набора данных для обучения. |
Включение автоматического развертывания (необязательно)
Чтобы сэкономить время, можно включить автоматическое развертывание для результирующей модели. Если обучение завершено успешно, модель будет развернута с помощью выбранного типа развертывания. Развертывание будет названо на основе уникального имени, созданного для пользовательской модели, и необязательного суффикса , который вы могли предоставить ранее.
Замечание
В настоящее время для автоматического развертывания поддерживаются только глобальные развертывания уровня "Стандартный" и "Разработчик". Нет ни одного из этих вариантов размещения данных. Дополнительные сведения см. в документации по типу развертывания .
Просмотрите варианты и обучите модель
Просмотрите выбранные варианты и нажмите кнопку "Отправить ", чтобы начать обучение новой точно настроенной модели.
Проверка состояния пользовательской модели
После отправки задания по точной настройке вы увидите страницу со сведениями о вашей точно настроенной модели. Состояние и дополнительные сведения о настроенной модели можно найти на странице точной настройки на портале Azure AI Foundry.
Задание может находиться в очереди за другими заданиями в системе. Обучение модели может занять несколько минут или часов в зависимости от размера модели и набора данных.
Контрольные точки
При завершении каждой эпохи обучения создается контрольная точка. Контрольная точка — это полностью функциональная версия модели, которую можно развернуть и использовать в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переобучения. Когда задание точной настройки завершится, у вас будут три последние версии модели, доступные для развертывания.
Анализ пользовательской модели
Azure OpenAI присоединяет файл результатов с именем results.csv к каждому заданию тонкой настройки после завершения. Вы можете использовать файл результатов для анализа производительности обучения и проверки пользовательской модели. Идентификатор файла результата указан для каждой пользовательской модели в столбце идентификатора файла результатов на панели "Модели " на портале Azure AI Foundry. Идентификатор файла можно использовать для идентификации и скачивания файла результатов на панели файлов данных на портале Azure AI 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 как графики на портале Azure AI Foundry. Выберите ссылку для обученной модели, и вы увидите три диаграммы: ошибка, средняя точность токена и точность токена. Если вы предоставили данные проверки, оба набора данных будут отображаться на одном графике.
Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если вы видите расхождение между данными обучения и валидации, это может указывать на то, что вы переобучаетесь. Попробуйте обучение с меньшим количеством эпох или меньшим коэффициентом скорости обучения.
Разверните точно настроенную модель
После того как вас устраивают метрики по заданию тонкой настройки или если вы хотите перейти к этапу вывода, необходимо развернуть модель.
Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среде разработчика.
Если вы готовы к развертыванию в промышленной среде или у вас есть особые требования к размещению данных, следуйте нашему руководству по развертыванию.
Использовать развернутую модель, настроенную с высокой точностью
После развертывания настроенной модели ее можно использовать как любую другую развернутую модель. Вы можете использовать площадку тестирования в Azure AI Foundry для экспериментов с новой системой. Вы также можете использовать REST API для вызова вашей точно настроенной модели из собственного приложения. Вы уже можете приступить к использованию этой новой точно настроенной модели в потоке запросов для построения генеративного приложения ИИ.
Замечание
Для моделей чата системное сообщение, которое вы используете для управления точно настроенной моделью (развернутой или доступной для тестирования на детской площадке), должно совпадать с системным сообщением, которое вы использовали для обучения. Если вы используете другое системное сообщение, модель может не выполняться должным образом.
Непрерывная настройка
После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.
Для точной настройки модели, которую вы ранее настроили, вы будете использовать тот же процесс, что и при создании точно настроенной модели, но вместо указания имени универсальной базовой модели можно указать уже настраиваемую модель. Пользовательская настроенная модель будет выглядеть так: gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft
Очистка развертываний, пользовательских моделей и файлов обучения
После завершения работы с вашей пользовательской моделью вы можете удалить развертывание и саму модель. При необходимости вы также можете удалить файлы обучения и проверки, отправленные в службу.
Удалите развертывание вашей модели
Это важно
После развертывания настраиваемой модели, если в любое время развертывание остается неактивным в течение более чем пятнадцати дней (15) развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более 15 дней назад, и в течение непрерывного 15-дневного периода не выполнялись вызовы завершений задач или завершений чата.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель, а настраиваемую модель можно повторно развернуть в любое время. Как описано в разделе Azure OpenAI в разделе «Цены на модели Azure AI Foundry», каждая кастомизируемая (тщательно настроенная) модель, развернутая, несет почасовую стоимость размещения независимо от того, делаются ли к модели запросы на завершение или на завершение чата. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в руководстве по управлению затратами на Azure OpenAI.
Вы можете удалить развертывание для вашей настраиваемой модели на панели Развертывания в портале Azure AI Foundry. Выберите развертывание для удаления и нажмите кнопку "Удалить ", чтобы удалить развертывание.
Удалите вашу пользовательскую модель
Вы можете удалить пользовательскую модель на панели "Модели " на портале Azure AI Foundry. Выберите пользовательскую модель, чтобы удалить ее на вкладке "Настраиваемые модели ", а затем выберите "Удалить ", чтобы удалить пользовательскую модель.
Замечание
Вы не можете удалить пользовательскую модель, если она имеет существующее развертывание. Сначала необходимо удалить развертывание модели, прежде чем можно будет удалить пользовательскую модель.
Удаление обучающих файлов
Вы можете по желанию удалить файлы обучения и проверки, которые вы загрузили для обучения, и файлы результатов, созданные во время обучения, на панели Управление>Данные + индексы на портале Azure AI Foundry. Выберите файл, который нужно удалить, и нажмите кнопку "Удалить ", чтобы удалить файл.
Предпосылки
- Ознакомьтесь с руководством по настройке Azure OpenAI.
- Подписка Azure. Создайте его бесплатно.
- Ресурс Azure OpenAI. Дополнительные сведения см. в статье "Создание ресурса" и развертывание модели с помощью Azure OpenAI.
- Следующие библиотеки Python:
os
,json
,requests
.openai
- Библиотека Python OpenAI должна иметь по крайней мере версию 0.28.1.
- Для доступа к тонкой настройке требуется специалист OpenAI Cognitive Services.
- Если у вас еще нет доступа к квоте и развертыванию моделей на портале Azure AI Foundry, вам потребуются дополнительные разрешения.
Замечание
REST API в настоящее время не поддерживает глобальные задания обучения. Проверка глобальных заданий обучения через API может возвращать неверные сведения.
Поддерживаемые модели
Ознакомьтесь со страницей моделей, чтобы проверить, какие регионы в настоящее время поддерживают точную настройку.
Или вы можете точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}
.
Просмотр рабочего процесса пакета SDK для Python
Ознакомьтесь с рабочим процессом точной настройки пакета SDK для Python с Azure OpenAI:
- Подготовьте данные обучения и проверки.
- Выберите базовую модель.
- Отправьте данные обучения.
- Обучите новую кастомизированную модель.
- Проверьте состояние настраиваемой модели.
- Разверните настраиваемую модель для использования.
- Используйте настраиваемую модель.
- Опционально проведите анализ вашей настраиваемой модели на производительность и соответствие.
Подготовьте данные для обучения и проверки
Обучающие данные и наборы данных проверки состоят из входных и выходных примеров того, как модель должна выполняться.
Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL) и должны быть отформатированы в формате беседы, который используется API завершения чата .
Если вы хотите пошаговое руководство по настройке точной настройкиgpt-4o-mini-2024-07-18
, ознакомьтесь с руководством по настройке Azure OpenAI.
Пример формата файла
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Формат файла многократного чата
Кроме того, поддерживается несколько поворотов беседы в одной строке файла обучения jsonl. Чтобы пропустить тонкую настройку для определенных сообщений помощника, добавьте пару необязательных weight
значений ключа.
weight
В настоящее время можно задать значение 0 или 1.
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}
Завершение чата с помощью визуального зрения
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.
Создание наборов данных для обучения и проверки
Чем больше примеров обучения у вас есть, тем лучше. Задания тонкой настройки не будут продолжаться без по крайней мере 10 примеров обучения, но такое небольшое число недостаточно, чтобы заметно повлиять на ответы модели. Рекомендуется предоставить сотни, если не тысячи, примеры обучения, которые будут успешными.
Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучите модель на большом объеме внутренних данных, без предварительной очистки набора данных для самых качественных примеров, вы можете в конечном итоге получить модель, которая работает гораздо хуже, чем ожидалось.
Отправка обучающих данных
Следующим шагом является выбор существующих подготовленных обучающих данных или отправка новых подготовленных обучающих данных для использования при настройке модели. После подготовки обучающих данных вы можете передать файлы в службу. Существует два способа отправки обучающих данных:
Для больших файлов данных рекомендуется импортировать из хранилища BLOB-объектов Azure. Большие файлы могут работать нестабильно при отправке через многокомпонентные формы, так как запросы являются атомарными, и их невозможно повторить или возобновить. Дополнительные сведения о хранилище BLOB-объектов Azure см. в статье "Что такое хранилище BLOB-объектов Azure"?
Замечание
Обучающие файлы данных должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.
В следующем примере Python отправляются локальные файлы обучения и проверки с помощью пакета SDK для Python и извлекаются идентификаторы возвращенных файлов.
# Upload fine-tuning files
import os
from openai import AzureOpenAI
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-10-21" # This API version or later is required to access seed/events/checkpoint capabilities
)
training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'
# Upload the training and validation dataset files to Azure OpenAI with the SDK.
training_response = client.files.create(
file=open(training_file_name, "rb"), purpose="fine-tune"
)
training_file_id = training_response.id
validation_response = client.files.create(
file=open(validation_file_name, "rb"), purpose="fine-tune"
)
validation_file_id = validation_response.id
print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)
Создание настраиваемой модели
После загрузки файлов для обучения и проверки вы можете начать процесс тонкой настройки.
В следующем примере кода на Python показано, как создать новую задачу настройки с помощью Python SDK.
В этом примере мы также передаём начальный параметр. Сид определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если семя не указано, оно будет сгенерировано для вас.
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-4.1-2025-04-14", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters.
seed = 105 # seed parameter controls reproducibility of the fine-tuning job. If no seed is specified one will be generated automatically.
)
job_id = response.id
# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.
print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))
Кроме того, можно передать дополнительные необязательные параметры, такие как гиперпараметры, чтобы получить более широкий контроль над процессом тонкой настройки. Для начального обучения рекомендуется использовать автоматические значения по умолчанию, которые присутствуют без указания этих параметров.
Текущие поддерживаемые гиперпараметры для точной настройки:
Имя | Тип | Описание |
---|---|---|
batch_size |
целое число | Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию, а также максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. |
learning_rate_multiplier |
число/номер | Множитель скорости обучения, используемый для тренировки. Скорость обучения точной настройки — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0,02 до 0,2, чтобы увидеть, что дает лучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переобучения. |
n_epochs |
целое число | Количество эпох, на которое следует обучать модель. Под эпохой понимается один полный цикл обработки набора данных для обучения. |
seed |
целое число | Сид определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если семя не указано, оно будет сгенерировано для вас. |
Чтобы задать пользовательские гиперпараметры с версией 1.x API OpenAI Python:
from openai import AzureOpenAI
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-10-21" # This API version or later is required
)
client.fine_tuning.jobs.create(
training_file="file-abc123",
model="gpt-4.1-2025-04-14", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters.
hyperparameters={
"n_epochs":2
}
)
Проверьте статус задания по точной настройке
response = client.fine_tuning.jobs.retrieve(job_id)
print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))
Список событий настройки параметров
Чтобы изучить отдельные события тонкой настройки, которые были созданы во время обучения, вам может понадобиться обновить клиентскую библиотеку OpenAI до последней версии. После этого можно выполнить эту команду с помощью pip install openai --upgrade
.
response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))
Контрольные точки
При завершении каждой эпохи обучения создается контрольная точка. Контрольная точка — это полностью функциональная версия модели, которую можно развернуть и использовать в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переобучения. Когда задание точной настройки завершится, у вас будут три последние версии модели, доступные для развертывания. Последняя эпоха будет представлена вашей тонкой моделью, предыдущие две эпохи будут доступны в качестве контрольных точек.
Чтобы получить список контрольных точек, связанных с конкретным заданием точной настройки, можно выполнить команду list checkpoints. Для выполнения этой команды может потребоваться обновить клиентную библиотеку OpenAI до последней версии pip install openai --upgrade
.
response = client.fine_tuning.jobs.checkpoints.list(job_id)
print(response.model_dump_json(indent=2))
Анализ настраиваемой модели
Azure OpenAI присоединяет файл результатов с именем results.csv к каждому заданию точной настройки после завершения. Вы можете использовать файл результатов для анализа производительности обучения и проверки настраиваемой модели. Идентификатор файла результата указан для каждой настраиваемой модели, и вы можете использовать пакет SDK Для Python для получения идентификатора файла и скачивания файла результатов для анализа.
В следующем примере Python извлекается идентификатор файла первого файла результатов, присоединенного к заданию тонкой настройки для настраиваемой модели, а затем используется пакет SDK Python для скачивания файла в текущий рабочий каталог для анализа.
# Retrieve the file ID of the first result file from the fine-tuning job
# for the customized model.
response = client.fine_tuning.jobs.retrieve(job_id)
if response.status == 'succeeded':
result_file_id = response.result_files[0]
retrieve = client.files.retrieve(result_file_id)
# Download the result file.
print(f'Downloading result file: {result_file_id}')
with open(retrieve.filename, "wb") as file:
result = client.files.content(result_file_id).read()
file.write(result)
Результатом будет CSV-файл, содержащий строку заголовка и строку для каждого шага обучения, выполняемого в процессе тонкой настройки. Результирующий файл содержит следующие столбцы:
Имя столбца | Описание |
---|---|
step |
Количество шага обучения. Шаг обучения представляет собой один проход вперед и назад в пакете обучающих данных. |
train_loss |
Потеря для обучаемого пакета. |
train_mean_token_accuracy |
Процент токенов в пакете обучения, правильно предсказанных моделью. Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]] , это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]] . |
valid_loss |
Потеря пакета проверки. |
validation_mean_token_accuracy |
Процент токенов в пакете проверки, которые модель правильно предсказала. Например, если размер пакета имеет значение 3, а данные содержат завершения [[1, 2], [0, 5], [4, 2]] , это значение равно 0,83 (5 из 6), если модель предсказала [[1, 1], [0, 5], [4, 2]] . |
full_valid_loss |
Потеря проверки, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, потеря должна уменьшиться. |
full_valid_mean_token_accuracy |
Действительная средняя точность токена, вычисляемая в конце каждой эпохи. Когда обучение идет хорошо, точность токенов должна увеличиваться. |
Вы также можете просмотреть данные в файле results.csv как графики на портале Azure AI Foundry. Выберите ссылку для обученной модели, и вы увидите три диаграммы: ошибка, средняя точность токена и точность токена. Если вы предоставили данные проверки, оба набора данных будут отображаться на одном графике.
Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если вы видите расхождение между данными обучения и валидации, это может указывать на то, что вы переобучаетесь. Попробуйте обучение с меньшим количеством эпох или меньшим коэффициентом скорости обучения.
Разверните точно настроенную модель
Когда вы удовлетворены метриками из задания тонкой настройки или просто хотите перейти к предсказанию, необходимо развернуть модель.
Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среде разработчика.
В отличие от предыдущих команд ПАКЕТА SDK, развертывание должно выполняться с помощью API уровня управления, который требует отдельной авторизации, другого пути API и другой версии API.
переменная | Определение |
---|---|
токен | Существует несколько способов создания токена авторизации. Самый простой способ начального тестирования — запустить Cloud Shell на портале Azure. Затем выполните az account get-access-token . Этот маркер можно использовать в качестве временного маркера авторизации для тестирования API. Мы рекомендуем сохранить это в новой переменной окружения. |
подписка | Идентификатор подписки для связанного ресурса Azure OpenAI. |
ресурсная группа | Имя группы ресурсов для ресурса Azure OpenAI. |
имя_ресурса | Название ресурса Azure OpenAI. |
имя_развертывания_модели | Настраиваемое имя для нового точно настроенного развертывания модели. Это имя будет использоваться в вашем коде при совершении вызовов завершения чата. |
тонко настроенная модель | Извлеките это значение из результатов задания по точной настройке на предыдущем шаге. Оно выглядит так: gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83 . Вам нужно добавить это значение в deploy_data json. В качестве альтернативы вы также можете развернуть контрольную точку, передав ID контрольной точки, который будет отображаться в формате ftchkpt-e559c011ecc04fc68eaa339d8227d02d |
import json
import os
import requests
token= os.getenv("<TOKEN>")
subscription = "<YOUR_SUBSCRIPTION_ID>"
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name ="gpt-41-ft" # custom deployment name that you will use to reference the model when making inference calls.
deploy_params = {'api-version': "2024-10-01"} # control plane API version rather than dataplane API for this call
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}
deploy_data = {
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": <"fine_tuned_model">, #retrieve this value from the previous call, it will look like gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83
"version": "1"
}
}
}
deploy_data = json.dumps(deploy_data)
request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'
print('Creating a new deployment...')
r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)
print(r)
print(r.reason)
print(r.json())
Дополнительные сведения о развертывании между регионами и использовании развернутой модели см. здесь.
Если вы готовы к развертыванию в промышленной среде или у вас есть особые требования к размещению данных, следуйте нашему руководству по развертыванию.
Непрерывная настройка
После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.
Для точной настройки модели, которую вы ранее настроили, вы будете использовать тот же процесс, что и при создании настраиваемой модели , но вместо указания имени универсальной базовой модели можно указать идентификатор уже точно настроенной модели. Идентификатор точно настроенной модели выглядит следующим образом. gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7
from openai import AzureOpenAI
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-10-21"
)
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7"
)
job_id = response.id
# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.
print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))
Мы также рекомендуем включить suffix
параметр, чтобы упростить различие между различными итерациями вашей точно настроенной модели.
suffix
принимает строку и используется для идентификации модели с тонкой настройкой. С помощью API Python OpenAI поддерживается строка до 18 символов, которые будут добавлены в имя настраиваемой модели.
Если вы не уверены в идентификаторе существующей точно настроенной модели, эти сведения можно найти на странице "Модели Azure AI Foundry" или создать список моделей для определенного ресурса Azure OpenAI с помощью REST API.
Очистка развертываний, настраиваемых моделей и файлов обучения
После завершения работы с настроенной моделью можно удалить развертывание и модель. При необходимости вы также можете удалить файлы обучения и проверки, отправленные в службу.
Удалите развертывание вашей модели
Это важно
После развертывания настраиваемой модели, если в любое время развертывание остается неактивным в течение более чем пятнадцати дней (15) развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более 15 дней назад, и в течение непрерывного 15-дневного периода не выполнялись вызовы завершений задач или завершений чата.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель, а настраиваемую модель можно повторно развернуть в любое время. Как описано в разделе Azure OpenAI в разделе «Цены на модели Azure AI Foundry», каждая кастомизируемая (тщательно настроенная) модель, развернутая, несет почасовую стоимость размещения независимо от того, делаются ли к модели запросы на завершение или на завершение чата. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в руководстве по управлению затратами на Azure OpenAI.
Вы можете использовать различные методы для удаления развертывания вашей настраиваемой модели.
Удаление настраиваемой модели
Аналогичным образом можно использовать различные методы для удаления настраиваемой модели:
Замечание
Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Сначала необходимо удалить развертывание модели, прежде чем удалить настраиваемую модель.
Удаление обучающих файлов
Кроме того, вы можете удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, из подписки Azure OpenAI. Для удаления обучающих, проверки и результирующих файлов можно использовать следующие методы:
- Azure AI Foundry
- REST API
- Пакет SDK для Python
В следующем примере Python используется комплект разработки программного обеспечения (SDK) для удаления файлов обучения, проверки и результатов вашей настраиваемой модели.
print('Checking for existing uploaded files.')
results = []
# Get the complete list of uploaded files in our subscription.
files = openai.File.list().data
print(f'Found {len(files)} total uploaded files in the subscription.')
# Enumerate all uploaded files, extracting the file IDs for the
# files with file names that match your training dataset file and
# validation dataset file names.
for item in files:
if item["filename"] in [training_file_name, validation_file_name, result_file_name]:
results.append(item["id"])
print(f'Found {len(results)} already uploaded files that match our files')
# Enumerate the file IDs for our files and delete each file.
print(f'Deleting already uploaded files.')
for id in results:
openai.File.delete(sid = id)
Предпосылки
- Ознакомьтесь с руководством по настройке Azure OpenAI.
- Подписка Azure. Создайте его бесплатно.
- Ресурс Azure OpenAI. Дополнительные сведения см. в статье "Создание ресурса" и развертывание модели с помощью Azure OpenAI.
- Для доступа к тонкой настройке требуется специалист OpenAI Cognitive Services.
- Если у вас еще нет доступа к квоте и развертыванию моделей на портале Azure AI Foundry, вам потребуется дополнительное разрешение.
Замечание
REST API в настоящее время не поддерживает глобальные задания обучения. Проверка глобальных заданий обучения через API может возвращать неверные сведения.
Поддерживаемые модели
Ознакомьтесь со страницей моделей, чтобы проверить, какие регионы в настоящее время поддерживают точную настройку.
Или можно точно настроить ранее настроенную модель, отформатированную как base-model.ft-{jobid}.
Просмотр рабочего процесса для REST API
Ознакомьтесь с рабочим процессом тонкой настройки для использования REST API и Python с Azure OpenAI.
- Подготовьте данные обучения и проверки.
- Выберите базовую модель.
- Отправьте данные обучения.
- Обучите новую кастомизированную модель.
- Проверьте состояние настраиваемой модели.
- Разверните настраиваемую модель для использования.
- Используйте настраиваемую модель.
- Опционально проведите анализ вашей настраиваемой модели на производительность и соответствие.
Подготовьте данные для обучения и проверки
Обучающие данные и наборы данных проверки состоят из входных и выходных примеров того, как модель должна выполняться.
Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL) и должны быть отформатированы в формате беседы, который используется API завершения чата .
Если вы хотите пошаговые инструкции gpt-4o-mini-2024-07-18
по настройке, обратитесь к руководству по настройке Azure OpenAI.
Пример формата файла
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Формат файла многократного чата
Кроме того, поддерживается несколько поворотов беседы в одной строке файла обучения jsonl. Чтобы пропустить тонкую настройку для определенных сообщений помощника, добавьте пару необязательных weight
значений ключа.
weight
В настоящее время можно задать значение 0 или 1.
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}
Завершение чата с помощью визуального зрения
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.
Создание наборов данных для обучения и проверки
Чем больше примеров обучения у вас есть, тем лучше. Задания тонкой настройки не будут продолжаться без по крайней мере 10 примеров обучения, но такое небольшое число недостаточно, чтобы заметно повлиять на ответы модели. Рекомендуется предоставить сотни, если не тысячи, примеры обучения, которые будут успешными.
Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучите модель на большом количестве внутренних данных без первого обрезки набора данных только для самых качественных примеров, вы можете в конечном итоге получить модель, которая выполняет гораздо хуже, чем ожидалось.
Отправка обучающих данных
Следующим шагом является выбор существующих подготовленных обучающих данных или отправка новых подготовленных обучающих данных для использования при точной настройке модели. После подготовки обучающих данных вы можете передать файлы в службу. Существует два способа отправки обучающих данных:
Для больших файлов данных рекомендуется импортировать из хранилища BLOB-объектов Azure. Большие файлы могут работать нестабильно при отправке через многокомпонентные формы, так как запросы являются атомарными, и их невозможно повторить или возобновить. Дополнительные сведения о хранилище BLOB-объектов Azure см. в статье "Что такое хранилище BLOB-объектов Azure"?
Замечание
Обучающие файлы данных должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.
Отправка обучающих данных
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
-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/files?api-version=2023-12-01-preview \
-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/fine_tuning/jobs?api-version=2024-10-21 \
-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
}'
Кроме того, можно передать дополнительные необязательные параметры, такие как гиперпараметры , чтобы получить более широкий контроль над процессом тонкой настройки. Для начального обучения рекомендуется использовать автоматические значения по умолчанию, которые присутствуют без указания этих параметров.
Текущие поддерживаемые гиперпараметры для точной настройки:
Имя | Тип | Описание |
---|---|---|
batch_size |
целое число | Размер партии, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, мы обнаружили, что большие размеры пакетов, как правило, лучше работают для больших наборов данных. Значение по умолчанию, а также максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. |
learning_rate_multiplier |
число/номер | Множитель скорости обучения, используемый для тренировки. Скорость обучения точной настройки — это исходная скорость обучения, используемая для предварительного обучения, умноженная на это значение. Большие скорости обучения, как правило, лучше работают с большими размерами партий. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0,02 до 0,2, чтобы увидеть, что дает лучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переобучения. |
n_epochs |
целое число | Количество эпох, на которое следует обучать модель. Под эпохой понимается один полный цикл обработки набора данных для обучения. |
seed |
целое число | Сид определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если семя не указано, оно будет сгенерировано для вас. |
Проверка состояния настраиваемой модели
После запуска задания точной настройки может потребоваться некоторое время. Ваша задача может стоять в очереди за другими задачами в системе. Обучение модели может занять несколько минут или часов в зависимости от размера модели и набора данных. В следующем примере REST API используется для проверки состояния задания по финальной настройке. В примере извлекаются сведения о задании с помощью идентификатора задания, возвращаемого из предыдущего примера:
curl -X GET $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<YOUR-JOB-ID>?api-version=2024-10-21 \
-H "api-key: $AZURE_OPENAI_API_KEY"
Список событий настройки параметров
Чтобы проверить отдельные события тонкой настройки, созданные во время обучения, выполните следующие действия.
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/events?api-version=2024-10-21 \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Контрольные точки
При завершении каждой эпохи обучения создается контрольная точка. Контрольная точка — это полностью функциональная версия модели, которую можно развернуть и использовать в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезными, так как они могут предоставлять моментальные снимки до переобучения. Когда задание точной настройки завершится, у вас будут три последние версии модели, доступные для развертывания. Последняя эпоха будет представлена вашей тонкой моделью, предыдущие две эпохи будут доступны в качестве контрольных точек.
Чтобы получить список контрольных точек, связанных с отдельным заданием на тонкую настройку, можно выполнить команду списка контрольных точек.
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints?api-version=2024-10-21 \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Анализ настраиваемой модели
Azure OpenAI присоединяет файл результатов с именем results.csv к каждому заданию точной настройки после завершения. Вы можете использовать файл результатов для анализа производительности обучения и проверки настраиваемой модели. Идентификатор файла для результирующих файлов указан для каждой настраиваемой модели, и вы можете использовать REST API для получения идентификатора файла и скачивания файла результатов для анализа.
В следующем примере Python используется REST API для получения идентификатора файла первого файла результатов, присоединенного к заданию точной настройки для настраиваемой модели, а затем загружает файл в рабочий каталог для анализа.
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<JOB_ID>?api-version=2023-12-01-preview" \
-H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/files/<RESULT_FILE_ID>/content?api-version=2023-12-01-preview" \
-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 как графики на портале Azure AI Foundry. Выберите ссылку для обученной модели, и вы увидите три диаграммы: ошибка, средняя точность токена и точность токена. Если вы предоставили данные проверки, оба набора данных будут отображаться на одном графике.
Ожидайте, что потеря будет уменьшаться со временем, а точность увеличиваться. Если вы видите расхождение между данными обучения и валидации, это может указывать на то, что вы переобучаетесь. Попробуйте обучение с меньшим количеством эпох или меньшим коэффициентом скорости обучения.
Разверните точно настроенную модель
Когда вы удовлетворены метриками из задания тонкой настройки или просто хотите перейти к предсказанию, необходимо развернуть модель.
Если вы развертываете для дальнейшей проверки, рассмотрите возможность развертывания для тестирования с помощью развертывания в среде разработчика.
Если вы готовы к развертыванию в промышленной среде или у вас есть особые требования к размещению данных, следуйте нашему руководству по развертыванию.
переменная | Определение |
---|---|
токен | Существует несколько способов создания токена авторизации. Самый простой способ начального тестирования — запустить Cloud Shell на портале Azure. Затем выполните az account get-access-token . Этот маркер можно использовать в качестве временного маркера авторизации для тестирования API. Мы рекомендуем сохранить это в новой переменной окружения. |
подписка | Идентификатор подписки для связанного ресурса Azure OpenAI. |
ресурсная группа | Имя группы ресурсов для ресурса Azure OpenAI. |
имя_ресурса | Название ресурса Azure OpenAI. |
имя_развертывания_модели | Настраиваемое имя для нового точно настроенного развертывания модели. Это имя будет использоваться в вашем коде при совершении вызовов завершения чата. |
тонко настроенная модель | Извлеките это значение из результатов задания по точной настройке на предыдущем шаге. Оно выглядит так: gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83 . Необходимо добавить это значение в json deploy_data. В качестве альтернативы вы также можете развернуть контрольную точку, передав ID контрольной точки, который будет отображаться в формате ftchkpt-e559c011ecc04fc68eaa339d8227d02d |
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2024-10-21" \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": "<FINE_TUNED_MODEL>",
"version": "1"
}
}
}'
Дополнительные сведения о развертывании между регионами и использовании развернутой модели см. здесь.
Непрерывная настройка
После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.
Для точной настройки модели, которую вы ранее настроили, можно использовать тот же процесс, что и при создании настраиваемой модели , но вместо указания имени универсальной базовой модели можно указать идентификатор уже точно настроенной модели. Идентификатор точно настроенной модели выглядит следующим образом. gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2023-12-01-preview \
-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 и _), которые будут добавлены в имя вашей точной модели.
Если вы не уверены в идентификаторе вашей точно настроенной модели, эти сведения можно найти на странице "Модели Azure AI Foundry" или создать список моделей для определенного ресурса Azure OpenAI с помощью REST API.
Очистка развертываний, настраиваемых моделей и файлов обучения
После завершения работы с настроенной моделью можно удалить развертывание и модель. При необходимости вы также можете удалить файлы обучения и проверки, отправленные в службу.
Удалите развертывание вашей модели
Вы можете использовать различные методы для удаления развертывания вашей настраиваемой модели.
Удаление настраиваемой модели
Аналогичным образом можно использовать различные методы для удаления настраиваемой модели:
Замечание
Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Сначала необходимо удалить развертывание модели, прежде чем удалить настраиваемую модель.
Удаление обучающих файлов
Кроме того, вы можете удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, из подписки Azure OpenAI. Для удаления обучающих, проверки и результирующих файлов можно использовать следующие методы:
Дальнейшие шаги
- Изучите возможности тонкой настройки в руководстве по настройке Azure OpenAI.
- Обзор доступности модели точной настройки в регионах
- Дополнительные сведения о квотах Azure OpenAI