Начало работы с пакетными развертываниями Azure OpenAI
API пакетной службы Azure OpenAI предназначен для эффективной обработки крупномасштабных и больших объемов задач. Обработка асинхронных групп запросов с отдельной квотой с 24-часовым временным поворотом при 50% меньше затрат, чем глобальный стандарт. При пакетной обработке вместо отправки одного запроса за раз вы отправляете большое количество запросов в одном файле. Глобальные пакетные запросы имеют отдельную квоту токена, вложенную в очередь, избежать нарушений работы рабочих нагрузок в Сети.
Основные примеры таких ситуаций:
Обработка крупномасштабных данных: быстро анализируйте обширные наборы данных параллельно.
Создание содержимого: создание больших объемов текста, таких как описания продуктов или статьи.
Проверка и сводка документов. Автоматизация проверки и сводки длинных документов.
Автоматизация поддержки клиентов. Обработка многочисленных запросов одновременно для ускорения ответов.
Извлечение и анализ данных. Извлечение и анализ данных из огромных объемов неструктурированных данных.
Задачи обработки естественного языка (NLP): выполнение таких задач, как анализ тональности или перевод больших наборов данных.
Маркетинг и персонализация: создание персонализированного содержимого и рекомендаций в масштабе.
Внимание
Мы стремимся обрабатывать пакетные запросы в течение 24 часов; Срок действия заданий, которые занимают больше времени, не истекает. Задание можно отменить в любое время. При отмене задания все оставшиеся трудоемки будут отменены, а все уже завершенные работы возвращаются. Вы будете взиматься за все завершенные работы.
Данные, хранящиеся в неактивных данных, остаются в указанном географическом регионе Azure, а данные могут обрабатываться для вывода в любом расположении Azure OpenAI. Дополнительные сведения о местонахождении данных.
Поддержка пакетной службы
Доступность глобальной пакетной модели
Регион | gpt-4o, 2024-05-13 | gpt-4o, 2024-08-06 | gpt-4o, 2024-11-20 | gpt-4o-mini, 2024-07-18 | gpt-4, 0613 | gpt-4, turbo-2024-04-09 | gpt-35-turbo, 0613 | gpt-35-turbo, 1106 | gpt-35-turbo, 0125 |
---|---|---|---|---|---|---|---|---|---|
australiaeast | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
brazilsouth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
canadaeast | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
eastus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
eastus2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
francecentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
germanywestcentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
japaneast | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
koreacentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
northcentralus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
norwayeast | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
польшацентральная | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
southafricanorth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
southcentralus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
southindia | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
swedencentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
switzerlandnorth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
uksouth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
westeurope | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
westus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
westus3 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Следующие модели поддерживают глобальный пакет:
Модель | Версия | Формат входных данных |
---|---|---|
gpt-4o |
2024-08-06 | текст + изображение |
gpt-4o-mini |
2024-07-18 | текст + изображение |
gpt-4o |
2024-05-13 | текст + изображение |
gpt-4 |
turbo-2024-04-09 | text |
gpt-4 |
0613 | text |
gpt-35-turbo |
0125 | text |
gpt-35-turbo |
1106 | text |
gpt-35-turbo |
0613 | text |
Перейдите на страницу моделей для наиболее актуальных сведений о регионах и моделях, где в настоящее время поддерживается глобальный пакет.
поддержка API
Версия API | |
---|---|
Последний выпуск API общедоступной версии: | 2024-10-21 |
Последняя предварительная версия API: | 2024-10-01-preview |
В первую очередь добавлена поддержка: 2024-07-01-preview
Поддерживаемые компоненты
В настоящее время не поддерживается следующее:
- Интеграция с API помощников.
- Интеграция с Azure OpenAI On Your Data feature.
Примечание.
Структурированные выходные данные теперь поддерживаются в глобальной пакетной службе.
Пакетное развертывание
Примечание.
На портале Azure AI Foundry типы пакетного развертывания будут отображаться как Global-Batch
и Data Zone Batch
. Дополнительные сведения о типах развертывания Azure OpenAI см. в руководстве по типам развертывания.
Совет
Рекомендуется включить динамическую квоту для всех развертываний глобальной пакетной модели, чтобы избежать сбоев заданий из-за недостаточной квоты токена. Динамическая квота позволяет развертыванию оппортунистически воспользоваться преимуществами дополнительной квоты при наличии дополнительной емкости. Если динамическая квота отключена, развертывание сможет обрабатывать запросы только до ограничения токена, определенного при создании развертывания.
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Ресурс Azure OpenAI с моделью развернутого типа
Global-Batch
развертывания. Вы можете ознакомиться с руководством по созданию ресурсов и развертыванию моделей, чтобы помочь в этом процессе.
Подготовка пакетного файла
Как и в случае с тонкой настройкой, глобальный пакет использует файлы в формате строк JSON (.jsonl
). Ниже приведены некоторые примеры файлов с различными типами поддерживаемого содержимого:
Формат входных данных
- Стандартные входные данные
- Изображение в кодировке Base64
- URL-адрес изображения
- Структурированные выходные данные
{"custom_id": "task-0", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was Microsoft founded?"}]}}
{"custom_id": "task-1", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was the first XBOX released?"}]}}
{"custom_id": "task-2", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "What is Altair Basic?"}]}}
Требуется custom_id
, чтобы определить, какой отдельный пакетный запрос соответствует заданному ответу. Ответы не будут возвращены одинаково, чтобы порядок, определенный в пакетном .jsonl
файле.
model
Атрибут должен быть задан в соответствии с именем глобального развертывания пакетной службы, которое вы хотите использовать для ответов вывода.
Внимание
Атрибут model
должен быть задан в соответствии с именем развертывания глобальной пакетной службы, которое вы хотите использовать для ответов вывода. Одно и то же имя развертывания глобальной пакетной модели должно присутствовать в каждой строке пакетного файла. Если вы хотите использовать другое развертывание, необходимо сделать это в отдельном пакетном файле или задании.
Для оптимальной производительности рекомендуется отправлять большие файлы для пакетной обработки, а не большое количество небольших файлов с несколькими строками в каждом файле.
Создание входного файла
В этой статье мы создадим файл с именем test.jsonl
и скопируйм содержимое из стандартного блока входного кода выше в файл. Вам потребуется изменить и добавить имя глобального пакетного развертывания в каждую строку файла.
Отправка пакетного файла
После подготовки входного файла сначала необходимо отправить файл, чтобы затем начать пакетное задание. Отправка файлов можно выполнять как программным способом, так и через Студию.
Войдите на портал Azure AI Foundry.
Выберите ресурс Azure OpenAI, в котором доступно развертывание глобальной пакетной модели.
Выберите задания> пакетной службы и создание пакетных заданий.
В раскрывающемся списке в разделе "Отправка данных> пакетной службы>" выберите "Отправить файл" и укажите путь к
test.jsonl
файлу, созданному на предыдущем шаге >Далее.
Создание пакетного задания
Нажмите кнопку "Создать", чтобы запустить пакетное задание.
Отслеживание хода выполнения пакетного задания
После создания задания можно отслеживать ход выполнения задания, выбрав идентификатор задания для последнего созданного задания. По умолчанию вы перейдете на страницу состояния для последнего созданного пакетного задания.
Состояние задания можно отслеживать на панели справа:
Получение выходного файла пакетного задания
После завершения или достижения состояния терминала он создаст файл ошибок и выходной файл, который можно скачать для проверки, нажав соответствующую кнопку со значком стрелки вниз.
Отмена пакета
Отменяет выполняемый пакет. Пакет будет находиться в состоянии cancelling
до 10 минут, прежде чем переходить cancelled
на , где он будет иметь частичные результаты (если таковые имеются), доступные в выходном файле.
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Python 3.8 или более поздней версии
- Следующая библиотека Python:
openai
- Записные книжки Jupyter
- Ресурс Azure OpenAI с моделью развернутого типа
Global-Batch
развертывания. Вы можете ознакомиться с руководством по созданию ресурсов и развертыванию моделей, чтобы помочь в этом процессе.
Действия, описанные в этой статье, предназначены для последовательного выполнения в Jupyter Notebook. По этой причине мы создадим экземпляр клиента Azure OpenAI сразу в начале примеров. Если вы хотите выполнить шаг вне порядка, вам часто потребуется настроить клиент Azure OpenAI в рамках этого вызова.
Даже если у вас уже установлена библиотека OpenAI Python, может потребоваться обновить установку до последней версии:
!pip install openai --upgrade
Подготовка пакетного файла
Как и в случае с тонкой настройкой, глобальный пакет использует файлы в формате строк JSON (.jsonl
). Ниже приведены некоторые примеры файлов с различными типами поддерживаемого содержимого:
Формат входных данных
- Стандартные входные данные
- Изображение в кодировке Base64
- URL-адрес изображения
- Структурированные выходные данные
{"custom_id": "task-0", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was Microsoft founded?"}]}}
{"custom_id": "task-1", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was the first XBOX released?"}]}}
{"custom_id": "task-2", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "What is Altair Basic?"}]}}
Требуется custom_id
, чтобы определить, какой отдельный пакетный запрос соответствует заданному ответу. Ответы не будут возвращены одинаково, чтобы порядок, определенный в пакетном .jsonl
файле.
model
Атрибут должен быть задан в соответствии с именем глобального развертывания пакетной службы, которое вы хотите использовать для ответов вывода.
Внимание
Атрибут model
должен быть задан в соответствии с именем развертывания глобальной пакетной службы, которое вы хотите использовать для ответов вывода. Одно и то же имя развертывания глобальной пакетной модели должно присутствовать в каждой строке пакетного файла. Если вы хотите использовать другое развертывание, необходимо сделать это в отдельном пакетном файле или задании.
Для оптимальной производительности рекомендуется отправлять большие файлы для пакетной обработки, а не большое количество небольших файлов с несколькими строками в каждом файле.
Создание входного файла
В этой статье мы создадим файл с именем test.jsonl
и скопируйм содержимое из стандартного блока входного кода выше в файл. Вам потребуется изменить и добавить имя глобального пакетного развертывания в каждую строку файла. Сохраните этот файл в том же каталоге, который выполняется записная книжка Jupyter.
Отправка пакетного файла
После подготовки входного файла сначала необходимо отправить файл, чтобы затем начать пакетное задание. Отправка файлов можно выполнять как программным способом, так и через Студию. В этом примере используются переменные среды вместо значений ключа и конечной точки. Если вы не знакомы с использованием переменных среды с Python, обратитесь к одному из наших кратких руководств , где процесс настройки переменных среды описан пошаговые инструкции.
import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=token_provider,
api_version="2024-10-21"
)
# Upload a file with a purpose of "batch"
file = client.files.create(
file=open("test.jsonl", "rb"),
purpose="batch"
)
print(file.model_dump_json(indent=2))
file_id = file.id
Выходные данные:
{
"id": "file-9f3a81d899b4442f98b640e4bc3535dd",
"bytes": 815,
"created_at": 1722476551,
"filename": "test.jsonl",
"object": "file",
"purpose": "batch",
"status": null,
"status_details": null
}
Создание пакетного задания
После успешной отправки файла можно отправить файл для пакетной обработки.
# Submit a batch job with the file
batch_response = client.batches.create(
input_file_id=file_id,
endpoint="/chat/completions",
completion_window="24h",
)
# Save batch ID for later use
batch_id = batch_response.id
print(batch_response.model_dump_json(indent=2))
Примечание.
В настоящее время окно завершения должно иметь значение 24h. Если задать любое другое значение, отличное от 24h, задание завершится ошибкой. Задания, выполняемые дольше 24 часов, будут продолжать выполняться до отмены.
Выходные данные:
{
"id": "batch_6caaf24d-54a5-46be-b1b7-518884fcbdde",
"completion_window": "24h",
"created_at": 1722476583,
"endpoint": null,
"input_file_id": "file-9f3a81d899b4442f98b640e4bc3535dd",
"object": "batch",
"status": "validating",
"cancelled_at": null,
"cancelling_at": null,
"completed_at": null,
"error_file_id": null,
"errors": null,
"expired_at": null,
"expires_at": 1722562983,
"failed_at": null,
"finalizing_at": null,
"in_progress_at": null,
"metadata": null,
"output_file_id": null,
"request_counts": {
"completed": 0,
"failed": 0,
"total": 0
}
}
Отслеживание хода выполнения пакетного задания
После успешного создания пакетного задания можно отслеживать ход выполнения в Студии или программно. При проверке хода выполнения пакетного задания рекомендуется ожидать не менее 60 секунд между каждым вызовом состояния.
import time
import datetime
status = "validating"
while status not in ("completed", "failed", "canceled"):
time.sleep(60)
batch_response = client.batches.retrieve(batch_id)
status = batch_response.status
print(f"{datetime.datetime.now()} Batch Id: {batch_id}, Status: {status}")
if batch_response.status == "failed":
for error in batch_response.errors.data:
print(f"Error code {error.code} Message {error.message}")
Выходные данные:
2024-07-31 21:48:32.556488 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde, Status: validating
2024-07-31 21:49:39.221560 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde, Status: in_progress
2024-07-31 21:50:53.383138 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde, Status: in_progress
2024-07-31 21:52:07.274570 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde, Status: in_progress
2024-07-31 21:53:21.149501 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde, Status: finalizing
2024-07-31 21:54:34.572508 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde, Status: finalizing
2024-07-31 21:55:35.304713 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde, Status: finalizing
2024-07-31 21:56:36.531816 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde, Status: finalizing
2024-07-31 21:57:37.414105 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde, Status: completed
Возможны следующие значения состояния:
Состояние | Description |
---|---|
validating |
Входной файл проверяется до начала пакетной обработки. |
failed |
Входной файл завершился сбоем процесса проверки. |
in_progress |
Входной файл был успешно проверен и пакет запущен в данный момент. |
finalizing |
Пакет завершился, и результаты подготавливаются. |
completed |
Пакет завершен, и результаты готовы. |
expired |
Пакет не удалось завершить в течение 24-часового периода. |
cancelling |
Пакет выполняется cancelled (это может занять до 10 минут, чтобы войти в силу.) |
cancelled |
Пакет был cancelled . |
Чтобы проверить сведения о состоянии задания, можно выполнить следующее:
print(batch_response.model_dump_json(indent=2))
Выходные данные:
{
"id": "batch_6caaf24d-54a5-46be-b1b7-518884fcbdde",
"completion_window": "24h",
"created_at": 1722476583,
"endpoint": null,
"input_file_id": "file-9f3a81d899b4442f98b640e4bc3535dd",
"object": "batch",
"status": "completed",
"cancelled_at": null,
"cancelling_at": null,
"completed_at": 1722477429,
"error_file_id": "file-c795ae52-3ba7-417d-86ec-07eebca57d0b",
"errors": null,
"expired_at": null,
"expires_at": 1722562983,
"failed_at": null,
"finalizing_at": 1722477177,
"in_progress_at": null,
"metadata": null,
"output_file_id": "file-3304e310-3b39-4e34-9f1c-e1c1504b2b2a",
"request_counts": {
"completed": 3,
"failed": 0,
"total": 3
}
}
Обратите внимание, что есть и error_file_id
отдельные output_file_id
. error_file_id
Используйте эту возможность для отладки любых проблем, возникающих при выполнении пакетного задания.
Получение выходного файла пакетного задания
import json
output_file_id = batch_response.output_file_id
if not output_file_id:
output_file_id = batch_response.error_file_id
if output_file_id:
file_response = client.files.content(output_file_id)
raw_responses = file_response.text.strip().split('\n')
for raw_response in raw_responses:
json_response = json.loads(raw_response)
formatted_json = json.dumps(json_response, indent=2)
print(formatted_json)
Выходные данные:
Для краткости мы включаем только один ответ завершения чата выходных данных. Если вы выполните действия, описанные в этой статье, у вас должно быть три ответа, аналогичные приведенному ниже:
{
"custom_id": "task-0",
"response": {
"body": {
"choices": [
{
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
},
"finish_reason": "stop",
"index": 0,
"logprobs": null,
"message": {
"content": "Microsoft was founded on April 4, 1975, by Bill Gates and Paul Allen in Albuquerque, New Mexico.",
"role": "assistant"
}
}
],
"created": 1722477079,
"id": "chatcmpl-9rFGJ9dh08Tw9WRKqaEHwrkqRa4DJ",
"model": "gpt-4o-2024-05-13",
"object": "chat.completion",
"prompt_filter_results": [
{
"prompt_index": 0,
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"jailbreak": {
"filtered": false,
"detected": false
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
],
"system_fingerprint": "fp_a9bfe9d51d",
"usage": {
"completion_tokens": 24,
"prompt_tokens": 27,
"total_tokens": 51
}
},
"request_id": "660b7424-b648-4b67-addc-862ba067d442",
"status_code": 200
},
"error": null
}
Дополнительные команды пакетной службы
Отмена пакета
Отменяет выполняемый пакет. Пакет будет находиться в состоянии cancelling
до 10 минут, прежде чем переходить cancelled
на , где он будет иметь частичные результаты (если таковые имеются), доступные в выходном файле.
client.batches.cancel("batch_abc123") # set to your batch_id for the job you want to cancel
Вывод списка пакетной службы
Вывод списка пакетных заданий для определенного ресурса Azure OpenAI.
client.batches.list()
Методы перечисления в библиотеке Python разбиены на страницы.
Список всех заданий:
all_jobs = []
# Automatically fetches more pages as needed.
for job in client.batches.list(
limit=20,
):
# Do something with job here
all_jobs.append(job)
print(all_jobs)
Пакет списка (предварительная версия)
Используйте REST API для перечисления всех пакетных заданий с дополнительными параметрами сортировки и фильтрации.
В приведенных ниже примерах мы предоставляем generate_time_filter
функцию, чтобы упростить создание фильтра. Если вы не хотите использовать эту функцию, формат строки фильтра будет выглядеть следующим created_at gt 1728860560 and status eq 'Completed'
образом.
import requests
import json
from datetime import datetime, timedelta
from azure.identity import DefaultAzureCredential
token_credential = DefaultAzureCredential()
token = token_credential.get_token('https://cognitiveservices.azure.com/.default')
endpoint = "https://{YOUR_RESOURCE_NAME}.openai.azure.com/"
api_version = "2024-10-01-preview"
url = f"{endpoint}openai/batches"
order = "created_at asc"
time_filter = lambda: generate_time_filter("past 8 hours")
# Additional filter examples:
#time_filter = lambda: generate_time_filter("past 1 day")
#time_filter = lambda: generate_time_filter("past 3 days", status="Completed")
def generate_time_filter(time_range, status=None):
now = datetime.now()
if 'day' in time_range:
days = int(time_range.split()[1])
start_time = now - timedelta(days=days)
elif 'hour' in time_range:
hours = int(time_range.split()[1])
start_time = now - timedelta(hours=hours)
else:
raise ValueError("Invalid time range format. Use 'past X day(s)' or 'past X hour(s)'")
start_timestamp = int(start_time.timestamp())
filter_string = f"created_at gt {start_timestamp}"
if status:
filter_string += f" and status eq '{status}'"
return filter_string
filter = time_filter()
headers = {'Authorization': 'Bearer ' + token.token}
params = {
"api-version": api_version,
"$filter": filter,
"$orderby": order
}
response = requests.get(url, headers=headers, params=params)
json_data = response.json()
if response.status_code == 200:
print(json.dumps(json_data, indent=2))
else:
print(f"Request failed with status code: {response.status_code}")
print(response.text)
Выходные данные:
{
"data": [
{
"cancelled_at": null,
"cancelling_at": null,
"completed_at": 1729011896,
"completion_window": "24h",
"created_at": 1729011128,
"error_file_id": "file-472c0626-4561-4327-9e4e-f41afbfb30e6",
"expired_at": null,
"expires_at": 1729097528,
"failed_at": null,
"finalizing_at": 1729011805,
"id": "batch_4ddc7b60-19a9-419b-8b93-b9a3274b33b5",
"in_progress_at": 1729011493,
"input_file_id": "file-f89384af0082485da43cb26b49dc25ce",
"errors": null,
"metadata": null,
"object": "batch",
"output_file_id": "file-62bebde8-e767-4cd3-a0a1-28b214dc8974",
"request_counts": {
"total": 3,
"completed": 2,
"failed": 1
},
"status": "completed",
"endpoint": "/chat/completions"
},
{
"cancelled_at": null,
"cancelling_at": null,
"completed_at": 1729016366,
"completion_window": "24h",
"created_at": 1729015829,
"error_file_id": "file-85ae1971-9957-4511-9eb4-4cc9f708b904",
"expired_at": null,
"expires_at": 1729102229,
"failed_at": null,
"finalizing_at": 1729016272,
"id": "batch_6287485f-50fc-4efa-bcc5-b86690037f43",
"in_progress_at": 1729016126,
"input_file_id": "file-686746fcb6bc47f495250191ffa8a28e",
"errors": null,
"metadata": null,
"object": "batch",
"output_file_id": "file-04399828-ae0b-4825-9b49-8976778918cb",
"request_counts": {
"total": 3,
"completed": 2,
"failed": 1
},
"status": "completed",
"endpoint": "/chat/completions"
}
],
"first_id": "batch_4ddc7b60-19a9-419b-8b93-b9a3274b33b5",
"has_more": false,
"last_id": "batch_6287485f-50fc-4efa-bcc5-b86690037f43"
}
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Ресурс Azure OpenAI с моделью развернутого типа
Global-Batch
развертывания. Вы можете ознакомиться с руководством по созданию ресурсов и развертыванию моделей, чтобы помочь в этом процессе.
Подготовка пакетного файла
Как и в случае с тонкой настройкой, глобальный пакет использует файлы в формате строк JSON (.jsonl
). Ниже приведены некоторые примеры файлов с различными типами поддерживаемого содержимого:
Формат входных данных
- Стандартные входные данные
- Изображение в кодировке Base64
- URL-адрес изображения
- Структурированные выходные данные
{"custom_id": "task-0", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was Microsoft founded?"}]}}
{"custom_id": "task-1", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was the first XBOX released?"}]}}
{"custom_id": "task-2", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "What is Altair Basic?"}]}}
Требуется custom_id
, чтобы определить, какой отдельный пакетный запрос соответствует заданному ответу. Ответы не будут возвращены одинаково, чтобы порядок, определенный в пакетном .jsonl
файле.
model
Атрибут должен быть задан в соответствии с именем глобального развертывания пакетной службы, которое вы хотите использовать для ответов вывода.
Внимание
Атрибут model
должен быть задан в соответствии с именем развертывания глобальной пакетной службы, которое вы хотите использовать для ответов вывода. Одно и то же имя развертывания глобальной пакетной модели должно присутствовать в каждой строке пакетного файла. Если вы хотите использовать другое развертывание, необходимо сделать это в отдельном пакетном файле или задании.
Для оптимальной производительности рекомендуется отправлять большие файлы для пакетной обработки, а не большое количество небольших файлов с несколькими строками в каждом файле.
Создание входного файла
В этой статье мы создадим файл с именем test.jsonl
и скопируйм содержимое из стандартного блока входного кода выше в файл. Вам потребуется изменить и добавить имя глобального пакетного развертывания в каждую строку файла.
Отправка пакетного файла
После подготовки входного файла сначала необходимо отправить файл, чтобы затем начать пакетное задание. Отправка файлов можно выполнять как программным способом, так и через Студию. В этом примере используются переменные среды вместо значений ключа и конечной точки. Если вы не знакомы с использованием переменных среды с Python, обратитесь к одному из наших кратких руководств , где процесс настройки переменных среды описан пошаговые инструкции.
Внимание
Если вы используете ключ API, сохраните его в другом месте, например в Azure Key Vault. Не включайте ключ API непосредственно в код и никогда не публикуйте его.
Дополнительные сведения о безопасности служб ИИ см. в статье "Проверка подлинности запросов к службам ИИ Azure".
curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files?api-version=2024-10-21 \
-H "Content-Type: multipart/form-data" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-F "purpose=batch" \
-F "file=@C:\\batch\\test.jsonl;type=application/json"
Приведенный выше код предполагает определенный путь к файлу test.jsonl. Настройте этот путь к файлу по мере необходимости для локальной системы.
Выходные данные:
{
"status": "pending",
"bytes": 686,
"purpose": "batch",
"filename": "test.jsonl",
"id": "file-21006e70789246658b86a1fc205899a4",
"created_at": 1721408291,
"object": "file"
}
Отслеживание состояния отправки файлов
В зависимости от размера файла отправки может потребоваться некоторое время, прежде чем он будет полностью отправлен и обработан. Чтобы проверить состояние отправки файла, выполните следующие действия:
curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files/{file-id}?api-version=2024-10-21 \
-H "api-key: $AZURE_OPENAI_API_KEY"
Выходные данные:
{
"status": "processed",
"bytes": 686,
"purpose": "batch",
"filename": "test.jsonl",
"id": "file-21006e70789246658b86a1fc205899a4",
"created_at": 1721408291,
"object": "file"
}
Создание пакетного задания
После успешной отправки файла можно отправить файл для пакетной обработки.
curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches?api-version=2024-10-21 \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input_file_id": "file-abc123",
"endpoint": "/chat/completions",
"completion_window": "24h"
}'
Примечание.
В настоящее время окно завершения должно иметь значение 24h. Если задать любое другое значение, отличное от 24h, задание завершится ошибкой. Задания, выполняемые дольше 24 часов, будут продолжать выполняться до отмены.
Выходные данные:
{
"cancelled_at": null,
"cancelling_at": null,
"completed_at": null,
"completion_window": "24h",
"created_at": "2024-07-19T17:13:57.2491382+00:00",
"error_file_id": null,
"expired_at": null,
"expires_at": "2024-07-20T17:13:57.1918498+00:00",
"failed_at": null,
"finalizing_at": null,
"id": "batch_fe3f047a-de39-4068-9008-346795bfc1db",
"in_progress_at": null,
"input_file_id": "file-21006e70789246658b86a1fc205899a4",
"errors": null,
"metadata": null,
"object": "batch",
"output_file_id": null,
"request_counts": {
"total": null,
"completed": null,
"failed": null
},
"status": "Validating"
}
Отслеживание хода выполнения пакетного задания
После успешного создания пакетного задания можно отслеживать ход выполнения в Студии или программно. При проверке хода выполнения пакетного задания рекомендуется ожидать не менее 60 секунд между каждым вызовом состояния.
curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches/{batch_id}?api-version=2024-10-21 \
-H "api-key: $AZURE_OPENAI_API_KEY"
Выходные данные:
{
"cancelled_at": null,
"cancelling_at": null,
"completed_at": null,
"completion_window": "24h",
"created_at": "2024-07-19T17:33:29.1619286+00:00",
"error_file_id": null,
"expired_at": null,
"expires_at": "2024-07-20T17:33:29.1578141+00:00",
"failed_at": null,
"finalizing_at": null,
"id": "batch_e0a7ee28-82c4-46a2-a3a0-c13b3c4e390b",
"in_progress_at": null,
"input_file_id": "file-c55ec4e859d54738a313d767718a2ac5",
"errors": null,
"metadata": null,
"object": "batch",
"output_file_id": null,
"request_counts": {
"total": null,
"completed": null,
"failed": null
},
"status": "Validating"
}
Возможны следующие значения состояния:
Состояние | Description |
---|---|
validating |
Входной файл проверяется до начала пакетной обработки. |
failed |
Входной файл завершился сбоем процесса проверки. |
in_progress |
Входной файл был успешно проверен и пакет запущен в данный момент. |
finalizing |
Пакет завершился, и результаты подготавливаются. |
completed |
Пакет завершен, и результаты готовы. |
expired |
Пакет не удалось завершить в течение 24-часового периода. |
cancelling |
Пакет выполняется cancelled (это может занять до 10 минут, чтобы войти в силу.) |
cancelled |
Пакет был cancelled . |
Получение выходного файла пакетного задания
curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files/{output_file_id}/content?api-version=2024-10-21 \
-H "api-key: $AZURE_OPENAI_API_KEY" > batch_output.jsonl
Дополнительные команды пакетной службы
Отмена пакета
Отменяет выполняемый пакет. Пакет будет находиться в состоянии cancelling
до 10 минут, прежде чем переходить cancelled
на , где он будет иметь частичные результаты (если таковые имеются), доступные в выходном файле.
curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches/{batch_id}/cancel?api-version=2024-10-21 \
-H "api-key: $AZURE_OPENAI_API_KEY"
Вывод списка пакетной службы
Перечислить существующие пакетные задания для заданного ресурса Azure OpenAI.
curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches?api-version=2024-10-21 \
-H "api-key: $AZURE_OPENAI_API_KEY"
Вызов API списка разбиен на страницы. Ответ содержит логическое значение has_more
, указывающее, когда есть больше результатов для итерации.
Пакет списка (предварительная версия)
Используйте REST API для перечисления всех пакетных заданий с дополнительными параметрами сортировки и фильтрации.
curl "YOUR_RESOURCE_NAME.openai.azure.com/batches?api-version=2024-10-01-preview&$filter=created_at%20gt%201728773533%20and%20created_at%20lt%201729032733%20and%20status%20eq%20'Completed'&$orderby=created_at%20asc" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Чтобы избежать пробелов ошибок URL rejected: Malformed input to a URL function
, заменяются %20
на .
Ограничения пакета
Имя ограничения | Значение ограничения |
---|---|
Максимальное количество файлов на ресурс | 500 |
Максимальный размер входного файла | 200 МБ |
Максимальное количество запросов на файл | 100,000 |
Квота пакетной службы
В таблице показан предел квоты пакетной службы. Значения квот для глобального пакета представлены с точки зрения закрепленных маркеров. При отправке файла для пакетной обработки количество маркеров, присутствующих в файле, учитывается. До тех пор, пока пакетное задание не достигнет состояния терминала, эти маркеры будут учитываться в отношении общего лимита, затраченного на маркер.
Глобальный пакет
Модель | Соглашение Enterprise | По умолчанию. | Ежемесячные подписки на основе кредитной карты | Подписки MSDN | Azure для учащихся, бесплатные пробные версии |
---|---|---|---|---|---|
gpt-4o |
5 B | 200 М | 50 М | 90 K | Н/П |
gpt-4o-mini |
15 B | 1 B | 50 М | 90 K | Н/П |
gpt-4-turbo |
300 М | 80 М | 40 М | 90 K | Н/П |
gpt-4 |
150 М | 30 М | 5 М | 100 тыс. | Н/П |
gpt-35-turbo |
10 B | 1 B | 100 М | 2 млн | 50 тыс |
B = миллиард | M = миллион | K = тысяча
Пакет зоны данных
Модель | Соглашение Enterprise | По умолчанию. | Ежемесячные подписки на основе кредитной карты | Подписки MSDN | Azure для учащихся, бесплатные пробные версии |
---|---|---|---|---|---|
gpt-4o |
500 М | 30 М | 30 М | 90 K | Н/П |
gpt-4o-mini |
1.5 B | 100 М | 50 М | 90 K | Н/П |
Пакетный объект
Свойство | Тип | Определение |
---|---|---|
id |
строка | |
object |
строка | batch |
endpoint |
строка | Конечная точка API, используемая пакетом |
errors |
объект | |
input_file_id |
строка | Идентификатор входного файла для пакета |
completion_window |
строка | Интервал времени, в течение которого должен обрабатываться пакет |
status |
строка | Текущее состояние пакета. Возможные значения: validating , failed , finalizing in_progress expired completed , . cancelled cancelling |
output_file_id |
строка | Идентификатор файла, содержащего выходные данные успешно выполненных запросов. |
error_file_id |
строка | Идентификатор файла, содержащего выходные данные запросов с ошибками. |
created_at |
integer | Метка времени при создании пакета (в эпохах UNIX). |
in_progress_at |
integer | Метка времени при запуске этого пакета (в эпохах UNIX). |
expires_at |
integer | Метка времени, когда срок действия пакета истекает (в эпохах UNIX). |
finalizing_at |
integer | Метка времени, когда этот пакет начал завершение (в эпохах UNIX). |
completed_at |
integer | Метка времени, когда этот пакет начал завершение (в эпохах UNIX). |
failed_at |
integer | Метка времени, когда этот пакет завершился сбоем (в эпохах UNIX) |
expired_at |
integer | Метка времени, когда срок действия пакета истек (в эпохах UNIX). |
cancelling_at |
integer | Метка времени при запуске cancelling этого пакета (в эпохах UNIX). |
cancelled_at |
integer | Метка времени, когда этот пакет был cancelled (в эпохах UNIX). |
request_counts |
объект | Структура объекта:total целое число Общее количество запросов в пакете. completed целое число Число запросов в пакете, успешно завершенных. failed целое число Количество запросов в пакете, завершившемся сбоем. |
metadata |
map | Набор пар "ключ-значение", которые можно подключить к пакету. Это свойство может быть полезно для хранения дополнительных сведений о пакете в структурированном формате. |
Вопросы и ответы
Можно ли использовать образы с API пакетной службы?
Эта возможность ограничена определенными многомодальными моделями. В настоящее время в пакетных запросах поддерживаются только образы GPT-4o. Изображения можно предоставлять как входные данные с помощью URL-адреса изображения или представления изображения в кодировке Base64. Образы для пакетной службы в настоящее время не поддерживаются с GPT-4 Turbo.
Можно ли использовать пакетный API с точно настроенными моделями?
В настоящее время это не поддерживается.
Можно ли использовать пакетный API для внедрения моделей?
В настоящее время это не поддерживается.
Работает ли фильтрация содержимого с глобальным развертыванием пакетной службы?
Да. Аналогично другим типам развертывания, можно создавать фильтры содержимого и связывать их с типом глобального пакетного развертывания.
Можно ли запросить дополнительную квоту?
Да, на странице квоты на портале Azure AI Foundry. Выделение квот по умолчанию можно найти в статье о квоте и ограничениях.
Что произойдет, если API не завершает мой запрос в течение 24 часов?
Мы стремимся обрабатывать эти запросы в течение 24 часов; Срок действия заданий, которые занимают больше времени, не истекают. Задание можно отменить в любое время. При отмене задания все оставшиеся трудоемки будут отменены, а все уже завершенные работы возвращаются. Вы будете взиматься за все завершенные работы.
Сколько запросов можно выполнить в очереди с помощью пакетной службы?
Однако не существует фиксированного ограничения на количество запросов, которые можно пакетировать, однако она будет зависеть от квоты закрепленного токена. Квота заложенного токена включает максимальное количество входных маркеров, которые можно заквидеть одновременно.
После завершения пакетного запроса ограничение скорости пакетной службы сбрасывается по мере очистки входных маркеров. Ограничение зависит от количества глобальных запросов в очереди. Если очередь API пакетной службы быстро обрабатывает пакеты, ограничение скорости пакетной службы сбрасывается быстрее.
Устранение неполадок
Задание успешно выполняется при status
выполнении Completed
. Успешные задания по-прежнему создают error_file_id, но они будут связаны с пустым файлом с нулевым байтами.
При сбое задания вы найдете сведения о сбое в свойстве errors
:
"value": [
{
"id": "batch_80f5ad38-e05b-49bf-b2d6-a799db8466da",
"completion_window": "24h",
"created_at": 1725419394,
"endpoint": "/chat/completions",
"input_file_id": "file-c2d9a7881c8a466285e6f76f6321a681",
"object": "batch",
"status": "failed",
"cancelled_at": null,
"cancelling_at": null,
"completed_at": 1725419955,
"error_file_id": "file-3b0f9beb-11ce-4796-bc31-d54e675f28fb",
"errors": {
"object": “list”,
"data": [
{
“code”: “empty_file”,
“message”: “The input file is empty. Please ensure that the batch contains at least one request.”
}
]
},
"expired_at": null,
"expires_at": 1725505794,
"failed_at": null,
"finalizing_at": 1725419710,
"in_progress_at": 1725419572,
"metadata": null,
"output_file_id": "file-ef12af98-dbbc-4d27-8309-2df57feed572",
"request_counts": {
"total": 10,
"completed": null,
"failed": null
},
}
Коды ошибок
Код ошибки | Определение |
---|---|
invalid_json_line |
Строка (или несколько) в входном файле не удалось проанализировать как допустимый json. Убедитесь, что нет опечаток, правильных открывающих и закрывающих квадратных скобок, а также кавычки согласно стандарту JSON и повторно отправьте запрос. |
too_many_tasks |
Число запросов во входном файле превышает максимально допустимое значение 100 000. Убедитесь, что общий объем запросов составляет менее 100 000 и повторно отправьте задание. |
url_mismatch |
Строка в входном файле имеет URL-адрес, который не соответствует остальным строкам, или URL-адрес, указанный в входном файле, не соответствует ожидаемому URL-адресу конечной точки. Убедитесь, что все URL-адреса запросов одинаковы, и что они соответствуют URL-адресу конечной точки, связанному с развертыванием Azure OpenAI. |
model_not_found |
Имя развертывания модели Azure OpenAI, указанное в свойстве model входного файла, не найдено.Убедитесь, что это имя указывает на допустимое развертывание модели Azure OpenAI. |
duplicate_custom_id |
Пользовательский идентификатор для этого запроса является дубликатом пользовательского идентификатора в другом запросе. |
empty_batch |
Проверьте входной файл, чтобы убедиться, что параметр пользовательского идентификатора уникален для каждого запроса в пакете. |
model_mismatch |
Имя развертывания модели Azure OpenAI, указанное в model свойстве этого запроса в входном файле, не соответствует остальной части файла.Убедитесь, что все запросы в пакетной точке в одном развертывании модели Службы OpenAI Azure в model свойстве запроса. |
invalid_request |
Схема входной строки недопустима или номер SKU развертывания недопустим. Убедитесь, что свойства запроса в входном файле соответствуют ожидаемым свойствам входных данных, а номер SKU развертывания Azure OpenAI предназначен globalbatch для запросов пакетного API. |
Известные проблемы
- Ресурсы, развернутые с помощью Azure CLI, не будут работать без использования глобального пакета Azure OpenAI. Это связано с проблемой, из-за которой ресурсы, развернутые с помощью этого метода, имеют поддомены конечных точек, которые не соответствуют шаблону
https://your-resource-name.openai.azure.com
. Решение этой проблемы заключается в развертывании нового ресурса Azure OpenAI с помощью одного из других распространенных методов развертывания, которые будут правильно обрабатывать настройку поддомена в процессе развертывания.