Настройка модели с помощью тонкой настройки
Служба Azure OpenAI позволяет адаптировать наши модели к личным наборам данных с помощью процесса, называемого тонкой настройкой. Этот шаг настройки позволяет эффективнее использовать службе и предоставляет следующие возможности:
- Более качественные результаты, чем то, что вы можете получить только из запроса инженерии
- Возможность обучать больше примеров, чем может соответствовать максимальному ограничению контекста запроса модели.
- Экономия маркеров из-за более коротких запросов
- Запросы с низкой задержкой, особенно при использовании небольших моделей.
В отличие от нескольких выстрелов обучение, тонкой настройке модели улучшается путем обучения на многих примерах, чем может соответствовать запросу, что позволяет добиться лучших результатов по широкому количеству задач. Так как при тонкой настройке вес базовой модели корректируется для повышения производительности конкретной задачи, вам не придется включать столько примеров или инструкций в запрос. Это означает меньше отправленных текста и меньше маркеров, обработанных при каждом вызове API, потенциально экономя затраты и повышая задержку запроса.
Мы используем LoRA или низкоранговую приближение для точной настройки моделей таким образом, чтобы снизить их сложность, не влияя на их производительность. Этот метод работает путем приближения исходной матрицы высокого ранга с более низким рангом, таким образом, только тонкой настройкой меньшего подмножества "важных" параметров во время контролируемого этапа обучения, что делает модель более управляемой и эффективной. Для пользователей это делает обучение быстрее и более доступным, чем другие методы.
Примечание.
Azure OpenAI в настоящее время поддерживает только настройку текста в текст для всех поддерживаемых моделей, включая GPT-4o mini.
В Azure AI Studio существует два уникальных уникальных способа настройки. Оба позволяют точно настраивать модели Azure OpenAI, но только представление Концентратора или проекта поддерживает точное настройку моделей, отличных от Azure OpenAI. Если вы используете только интерфейс настройки Azure OpenAI, который доступен в любой момент, когда вы выбираете ресурс в регионе, где поддерживается точная настройка.
Необходимые компоненты
- Ознакомьтесь с руководством по настройке Azure OpenAI.
- Подписка Azure. Создайте ее бесплатно.
- Ресурс Azure OpenAI, расположенный в регионе, который поддерживает настройку модели Azure OpenAI. Проверьте доступность сводной таблицы модели и региона для списка доступных моделей по регионам и поддерживаемым функциям. Дополнительные сведения см. в статье "Создание ресурса" и развертывание модели с помощью Azure OpenAI.
- Для доступа к тонкой настройке требуется участник OpenAI Cognitive Services.
- Если у вас еще нет доступа к квоте и развертыванию моделей в Azure AI Studio, вам потребуются дополнительные разрешения.
Модели
Следующие модели поддерживают точную настройку:
babbage-002
davinci-002
gpt-35-turbo
(0613)gpt-35-turbo
(1106)gpt-35-turbo
(0125)gpt-4
(0613)*gpt-4o
(2024-08-06)gpt-4o-mini
(2024-07-18)
* Предварительная настройка этой модели в настоящее время доступна в общедоступной предварительной версии.
Или можно точно настроить ранее настроенную модель, отформатированную как base-model.ft-{jobid}.
Ознакомьтесь со страницей моделей, чтобы проверить, какие регионы в настоящее время поддерживают точное настройка.
Просмотр рабочего процесса для Azure AI Studio
Ознакомьтесь с рабочим процессом точной настройки для использования Azure AI Studio:
- Подготовьте данные обучения и проверки.
- Используйте мастер создания пользовательской модели в Azure AI Studio для обучения пользовательской модели.
- Выберите базовую модель.
- Выберите данные обучения.
- При необходимости выберите данные проверки.
- При необходимости настройте параметры задачи для задания точной настройки.
- Просмотрите варианты и обучите новую пользовательскую модель.
- Проверьте состояние настраиваемой настраиваемой модели.
- Разверните настраиваемую модель для использования.
- Используйте настраиваемую модель.
- При необходимости проанализируйте настраиваемую модель для повышения производительности и соответствия.
Подготовка данных обучения и проверки
Данные обучения и наборы данных для проверки состоят из входных и выходных примеров того, как должна работать модель.
Для различных типов моделей требуется другой формат обучающих данных.
Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL). Для gpt-35-turbo
(всех версий), gpt-4
gpt-4o
и gpt-4o-mini
, набор данных тонкой настройки должен быть отформатирован в формате беседы, который используется API завершения чата.
Если вы хотите пошаговое руководство gpt-4o-mini
по настройке модели (2024-07-18) см . в руководстве по настройке Azure OpenAI.
Пример формата файла
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}
Многоэтапный формат файла чата 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}]}
Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.
Создание наборов данных для обучения и проверки
Чем больше примеров обучения у вас есть, тем лучше. Задания тонкой настройки не будут продолжаться без по крайней мере 10 примеров обучения, но такое небольшое число недостаточно, чтобы заметно повлиять на ответы модели. Рекомендуется предоставить сотни, если не тысячи, примеры обучения, которые будут успешными.
Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучите модель на большом объеме внутренних данных, не обрезая набор данных только для самых качественных примеров, вы можете в конечном итоге получить модель, которая выполняет гораздо хуже, чем ожидалось.
Использование мастера создания пользовательской модели
Azure AI Studio предоставляет мастер создания пользовательских моделей , поэтому вы можете интерактивно создавать и обучать настраиваемую модель для ресурса Azure.
Откройте Azure AI Studio https://oai.azure.com/ и войдите с учетными данными, имеющими доступ к ресурсу Azure OpenAI. Во время рабочего процесса входа выберите соответствующий каталог, подписку Azure и ресурс Azure OpenAI.
В Azure AI Studio перейдите в область "Точное настройка инструментов>" и выберите модель точной настройки.
Откроется мастер создания пользовательской модели .
Выбор базовой модели
Первым шагом в создании пользовательской модели является выбор базовой модели. Панель базовых моделей позволяет выбрать базовую модель, используемую для пользовательской модели. Выбор влияет как на производительность, так и на стоимость модели.
Выберите базовую модель в раскрывающемся списке " Тип базовой модели" и нажмите кнопку "Далее ".
Вы можете создать пользовательскую модель из одной из следующих доступных базовых моделей:
babbage-002
davinci-002
gpt-35-turbo
(0613)gpt-35-turbo
(1106)gpt-35-turbo
(0125)gpt-4
(0613)Или можно точно настроить ранее настроенную модель, отформатированную как base-model.ft-{jobid}.
Дополнительные сведения о базовых моделях, которые можно настроить, см. в разделе "Модели".
Выбор обучающих данных
Следующим шагом является выбор существующих подготовленных обучающих данных или отправка новых подготовленных обучающих данных для использования при настройке модели. В области данных обучения отображаются все существующие ранее загруженные наборы данных , а также предоставляются параметры для отправки новых обучающих данных.
Если данные обучения уже отправлены в службу, выберите "Файлы" из Azure OpenAI Connection.
- Выберите файл из раскрывающегося списка.
Чтобы отправить новые обучающие данные, используйте один из следующих вариантов:
Выберите локальный файл для отправки обучающих данных из локального файла.
Выберите большой двоичный объект Azure или другие общие веб-расположения , чтобы импортировать данные обучения из БОЛЬШОго двоичного объекта Azure или другого общего веб-расположения.
Для больших файлов данных рекомендуется импортировать из хранилища BLOB-объектов Azure. Большие файлы могут работать нестабильно при отправке через многокомпонентные формы, так как запросы являются атомарными, и их невозможно повторить или возобновить. Дополнительные сведения о Хранилище BLOB-объектов Azure см. в разделе "Что такое Хранилище BLOB-объектов Azure?".
Примечание.
Обучающие файлы данных должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.
Отправка обучающих данных из локального файла
Вы можете отправить новый набор данных обучения в службу из локального файла с помощью одного из следующих методов:
Перетащите файл в клиентную область области данных обучения, а затем нажмите кнопку "Отправить файл".
Выберите "Обзор файла " из клиентской области данных обучения, выберите файл для отправки из диалогового окна "Открыть ", а затем нажмите кнопку "Отправить файл".
После выбора и отправки обучаемого набора данных нажмите кнопку "Далее ".
Импорт обучающих данных из хранилища BLOB-объектов Azure
Набор данных обучения можно импортировать из БОЛЬШОго двоичного объекта Azure или другого общего веб-расположения, указав имя и расположение файла.
Введите имя файла.
В качестве расположения файла укажите URL-адрес БОЛЬШОго двоичного объекта Azure, служба хранилища Azure подписанный URL-адрес (SAS) или другую ссылку на доступное веб-расположение.
Выберите "Импорт" , чтобы импортировать набор данных обучения в службу.
После выбора и отправки обучаемого набора данных нажмите кнопку "Далее ".
Выбор данных проверки
Следующий шаг позволяет настроить модель для использования данных проверки в процессе обучения. Если вы не хотите использовать данные проверки, нажмите кнопку "Далее ", чтобы перейти к дополнительным параметрам модели. В противном случае, если у вас есть набор данных проверки, можно выбрать существующие подготовленные данные проверки или отправить новые подготовленные данные проверки для использования при настройке модели.
В области данных проверки отображаются все существующие ранее загруженные наборы данных для обучения и проверки и предоставляются параметры, с помощью которых можно отправить новые данные проверки.
Если данные проверки уже отправлены в службу, выберите " Выбрать набор данных".
- Выберите файл из списка, показанного в области данных проверки.
Чтобы отправить новые данные проверки, используйте один из следующих вариантов:
Выберите локальный файл для отправки данных проверки из локального файла.
Выберите большой двоичный объект Azure или другие общие веб-расположения , чтобы импортировать данные проверки из БОЛЬШОго двоичного объекта Azure или другого общего веб-расположения.
Для больших файлов данных рекомендуется импортировать из хранилища BLOB-объектов Azure. Большие файлы могут работать нестабильно при отправке через многокомпонентные формы, так как запросы являются атомарными, и их невозможно повторить или возобновить.
Примечание.
Как и для обучающих файлов данных, файлы данных проверки должны быть отформатированы как JSONL-файлы, закодированные в UTF-8 с меткой порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.
Отправка данных проверки из локального файла
Вы можете отправить новый набор данных проверки в службу из локального файла с помощью одного из следующих методов:
Перетащите файл в клиентную область области данных проверки и нажмите кнопку "Отправить файл".
Выберите "Обзор файла " из клиентской области данных проверки, выберите файл для отправки из диалогового окна "Открыть ", а затем нажмите кнопку "Отправить файл".
После выбора и отправки набора данных проверки нажмите кнопку "Далее ".
Импорт данных проверки из хранилища BLOB-объектов Azure
Вы можете импортировать набор данных проверки из БОЛЬШОго двоичного объекта Azure или другого общего веб-расположения, указав имя и расположение файла.
Введите имя файла.
В качестве расположения файла укажите URL-адрес БОЛЬШОго двоичного объекта Azure, служба хранилища Azure подписанный URL-адрес (SAS) или другую ссылку на доступное веб-расположение.
Выберите "Импорт" , чтобы импортировать набор данных обучения в службу.
После выбора и отправки набора данных проверки нажмите кнопку "Далее ".
Настройка параметров задачи
Мастер создания пользовательской модели отображает параметры для обучения настраиваемой модели на панели параметров задачи. Доступны следующие параметры:
Имя | Тип | Description |
---|---|---|
batch_size |
integer | Размер пакета, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, большие размеры пакетов работают лучше для больших наборов данных. Значение по умолчанию, а также максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. |
learning_rate_multiplier |
number | Множитель скорости обучения, используемый для обучения. Скорость обучения точной настройки — это исходная скорость обучения, используемая для предварительного обучения, умноженная на данное значение. Более крупные показатели обучения, как правило, лучше работают с большими размерами пакетов. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0,02 до 0,2, чтобы проверить, что даст наилучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переполнения. |
n_epochs |
integer | Количество эпох для обучения модели. Под эпохой понимается один полный просмотр набора данных для обучения. |
seed |
integer | Начальное значение определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если начальное значение не указано, он будет создан для вас |
Выберите Default, чтобы использовать значения по умолчанию для задания тонкой настройки, или выберите "Настраиваемый ", чтобы отобразить и изменить значения гиперпараметров. При выборе по умолчанию мы определяем правильное значение алгоритмически на основе обучающих данных.
После настройки дополнительных параметров нажмите кнопку "Далее ", чтобы просмотреть выбранные варианты и обучить настроенную модель.
Просмотрите варианты и обучите модель
В области проверки мастера отображаются сведения о выборе конфигурации.
Если вы готовы обучить модель, нажмите кнопку "Начать обучение", чтобы начать задание тонкой настройки и вернуться на панель "Модели ".
Проверка состояния пользовательской модели
В области "Модели" отображаются сведения о пользовательской модели на вкладке "Настраиваемые модели ". На вкладке содержатся сведения о состоянии и идентификаторе задания точной настройки для пользовательской модели. После завершения задания на вкладке отображается идентификатор файла результирующий файл. Чтобы просмотреть обновленное состояние задания обучения модели, может потребоваться выбрать "Обновить ".
После запуска задания тонкой настройки может потребоваться некоторое время. Задание может находиться в очереди за другими заданиями в системе. Обучение модели может занять несколько минут или часов в зависимости от размера модели и набора данных.
Ниже приведены некоторые задачи, которые можно выполнить на панели моделей :
Проверьте состояние задания тонкой настройки для пользовательской модели в столбце "Состояние" вкладки "Настраиваемые модели".
В столбце "Имя модели" выберите имя модели, чтобы просмотреть дополнительные сведения о пользовательской модели. Состояние задания точной настройки, результатов обучения, событий обучения и гиперпараметров, используемых в задании.
Выберите "Скачать обучающий файл ", чтобы скачать обучающие данные, используемые для модели.
Выберите "Скачать результаты", чтобы скачать файл результатов , подключенный к заданию тонкой настройки модели, и проанализировать настраиваемую модель для повышения производительности обучения и проверки.
Нажмите кнопку Обновить для обновления сведений на странице.
Контрольные точки
После создания каждой эпохи обучения создается контрольная точка. Контрольная точка — это полностью функциональная версия модели, которую можно развернуть и использовать в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезны, так как они могут предоставить моментальный снимок модели до переподбора. Когда задание точной настройки завершится, у вас будут три последние версии модели, доступные для развертывания.
Оценка безопасности GPT-4, GPT-4o и GPT-4o-mini тонкой настройки — общедоступная предварительная версия
GPT-4o, GPT-4o-mini и GPT-4 являются нашими самыми передовыми моделями, которые можно настроить в соответствии с вашими потребностями. Как и в случае с моделями Azure OpenAI, расширенные возможности точно настроенных моделей поставляются с повышенными ответственностью проблемами ИИ, связанными с вредным содержимым, манипуляцией, поведением человека, проблемами конфиденциальности и т. д. Дополнительные сведения о рисках, возможностях и ограничениях см. в обзоре практик ответственного искусственного интеллекта и заметке о прозрачности. Чтобы снизить риски, связанные с расширенными точно настроенными моделями, мы реализовали дополнительные шаги оценки, которые помогут выявить и предотвратить вредное содержимое в обучении и выходных данных точно настроенных моделей. Эти действия предназначены для фильтрации содержимого службы OpenAI в Microsoft Responsible AI Standard и Azure OpenAI.
- Оценки выполняются в выделенных, конкретных клиентах, частных рабочих областях;
- Конечные точки оценки находятся в том же географическом регионе, что и ресурс Azure OpenAI;
- Обучающие данные не хранятся в связи с выполнением вычислений; сохраняется только окончательная оценка модели (развертываемая или не развертываемая); и
Фильтры оценки модели GPT-4o, GPT-4o-mini и GPT-4 устанавливаются для предопределенных пороговых значений и не могут быть изменены клиентами; Они не привязаны к какой-либо конфигурации фильтрации пользовательского содержимого, которую вы могли создать.
Оценка данных
Перед началом обучения данные оцениваются на потенциально вредное содержимое (насилие, сексуальное, ненависть и справедливость, самоповредение— см. здесь определения категорий). Если вредное содержимое обнаружено выше указанного уровня серьезности, задание обучения завершится ошибкой, и вы получите сообщение о категориях сбоя.
Пример сообщения:
The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.
Данные обучения оцениваются автоматически в задании импорта данных в рамках предоставления возможности точной настройки.
Если задание тонкой настройки завершается сбоем из-за обнаружения вредного содержимого в обучающих данных, плата не будет взиматься.
Оценка модели
После завершения обучения, но до того, как модель точной настройки доступна для развертывания, результирующая модель оценивается для потенциально опасных ответов с помощью встроенных метрик риска и безопасности Azure. Используя тот же подход к тестированию, который мы используем для базовых больших языковых моделей, наша возможность оценки имитирует беседу с вашей точно настроенной моделью, чтобы оценить потенциал для вывода вредного содержимого, опять же с использованием указанных категорий вредного контента (насилие, сексуальное, ненависть и справедливость, самоповредение).
Если модель создается для создания выходных данных, содержащих содержимое, обнаруженное как вредное выше допустимой частоты, вы будете проинформированы о том, что ваша модель недоступна для развертывания, с информацией о конкретных категориях обнаруженных вреда:
Пример сообщения:
This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.
Как и при оценке данных, модель вычисляется автоматически в задании тонкой настройки в рамках предоставления возможности тонкой настройки. Только результирующая оценка (развертываемая или недоступная) регистрируется службой. Если развертывание точно настроенной модели завершается сбоем из-за обнаружения вредного содержимого в выходных данных модели, плата за выполнение обучения не будет взиматься.
Развертывание точно настроенной модели
После успешного выполнения задания точной настройки можно развернуть пользовательскую модель на панели "Модели ". Необходимо развернуть настраиваемую модель, чтобы сделать ее доступной для использования с вызовами завершения.
Внимание
После развертывания настраиваемой модели, если в любое время развертывание остается неактивным в течение более чем пятнадцати дней (15) развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более чем через 15 дней назад, а в течение непрерывного 15-дневного периода вызовы завершений или завершения чата не выполнялись.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель, а настраиваемую модель можно повторно развернуть в любое время. Как описано в ценах на Azure OpenAI Service, каждая настраиваемая (настраиваемая) модель, развернутая почасовая стоимость размещения независимо от того, выполняются ли вызовы завершения или завершения чата в модель. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в руководстве по управлению затратами на Службу Azure OpenAI.
Примечание.
Для пользовательской модели разрешено только одно развертывание. При выборе уже развернутой пользовательской модели отображается сообщение об ошибке.
Чтобы развернуть пользовательскую модель, выберите пользовательскую модель для развертывания и выберите команду "Развернуть модель".
Откроется диалоговое окно "Развертывание модели ". В диалоговом окне введите имя развертывания и нажмите кнопку "Создать ", чтобы начать развертывание пользовательской модели.
Ход развертывания можно отслеживать на панели "Развертывания " в Azure AI Studio.
Развертывание между регионами
Точная настройка поддерживает развертывание точно настроенной модели в другом регионе, отличном от того, где модель была изначально настроена. Вы также можете развернуть в другой подписке или регионе.
Единственными ограничениями являются то, что новый регион также должен поддерживать точную настройку, а при развертывании между подписками учетная запись, создающая маркер авторизации для развертывания, должна иметь доступ как к исходным, так и к целевым подпискам.
Развертывание между подписками и регионами можно выполнить с помощью Python или REST.
Использование развернутой пользовательской модели
После развертывания пользовательской модели его можно использовать как любую другую развернутую модель. Вы можете использовать игровые площадки в Azure AI Studio для экспериментов с новым развертыванием. Вы можете продолжать использовать те же параметры с пользовательской моделью, например temperature
с max_tokens
другими развернутыми моделями. Для точно настроенных babbage-002
и davinci-002
моделей вы будете использовать игровую площадку завершения и API завершения. Для точно настроенных gpt-35-turbo-0613
моделей вы будете использовать игровую площадку чата и API завершения чата.
Анализ пользовательской модели
Azure OpenAI присоединяет файл результатов с именем results.csv к каждому заданию тонкой настройки после завершения. Вы можете использовать файл результатов для анализа производительности обучения и проверки пользовательской модели. Идентификатор файла результата указан для каждой пользовательской модели в столбце идентификатора файла результатов на панели "Модели " для Azure AI Studio. Идентификатор файла можно использовать для идентификации и скачивания файла результатов из области файлов данных Azure AI Studio.
Результатом является CSV-файл, содержащий строку заголовка и строку для каждого шага обучения, выполняемого заданием тонкой настройки. Результирующий файл содержит следующие столбцы:
Имя столбца | Description |
---|---|
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 Studio. Выберите ссылку для обученной модели, и вы увидите три диаграммы: потеря, средняя точность маркера и точность маркера. Если вы предоставили данные проверки, оба набора данных будут отображаться на одном графике.
Найдите потерю, чтобы уменьшиться с течением времени, и ваша точность для увеличения. Если вы видите расхождение между данными обучения и проверки, это может указывать на то, что вы переопределяются. Попробуйте обучать с меньшим количеством эпох или умножением меньшей скорости обучения.
Очистка развертываний, пользовательских моделей и файлов обучения
После завершения работы с пользовательской моделью можно удалить развертывание и модель. При необходимости вы также можете удалить файлы обучения и проверки, отправленные в службу.
Удаление развертывания модели
Внимание
После развертывания настраиваемой модели, если в любое время развертывание остается неактивным в течение более чем пятнадцати дней (15) развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более чем через 15 дней назад, а в течение непрерывного 15-дневного периода вызовы завершений или завершения чата не выполнялись.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель, а настраиваемую модель можно повторно развернуть в любое время. Как описано в ценах на Azure OpenAI Service, каждая настраиваемая (настраиваемая) модель, развернутая почасовая стоимость размещения независимо от того, выполняются ли вызовы завершения или завершения чата в модель. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в руководстве по управлению затратами на Службу Azure OpenAI.
Развертывание настраиваемой модели можно удалить на панели "Развертывания " в Azure AI Studio. Выберите развертывание для удаления и нажмите кнопку "Удалить ", чтобы удалить развертывание.
Удаление пользовательской модели
Вы можете удалить пользовательскую модель на панели "Модели " в Azure AI Studio. Выберите пользовательскую модель, чтобы удалить ее на вкладке "Настраиваемые модели ", а затем выберите "Удалить ", чтобы удалить пользовательскую модель.
Примечание.
Вы не можете удалить пользовательскую модель, если она имеет существующее развертывание. Прежде чем удалить пользовательскую модель, необходимо сначала удалить развертывание модели.
Удаление файлов обучения
При необходимости можно удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, на панели файлов данных управления>в Azure AI Studio. Выберите файл, который нужно удалить, и нажмите кнопку "Удалить ", чтобы удалить файл.
Непрерывная настройка
После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.
Для точной настройки модели, которую вы ранее настроили, вы будете использовать тот же процесс, что и при создании настраиваемой модели , но вместо указания имени универсальной базовой модели можно указать уже настроенную модель. Настраиваемая настраиваемая модель будет выглядеть следующим образом. gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7
Мы также рекомендуем включить suffix
параметр, чтобы упростить различие между различными итерациями вашей точно настроенной модели. suffix
принимает строку и задает для идентификации точно настроенной модели. С помощью API Python OpenAI поддерживается строка до 18 символов, которые будут добавлены в имя настраиваемой модели.
Необходимые компоненты
- Ознакомьтесь с руководством по настройке Azure OpenAI.
- Подписка Azure. Создайте ее бесплатно.
- Ресурс Azure OpenAI. Дополнительные сведения см. в статье "Создание ресурса" и развертывание модели с помощью Azure OpenAI.
- Следующие библиотеки Python:
os
,json
,requests
.openai
- Библиотека Python OpenAI должна иметь по крайней мере версию 0.28.1.
- Для доступа к тонкой настройке требуется участник OpenAI Cognitive Services.
- Если у вас еще нет доступа к квоте и развертыванию моделей в Azure AI Studio, вам потребуются дополнительные разрешения.
Модели
Следующие модели поддерживают точную настройку:
babbage-002
davinci-002
gpt-35-turbo
(0613)gpt-35-turbo
(1106)gpt-35-turbo
(0125)gpt-4
(0613)*gpt-4o
(2024-08-06)gpt-4o-mini
(2024-07-18)
* Предварительная настройка этой модели в настоящее время доступна в общедоступной предварительной версии.
Или вы можете точно настроить ранее настраиваемую модель, отформатированную как base-model.ft-{jobid}
.
Ознакомьтесь со страницей моделей, чтобы проверить, какие регионы в настоящее время поддерживают точное настройка.
Просмотр рабочего процесса пакета SDK для Python
Ознакомьтесь с рабочим процессом точной настройки пакета SDK для Python с Azure OpenAI:
- Подготовьте данные обучения и проверки.
- Выберите базовую модель.
- Отправьте данные обучения.
- Обучите новую настраиваемую модель.
- Проверьте состояние настраиваемой модели.
- Разверните настраиваемую модель для использования.
- Используйте настраиваемую модель.
- При необходимости проанализируйте настраиваемую модель для повышения производительности и соответствия.
Подготовка данных обучения и проверки
Данные обучения и наборы данных для проверки состоят из входных и выходных примеров того, как должна работать модель.
Для различных типов моделей требуется другой формат обучающих данных.
Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL). Для gpt-35-turbo-0613
набора данных тонкой настройки необходимо отформатировать в формате беседы, который используется API завершения чата .
Если вы хотите пошаговое руководство по настройке точной настройки gpt-35-turbo-0613
, ознакомьтесь с руководством по настройке Azure OpenAI.
Пример формата файла
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}
Формат файла чата с несколькими поворотами
Кроме того, поддерживается несколько поворотов беседы в одной строке файла обучения 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}]}
Помимо формата 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-05-01-preview" # 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 показано, как создать новое задание точной настройки с помощью пакета SDK для Python:
В этом примере мы также передаваем начальный параметр. Начальное значение определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если начальное значение не указано, он будет создан для вас.
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-35-turbo-0613", # 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))
Кроме того, можно передать дополнительные необязательные параметры, такие как гиперпараметры, чтобы получить более широкий контроль над процессом тонкой настройки. Для начального обучения рекомендуется использовать автоматические значения по умолчанию, которые присутствуют без указания этих параметров.
Текущие поддерживаемые гиперпараметры для точной настройки:
Имя | Тип | Description |
---|---|---|
batch_size |
integer | Размер пакета, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, большие размеры пакетов работают лучше для больших наборов данных. Значение по умолчанию, а также максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. |
learning_rate_multiplier |
number | Множитель скорости обучения, используемый для обучения. Скорость обучения точной настройки — это исходная скорость обучения, используемая для предварительного обучения, умноженная на данное значение. Более крупные показатели обучения, как правило, лучше работают с большими размерами пакетов. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0,02 до 0,2, чтобы проверить, что даст наилучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переподбора. |
n_epochs |
integer | Количество эпох для обучения модели. Под эпохой понимается один полный просмотр набора данных для обучения. |
seed |
integer | Начальное значение определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если начальное значение не указано, он будет создан для вас. |
Чтобы задать пользовательские гиперпараметры с версией 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-02-01" # This API version or later is required to access fine-tuning for turbo/babbage-002/davinci-002
)
client.fine_tuning.jobs.create(
training_file="file-abc123",
model="gpt-35-turbo-0613", # 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))
Контрольные точки
После создания каждой эпохи обучения создается контрольная точка. Контрольная точка — это полностью функциональная версия модели, которую можно развернуть и использовать в качестве целевой модели для последующих заданий точной настройки. Контрольные точки могут быть особенно полезны, так как они могут предоставить моментальный снимок модели до переподбора. Когда задание точной настройки завершится, у вас будут три последние версии модели, доступные для развертывания. Последняя эпоха будет представлена вашей тонкой моделью, предыдущие две эпохи будут доступны в качестве контрольных точек.
Чтобы получить список контрольных точек, связанных с отдельным заданием точной настройки, можно выполнить команду контрольных точек списка:
Для выполнения этой команды может потребоваться обновить клиентную библиотеку 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))
Оценка безопасности GPT-4, GPT-4o, GPT-4o-mini тонкой настройки — общедоступная предварительная версия
GPT-4o, GPT-4o-mini и GPT-4 являются нашими самыми передовыми моделями, которые можно настроить в соответствии с вашими потребностями. Как и в случае с моделями Azure OpenAI, расширенные возможности точно настроенных моделей поставляются с повышенными ответственностью проблемами ИИ, связанными с вредным содержимым, манипуляцией, поведением человека, проблемами конфиденциальности и т. д. Дополнительные сведения о рисках, возможностях и ограничениях см. в обзоре практик ответственного искусственного интеллекта и заметке о прозрачности. Чтобы снизить риски, связанные с расширенными точно настроенными моделями, мы реализовали дополнительные шаги оценки, которые помогут выявить и предотвратить вредное содержимое в обучении и выходных данных точно настроенных моделей. Эти действия предназначены для фильтрации содержимого службы OpenAI в Microsoft Responsible AI Standard и Azure OpenAI.
- Оценки выполняются в выделенных, конкретных клиентах, частных рабочих областях;
- Конечные точки оценки находятся в том же географическом регионе, что и ресурс Azure OpenAI;
- Обучающие данные не хранятся в связи с выполнением вычислений; сохраняется только окончательная оценка модели (развертываемая или не развертываемая); и
Фильтры оценки модели GPT-4o, GPT-4o-mini и GPT-4 устанавливаются для предопределенных пороговых значений и не могут быть изменены клиентами; Они не привязаны к какой-либо конфигурации фильтрации пользовательского содержимого, которую вы могли создать.
Оценка данных
Перед началом обучения данные оцениваются на потенциально вредное содержимое (насилие, сексуальное, ненависть и справедливость, самоповредение— см. здесь определения категорий). Если вредное содержимое обнаружено выше указанного уровня серьезности, задание обучения завершится ошибкой, и вы получите сообщение о категориях сбоя.
Пример сообщения:
The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.
Данные обучения оцениваются автоматически в задании импорта данных в рамках предоставления возможности точной настройки.
Если задание тонкой настройки завершается сбоем из-за обнаружения вредного содержимого в обучающих данных, плата не будет взиматься.
Оценка модели
После завершения обучения, но до того, как модель точной настройки доступна для развертывания, результирующая модель оценивается для потенциально опасных ответов с помощью встроенных метрик риска и безопасности Azure. Используя тот же подход к тестированию, который мы используем для базовых больших языковых моделей, наша возможность оценки имитирует беседу с вашей точно настроенной моделью, чтобы оценить потенциал для вывода вредного содержимого, опять же с использованием указанных категорий вредного контента (насилие, сексуальное, ненависть и справедливость, самоповредение).
Если модель создается для создания выходных данных, содержащих содержимое, обнаруженное как вредное выше допустимой частоты, вы будете проинформированы о том, что ваша модель недоступна для развертывания, с информацией о конкретных категориях обнаруженных вреда:
Пример сообщения:
This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.
Как и при оценке данных, модель вычисляется автоматически в задании тонкой настройки в рамках предоставления возможности тонкой настройки. Только результирующая оценка (развертываемая или недоступная) регистрируется службой. Если развертывание точно настроенной модели завершается сбоем из-за обнаружения вредного содержимого в выходных данных модели, плата за выполнение обучения не будет взиматься.
Развертывание точно настроенной модели
При успешном выполнении задания точной настройки значение fine_tuned_model
переменной в тексте отклика задается именем настраиваемой модели. Теперь модель доступна для обнаружения из API моделей списка. Однако вы не можете выдавать вызовы завершения для настраиваемой модели, пока не будет развернута настраиваемая модель. Необходимо развернуть настраиваемую модель, чтобы сделать ее доступной для использования с вызовами завершения.
Внимание
После развертывания настраиваемой модели, если в любое время развертывание остается неактивным в течение более чем пятнадцати дней (15) развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более чем через 15 дней назад, а в течение непрерывного 15-дневного периода вызовы завершений или завершения чата не выполнялись.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель, а настраиваемую модель можно повторно развернуть в любое время. Как описано в ценах на Azure OpenAI Service, каждая настраиваемая (настраиваемая) модель, развернутая почасовая стоимость размещения независимо от того, выполняются ли вызовы завершения или завершения чата в модель. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в руководстве по управлению затратами на Службу Azure OpenAI.
Вы также можете использовать Azure AI Studio или Azure CLI для развертывания настраиваемой модели.
Примечание.
Для настраиваемой модели разрешено только одно развертывание. Ошибка возникает при выборе уже развернутой настраиваемой модели.
В отличие от предыдущих команд ПАКЕТА SDK, развертывание должно выполняться с помощью API уровня управления, который требует отдельной авторизации, другого пути API и другой версии API.
переменная | Определение |
---|---|
token | Существует несколько способов создания маркера авторизации. Самый простой способ начального тестирования — запустить Cloud Shell из портал Azure. Затем выполните az account get-access-token . Этот маркер можно использовать в качестве временного маркера авторизации для тестирования API. Мы рекомендуем хранить это в новой переменной среды. |
Подписка | Идентификатор подписки для связанного ресурса Azure OpenAI. |
resource_group | Имя группы ресурсов для ресурса Azure OpenAI. |
resource_name | Имя ресурса Azure OpenAI. |
model_deployment_name | Настраиваемое имя для нового точно настроенного развертывания модели. Это имя, которое будет ссылаться в коде при вызове завершения чата. |
fine_tuned_model | Получение этого значения из задания точной настройки приводит к предыдущему шагу. Оно выглядит так: gpt-35-turbo-0613.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-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.
deploy_params = {'api-version': "2023-05-01"}
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-35-turbo-0613.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())
Развертывание между регионами
Точная настройка поддерживает развертывание точно настроенной модели в другом регионе, отличном от того, где модель была изначально настроена. Вы также можете развернуть в другой подписке или регионе.
Единственными ограничениями являются то, что новый регион также должен поддерживать точную настройку, а при развертывании между подписками учетная запись, создающая маркер авторизации для развертывания, должна иметь доступ как к исходным, так и к целевым подпискам.
Ниже приведен пример развертывания модели, которая была точно настроена в одной подписке или регионе в другой.
import json
import os
import requests
token= os.getenv("<TOKEN>")
subscription = "<DESTINATION_SUBSCRIPTION_ID>"
resource_group = "<DESTINATION_RESOURCE_GROUP_NAME>"
resource_name = "<DESTINATION_AZURE_OPENAI_RESOURCE_NAME>"
source_subscription = "<SOURCE_SUBSCRIPTION_ID>"
source_resource_group = "<SOURCE_RESOURCE_GROUP>"
source_resource = "<SOURCE_RESOURCE>"
source = f'/subscriptions/{source_subscription}/resourceGroups/{source_resource_group}/providers/Microsoft.CognitiveServices/accounts/{source_resource}'
model_deployment_name ="gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.
deploy_params = {'api-version': "2023-05-01"}
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_NAME">, # This value will look like gpt-35-turbo-0613.ft-0ab3f80e4f2242929258fff45b56a9ce
"version": "1",
"source": source
}
}
}
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())
Чтобы развернуть между одной подпиской, но разные регионы, которые будут иметь только подписку и группы ресурсов, должны быть идентичными как для переменных источника, так и для целевых переменных, и только имена исходных и целевых ресурсов должны быть уникальными.
Развертывание модели с помощью Azure CLI
В следующем примере показано, как использовать Azure CLI для развертывания настраиваемой модели. В Azure CLI необходимо указать имя развертывания настраиваемой модели. Дополнительные сведения об использовании Azure CLI для развертывания настраиваемых моделей см. в статье az cognitiveservices account deployment
.
Чтобы выполнить эту команду Azure CLI в окне консоли, необходимо заменить следующие <заполнители соответствующими значениями> для настраиваемой модели:
Заполнитель | Значение |
---|---|
<YOUR_AZURE_SUBSCRIPTION> | Имя или идентификатор подписки Azure. |
<YOUR_RESOURCE_GROUP> | Имя группы ресурсов Azure. |
<YOUR_RESOURCE_NAME> | Имя ресурса Azure OpenAI. |
<YOUR_DEPLOYMENT_NAME> | Имя, которое вы хотите использовать для развертывания модели. |
<YOUR_FINE_TUNED_MODEL_ID> | Имя настраиваемой модели. |
az cognitiveservices account deployment create
--resource-group <YOUR_RESOURCE_GROUP>
--name <YOUR_RESOURCE_NAME>
--deployment-name <YOUR_DEPLOYMENT_NAME>
--model-name <YOUR_FINE_TUNED_MODEL_ID>
--model-version "1"
--model-format OpenAI
--sku-capacity "1"
--sku-name "Standard"
Использование развернутой настраиваемой модели
После развертывания пользовательской модели его можно использовать как любую другую развернутую модель. Вы можете использовать игровые площадки в Azure AI Studio для экспериментов с новым развертыванием. Вы можете продолжать использовать те же параметры с пользовательской моделью, например temperature
с max_tokens
другими развернутыми моделями. Для точно настроенных babbage-002
и davinci-002
моделей вы будете использовать игровую площадку завершения и API завершения. Для точно настроенных gpt-35-turbo-0613
моделей вы будете использовать игровую площадку чата и API завершения чата.
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-02-01"
)
response = client.chat.completions.create(
model="gpt-35-turbo-ft", # model = "Custom deployment name you chose for your fine-tuning model"
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
{"role": "user", "content": "Do other Azure AI services support this too?"}
]
)
print(response.choices[0].message.content)
Анализ настраиваемой модели
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-файл, содержащий строку заголовка и строку для каждого шага обучения, выполняемого заданием тонкой настройки. Результирующий файл содержит следующие столбцы:
Имя столбца | Description |
---|---|
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 Studio. Выберите ссылку для обученной модели, и вы увидите три диаграммы: потеря, средняя точность маркера и точность маркера. Если вы предоставили данные проверки, оба набора данных будут отображаться на одном графике.
Найдите потерю, чтобы уменьшиться с течением времени, и ваша точность для увеличения. Если вы видите расхождение между данными обучения и проверки, которые могут указывать на то, что вы переопределяются. Попробуйте обучать с меньшим количеством эпох или умножением меньшей скорости обучения.
Очистка развертываний, настраиваемых моделей и файлов обучения
После завершения работы с настроенной моделью можно удалить развертывание и модель. При необходимости вы также можете удалить файлы обучения и проверки, отправленные в службу.
Удаление развертывания модели
Внимание
После развертывания настраиваемой модели, если в любое время развертывание остается неактивным в течение более чем пятнадцати дней (15) развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более чем через 15 дней назад, а в течение непрерывного 15-дневного периода вызовы завершений или завершения чата не выполнялись.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель, а настраиваемую модель можно повторно развернуть в любое время. Как описано в ценах на Azure OpenAI Service, каждая настраиваемая (настраиваемая) модель, развернутая почасовая стоимость размещения независимо от того, выполняются ли вызовы завершения или завершения чата в модель. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в руководстве по управлению затратами на Службу Azure OpenAI.
Вы можете использовать различные методы для удаления развертывания для настраиваемой модели:
Удаление настраиваемой модели
Аналогичным образом можно использовать различные методы для удаления настраиваемой модели:
Примечание.
Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Прежде чем удалить настраиваемую модель, необходимо сначала удалить развертывание модели.
Удаление файлов обучения
Кроме того, вы можете удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, из подписки Azure OpenAI. Для удаления обучающих, проверки и результирующих файлов можно использовать следующие методы:
- Azure AI Studio
- ИНТЕРФЕЙСы REST API
- Пакет SDK для Python
В следующем примере Python пакет SDK для Python используется для удаления обучающих, проверки и результирующих файлов для настраиваемой модели:
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)
Непрерывная настройка
После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.
Для точной настройки модели, которую вы ранее настроили, вы будете использовать тот же процесс, что и при создании настраиваемой модели , но вместо указания имени универсальной базовой модели можно указать идентификатор уже точно настроенной модели. Идентификатор точно настроенной модели выглядит следующим образом. gpt-35-turbo-0613.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-02-01"
)
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7" # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters.
)
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 Studio" или создать список моделей для определенного ресурса Azure OpenAI с помощью REST API.
Необходимые компоненты
- Ознакомьтесь с руководством по настройке Azure OpenAI.
- Подписка Azure. Создайте ее бесплатно.
- Ресурс Azure OpenAI. Дополнительные сведения см. в статье "Создание ресурса" и развертывание модели с помощью Azure OpenAI.
- Для доступа к тонкой настройке требуется участник OpenAI Cognitive Services.
- Если у вас еще нет доступа к квоте и развертыванию моделей в Azure AI Studio, вам потребуются дополнительные разрешения.
Модели
Следующие модели поддерживают точную настройку:
babbage-002
davinci-002
gpt-35-turbo
(0613)gpt-35-turbo
(1106)gpt-35-turbo
(0125)gpt-4
(0613)*gpt-4o
(2024-08-06)gpt-4o-mini
(2024-07-18)
* Предварительная настройка этой модели в настоящее время доступна в общедоступной предварительной версии.
Или можно точно настроить ранее настроенную модель, отформатированную как base-model.ft-{jobid}.
Ознакомьтесь со страницей моделей, чтобы проверить, какие регионы в настоящее время поддерживают точное настройка.
Просмотр рабочего процесса для REST API
Ознакомьтесь с рабочим процессом точной настройки для использования REST APIS и Python с Azure OpenAI:
- Подготовьте данные обучения и проверки.
- Выберите базовую модель.
- Отправьте данные обучения.
- Обучите новую настраиваемую модель.
- Проверьте состояние настраиваемой модели.
- Разверните настраиваемую модель для использования.
- Используйте настраиваемую модель.
- При необходимости проанализируйте настраиваемую модель для повышения производительности и соответствия.
Подготовка данных обучения и проверки
Данные обучения и наборы данных для проверки состоят из входных и выходных примеров того, как должна работать модель.
Для различных типов моделей требуется другой формат обучающих данных.
Используемые данные обучения и проверки должны быть отформатированы в виде документа JSON Lines (JSONL). Для gpt-35-turbo-0613
и других связанных моделей набор данных тонкой настройки должен быть отформатирован в формате беседы, который используется API завершения чата .
Если вы хотите пошаговые инструкции gpt-35-turbo-0613
по настройке, обратитесь к руководству по настройке Azure OpenAI.
Пример формата файла
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}
Формат файла чата с несколькими поворотами
Кроме того, поддерживается несколько поворотов беседы в одной строке файла обучения 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}]}
Помимо формата JSONL, файлы данных обучения и проверки должны быть закодированы в UTF-8 и включать метку порядка байтов (BOM). Размер файла должен быть меньше 512 МБ.
Создание наборов данных для обучения и проверки
Чем больше примеров обучения у вас есть, тем лучше. Задания тонкой настройки не будут продолжаться без по крайней мере 10 примеров обучения, но такое небольшое число недостаточно, чтобы заметно повлиять на ответы модели. Рекомендуется предоставить сотни, если не тысячи, примеры обучения, которые будут успешными.
Как правило, удвоение размера набора данных может привести к линейному увеличению качества модели. Но помните, что примеры низкого качества могут негативно повлиять на производительность. Если вы обучите модель на большом количестве внутренних данных без первого обрезки набора данных только для самых качественных примеров, вы можете в конечном итоге получить модель, которая выполняет гораздо хуже, чем ожидалось.
Выбор базовой модели
Первым шагом в создании пользовательской модели является выбор базовой модели. Панель базовых моделей позволяет выбрать базовую модель, используемую для пользовательской модели. Выбор влияет как на производительность, так и на стоимость модели.
Выберите базовую модель в раскрывающемся списке " Тип базовой модели" и нажмите кнопку "Далее ".
Вы можете создать пользовательскую модель из одной из следующих доступных базовых моделей:
babbage-002
davinci-002
gpt-35-turbo
(0613)gpt-35-turbo
(1106)gpt-35-turbo
(0125)gpt-4
(0613)gpt-4o
(2024-08-06)gpt-4o-mini
(2023-07-18)
Или можно точно настроить ранее настроенную модель, отформатированную как base-model.ft-{jobid}.
Дополнительные сведения о базовых моделях, которые можно настроить, см. в разделе "Модели".
Отправка данных для обучения
Следующим шагом является выбор существующих подготовленных обучающих данных или отправка новых подготовленных обучающих данных для использования при точной настройке модели. После подготовки обучающих данных вы можете передать файлы в службу. Существует два способа отправки обучающих данных:
Для больших файлов данных рекомендуется импортировать из хранилища 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-05-01-preview \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-35-turbo-0613",
"training_file": "<TRAINING_FILE_ID>",
"validation_file": "<VALIDATION_FILE_ID>",
"seed": 105
}'
Кроме того, можно передать дополнительные необязательные параметры, такие как гиперпараметры , чтобы получить более широкий контроль над процессом тонкой настройки. Для начального обучения рекомендуется использовать автоматические значения по умолчанию, которые присутствуют без указания этих параметров.
Текущие поддерживаемые гиперпараметры для точной настройки:
Имя | Тип | Description |
---|---|---|
batch_size |
integer | Размер пакета, используемый для обучения. Размер пакета — это количество обучающих примеров, используемых для обучения одного прямого и обратного прохода. Как правило, большие размеры пакетов работают лучше для больших наборов данных. Значение по умолчанию, а также максимальное значение этого свойства относятся к базовой модели. Более крупный размер пакета означает, что параметры модели обновляются реже, но с более низкой дисперсией. |
learning_rate_multiplier |
number | Множитель скорости обучения, используемый для обучения. Скорость обучения точной настройки — это исходная скорость обучения, используемая для предварительного обучения, умноженная на данное значение. Более крупные показатели обучения, как правило, лучше работают с большими размерами пакетов. Мы рекомендуем поэкспериментировать со значениями в диапазоне от 0,02 до 0,2, чтобы проверить, что даст наилучшие результаты. Меньшая скорость обучения может оказаться полезной, чтобы избежать переподбора. |
n_epochs |
integer | Количество эпох для обучения модели. Под эпохой понимается один полный просмотр набора данных для обучения. |
seed |
integer | Начальное значение определяет воспроизводимость задания. Передача одинаковых параметров начального значения и заданий должна иметь одинаковые результаты, но может отличаться в редких случаях. Если начальное значение не указано, он будет создан для вас. |
Проверка состояния настраиваемой модели
После запуска задания точной настройки может потребоваться некоторое время. Задание может находиться в очереди за другими заданиями в системе. Обучение модели может занять несколько минут или часов в зависимости от размера модели и набора данных. В следующем примере rest API используется для проверки состояния задания точной настройки. В примере извлекаются сведения о задании с помощью идентификатора задания, возвращаемого из предыдущего примера:
curl -X GET $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<YOUR-JOB-ID>?api-version=2024-05-01-preview \
-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-05-01-preview \
-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-05-01-preview \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Оценка безопасности GPT-4, GPT-4o, GPT-4o-mini тонкой настройки — общедоступная предварительная версия
GPT-4o, GPT-4o-mini и GPT-4 являются нашими самыми передовыми моделями, которые можно настроить в соответствии с вашими потребностями. Как и в случае с моделями Azure OpenAI, расширенные возможности точно настроенных моделей поставляются с повышенными ответственностью проблемами ИИ, связанными с вредным содержимым, манипуляцией, поведением человека, проблемами конфиденциальности и т. д. Дополнительные сведения о рисках, возможностях и ограничениях см. в обзоре практик ответственного искусственного интеллекта и заметке о прозрачности. Чтобы снизить риски, связанные с расширенными точно настроенными моделями, мы реализовали дополнительные шаги оценки, которые помогут выявить и предотвратить вредное содержимое в обучении и выходных данных точно настроенных моделей. Эти действия предназначены для фильтрации содержимого службы OpenAI в Microsoft Responsible AI Standard и Azure OpenAI.
- Оценки выполняются в выделенных, конкретных клиентах, частных рабочих областях;
- Конечные точки оценки находятся в том же географическом регионе, что и ресурс Azure OpenAI;
- Обучающие данные не хранятся в связи с выполнением вычислений; сохраняется только окончательная оценка модели (развертываемая или не развертываемая); и
Фильтры оценки модели GPT-4o, GPT-4o-mini и GPT-4 устанавливаются для предопределенных пороговых значений и не могут быть изменены клиентами; Они не привязаны к какой-либо конфигурации фильтрации пользовательского содержимого, которую вы могли создать.
Оценка данных
Перед началом обучения данные оцениваются на потенциально вредное содержимое (насилие, сексуальное, ненависть и справедливость, самоповредение— см. здесь определения категорий). Если вредное содержимое обнаружено выше указанного уровня серьезности, задание обучения завершится ошибкой, и вы получите сообщение о категориях сбоя.
Пример сообщения:
The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.
Данные обучения оцениваются автоматически в задании импорта данных в рамках предоставления возможности точной настройки.
Если задание тонкой настройки завершается сбоем из-за обнаружения вредного содержимого в обучающих данных, плата не будет взиматься.
Оценка модели
После завершения обучения, но до того, как модель точной настройки доступна для развертывания, результирующая модель оценивается для потенциально опасных ответов с помощью встроенных метрик риска и безопасности Azure. Используя тот же подход к тестированию, который мы используем для базовых больших языковых моделей, наша возможность оценки имитирует беседу с вашей точно настроенной моделью, чтобы оценить потенциал для вывода вредного содержимого, опять же с использованием указанных категорий вредного контента (насилие, сексуальное, ненависть и справедливость, самоповредение).
Если модель создается для создания выходных данных, содержащих содержимое, обнаруженное как вредное выше допустимой частоты, вы будете проинформированы о том, что ваша модель недоступна для развертывания, с информацией о конкретных категориях обнаруженных вреда:
Пример сообщения:
This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.
Как и при оценке данных, модель вычисляется автоматически в задании тонкой настройки в рамках предоставления возможности тонкой настройки. Только результирующая оценка (развертываемая или недоступная) регистрируется службой. Если развертывание точно настроенной модели завершается сбоем из-за обнаружения вредного содержимого в выходных данных модели, плата за выполнение обучения не будет взиматься.
Развертывание точно настроенной модели
Внимание
После развертывания настраиваемой модели, если в любое время развертывание остается неактивным в течение более чем пятнадцати дней (15) развертывание удаляется. Развертывание настраиваемой модели неактивно, если модель была развернута более чем через 15 дней назад, а в течение непрерывного 15-дневного периода вызовы завершений или завершения чата не выполнялись.
Удаление неактивного развертывания не влияет на базовую настраиваемую модель, а настраиваемую модель можно повторно развернуть в любое время. Как описано в ценах на Azure OpenAI Service, каждая настраиваемая (настраиваемая) модель, развернутая почасовая стоимость размещения независимо от того, выполняются ли вызовы завершения или завершения чата в модель. Дополнительные сведения о планировании и управлении затратами с помощью Azure OpenAI см. в руководстве по управлению затратами на Службу Azure OpenAI.
В следующем примере Python показано, как использовать REST API для создания развертывания модели для настраиваемой модели. REST API создает имя для развертывания настраиваемой модели.
переменная | Определение |
---|---|
token | Существует несколько способов создания маркера авторизации. Самый простой способ начального тестирования — запустить Cloud Shell из портал Azure. Затем выполните az account get-access-token . Этот маркер можно использовать в качестве временного маркера авторизации для тестирования API. Мы рекомендуем хранить это в новой переменной среды. |
Подписка | Идентификатор подписки для связанного ресурса Azure OpenAI. |
resource_group | Имя группы ресурсов для ресурса Azure OpenAI. |
resource_name | Имя ресурса Azure OpenAI. |
model_deployment_name | Настраиваемое имя для нового точно настроенного развертывания модели. Это имя, которое будет ссылаться в коде при вызове завершения чата. |
fine_tuned_model | Получение этого значения из задания точной настройки приводит к предыдущему шагу. Оно выглядит так: gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83 . Необходимо добавить это значение в json deploy_data. Кроме того, можно развернуть контрольную точку, передав идентификатор контрольной точки, который будет отображаться в формате 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=2023-05-01" \
-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"
}
}
}'
Развертывание между регионами
Точная настройка поддерживает развертывание точно настроенной модели в другом регионе, отличном от того, где модель была изначально настроена. Вы также можете развернуть в другой подписке или регионе.
Единственными ограничениями являются то, что новый регион также должен поддерживать точную настройку, а при развертывании между подписками учетная запись, создающая маркер авторизации для развертывания, должна иметь доступ как к исходным, так и к целевым подпискам.
Ниже приведен пример развертывания модели, которая была точно настроена в одной подписке или регионе в другой.
curl -X PUT "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2023-05-01" \
-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",
"source": "/subscriptions/{sourceSubscriptionID}/resourceGroups/{sourceResourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{sourceAccount}"
}
}
}'
Для развертывания между одной подпиской, но в разных регионах вам потребуется только подписка и группы ресурсов для переменных источника и назначения, а имена исходных и целевых ресурсов должны быть уникальными.
Развертывание модели с помощью Azure CLI
В следующем примере показано, как использовать Azure CLI для развертывания настраиваемой модели. В Azure CLI необходимо указать имя развертывания настраиваемой модели. Дополнительные сведения об использовании Azure CLI для развертывания настраиваемых моделей см. в статье az cognitiveservices account deployment
.
Чтобы выполнить эту команду Azure CLI в окне консоли, необходимо заменить следующие <заполнители соответствующими значениями> для настраиваемой модели:
Заполнитель | Значение |
---|---|
<YOUR_AZURE_SUBSCRIPTION> | Имя или идентификатор подписки Azure. |
<YOUR_RESOURCE_GROUP> | Имя группы ресурсов Azure. |
<YOUR_RESOURCE_NAME> | Имя ресурса Azure OpenAI. |
<YOUR_DEPLOYMENT_NAME> | Имя, которое вы хотите использовать для развертывания модели. |
<YOUR_FINE_TUNED_MODEL_ID> | Имя настраиваемой модели. |
az cognitiveservices account deployment create
--resource-group <YOUR_RESOURCE_GROUP>
--name <YOUR_RESOURCE_NAME>
--deployment-name <YOUR_DEPLOYMENT_NAME>
--model-name <YOUR_FINE_TUNED_MODEL_ID>
--model-version "1"
--model-format OpenAI
--sku-capacity "1"
--sku-name "Standard"
Использование развернутой настраиваемой модели
После развертывания пользовательской модели его можно использовать как любую другую развернутую модель. Вы можете использовать игровые площадки в Azure AI Studio для экспериментов с новым развертыванием. Вы можете продолжать использовать те же параметры с пользовательской моделью, например temperature
с max_tokens
другими развернутыми моделями. Для точно настроенных babbage-002
и davinci-002
моделей вы будете использовать игровую площадку завершения и API завершения. Для точно настроенных gpt-35-turbo-0613
моделей вы будете использовать игровую площадку чата и API завершения чата.
curl $AZURE_OPENAI_ENDPOINT/openai/deployments/<deployment_name>/chat/completions?api-version=2023-05-15 \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{"messages":[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},{"role": "user", "content": "Do other Azure AI services support this too?"}]}'
Анализ настраиваемой модели
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-файл, содержащий строку заголовка и строку для каждого шага обучения, выполняемого заданием тонкой настройки. Результирующий файл содержит следующие столбцы:
Имя столбца | Description |
---|---|
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 Studio. Выберите ссылку для обученной модели, и вы увидите три диаграммы: потеря, средняя точность маркера и точность маркера. Если вы предоставили данные проверки, оба набора данных будут отображаться на одном графике.
Найдите потерю, чтобы уменьшиться с течением времени, и ваша точность для увеличения. Если вы видите расхождение между данными обучения и проверки, которые могут указывать на то, что вы переопределяются. Попробуйте обучать с меньшим количеством эпох или умножением меньшей скорости обучения.
Очистка развертываний, настраиваемых моделей и файлов обучения
После завершения работы с настроенной моделью можно удалить развертывание и модель. При необходимости вы также можете удалить файлы обучения и проверки, отправленные в службу.
Удаление развертывания модели
Вы можете использовать различные методы для удаления развертывания для настраиваемой модели:
Удаление настраиваемой модели
Аналогичным образом можно использовать различные методы для удаления настраиваемой модели:
Примечание.
Вы не можете удалить настраиваемую модель, если она имеет существующее развертывание. Прежде чем удалить настраиваемую модель, необходимо сначала удалить развертывание модели.
Удаление файлов обучения
Кроме того, вы можете удалить файлы обучения и проверки, отправленные для обучения, и файлы результатов, созданные во время обучения, из подписки Azure OpenAI. Для удаления обучающих, проверки и результирующих файлов можно использовать следующие методы:
Непрерывная настройка
После создания точно настроенной модели может потребоваться продолжить уточнение модели с течением времени с помощью дальнейшей тонкой настройки. Непрерывная итеративная настройка — это итеративный процесс выбора уже настраиваемой модели в качестве базовой модели и последующей настройки новых наборов примеров обучения.
Для точной настройки модели, которую вы ранее настроили, можно использовать тот же процесс, что и при создании настраиваемой модели , но вместо указания имени универсальной базовой модели можно указать идентификатор уже точно настроенной модели. Идентификатор точно настроенной модели выглядит следующим образом. gpt-35-turbo-0613.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-35-turbo-0613.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 Studio или создать список моделей для определенного ресурса Azure OpenAI с помощью REST API.
Устранение неполадок
Разделы справки включить точную настройку? Создание пользовательской модели неактивно в Azure OpenAI Studio?
Чтобы успешно получить доступ к тонкой настройке, необходимо назначить участника OpenAI Cognitive Services. Даже у кого-то с разрешениями высокого уровня администратора службы по-прежнему потребуется явно установить эту учетную запись, чтобы получить доступ к тонкой настройке. Дополнительные сведения см. в руководстве по управлению доступом на основе ролей.
Почему сбой отправки?
Если отправка файла завершается ошибкой в Azure OpenAI Studio, вы можете просмотреть сообщение об ошибке в разделе "Файлы данных" в Azure OpenAI Studio. Наведите указатель мыши на сообщение "Ошибка" (в столбце состояния) и будет отображаться объяснение сбоя.
Моя точно настроенная модель, кажется, не улучшилась
Отсутствующее системное сообщение: при точной настройке необходимо предоставить системное сообщение. При использовании точно настроенной модели необходимо предоставить такое же системное сообщение. Если вы предоставляете другое системное сообщение, вы можете увидеть результаты, отличные от того, что вы настроили.
Недостаточно данных: хотя 10 является минимальным для запуска конвейера, вам потребуется сотни до тысяч точек данных, чтобы научить модель новому навыку. Слишком мало точек данных рискует переполнение и плохое обобщение. Ваша точно настроенная модель может хорошо работать с данными обучения, но плохо на других данных, так как она замечает примеры обучения вместо шаблонов обучения. Для получения наилучших результатов запланируйте подготовку набора данных с сотнями или тысячами точек данных.
Плохие данные: плохо курируемый или нерекоменциативный набор данных создаст модель низкого качества. Модель может изучать неточные или предвзятые шаблоны из набора данных. Например, если вы обучаете чат-бота для обслуживания клиентов, но предоставляете только обучающие данные для одного сценария (например, возвращаемого элементом), он не будет знать, как реагировать на другие сценарии. Или, если данные обучения плохи (содержат неправильные ответы), модель узнает, чтобы предоставить неверные результаты.
Следующие шаги
- Изучите возможности тонкой настройки в руководстве по настройке Azure OpenAI.
- Обзор региональной доступности модели точной настройки
- Дополнительные сведения о квотах Azure OpenAI