Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure OpenAI теперь поддерживает использование хранилища BLOB-объектов Azure для входных и выходных файлов пакетной службы Azure OpenAI. Используя собственное хранилище, вы не подвергаетесь ограничениям пакетной службы на количество файлов.
Поддержка регионов
- австралиявосток
- Истус
- Германия-запад-центр
- northcentralus
- Центральная Польша
- SwedenCentral
- Швейцария север
- eastus2
- Вестус
Конфигурация хранилища BLOB-объектов Azure
Предпосылки
- Учетная запись хранилища Azure Blob.
- Ресурс Azure OpenAI с моделью типа
Global-Batch
развертывания илиDataZoneBatch
развернутой. Вы можете ознакомиться с руководством по созданию ресурсов и развертыванию моделей, чтобы помочь в этом процессе.
Манажируемая идентичность
Чтобы ваш ресурс Azure OpenAI мог безопасно получить доступ к аккаунту хранилища BLOB-объектов Azure, необходимо настроить его с системным назначенным управляемым удостоверением.
Замечание
В настоящее время назначенные пользователем управляемые удостоверения не поддерживаются.
Войдите в https://portal.azure.com.
Найдите ресурс > Azure OpenAI Select Resource Management>Identity>System, назначенный> для параметра " Вкл.".
Управление доступом на основе ролей
После настройки ресурса Azure OpenAI для системно назначенного управляемого удостоверения необходимо предоставить ему доступ к учетной записи хранения Azure Blob.
Найдите https://portal.azure.com и выберите ресурс хранилища BLOB-объектов Azure.
Выберите Управление доступом (IAM)>Добавить>Добавить назначение ролей.
Найдите Storage Blob Data Contributor>Далее.
Выберите управляемое удостоверение>и выберите участников> Выберите управляемое удостоверение вашего ресурса Azure OpenAI.
Если вы предпочитаете использовать пользовательские роли для более детального доступа, необходимы следующие разрешения:
Входные данные:
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Выходные данные и папки:
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Создание контейнеров
В этом примере вы создадите два контейнера с именем batch-input
и batch-output
. Вы можете назвать их как хотите, но если вы используете другое имя, вам потребуется настроить примеры в следующих шагах.
Чтобы создать контейнер в хранилище данных>, выберите +Контейнер> и назовите ваши контейнеры.
После создания контейнеров получите URL-адрес для каждого контейнера, выбрав >настройки>свойства>. Скопируйте URL-адреса.
В этом случае у нас есть:
https://{AZURE-BLOB-STORAGE-RESOURCE-NAME}.blob.core.windows.net/batch-input
https://{AZURE-BLOB-STORAGE-RESOURCE-NAME}.blob.core.windows.net/batch-output
Создание входного файла
В этой статье мы создадим файл с именем test.jsonl
и скопируйм содержимое ниже в файл. Вам потребуется изменить и добавить имя глобального пакетного развертывания в каждую строку файла.
{"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?"}]}}
Отправка обучаемого файла
В учетной записи хранения BLOB-объектов Azure откройте созданный ранее контейнер пакетного ввода .
Выберите " Отправить " и выберите test.jsonl
файл.
Пока ваш файл jsonl
обрабатывается как часть пакетного задания, вы не можете вносить в него изменения. Если файл изменяется во время выполнения пакетного задания, задание завершится ошибкой.
Создание пакетного задания
Замечание
metadata
В настоящее время эта возможность не поддерживается.
import os
from datetime import datetime
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="2025-04-01-preview"
)
batch_response = client.batches.create(
input_file_id=None,
endpoint="/chat/completions",
completion_window="24h",
extra_body={
"input_blob": "https://{AZURE-BLOB-STORAGE-RESOURCE-NAME}.blob.core.windows.net/batch-input/test.jsonl",
"output_folder": {
"url": "https://{AZURE-BLOB-STORAGE-RESOURCE-NAME}.blob.core.windows.net/batch-output",
}
}
)
# Save batch ID for later use
batch_id = batch_response.id
print(batch_response.model_dump_json(indent=2))
Выходные данные:
{
"id": "batch_b632a805-797b-49ed-9c9c-86eb4057f2a2",
"completion_window": "24h",
"created_at": 1747516485,
"endpoint": "/chat/completions",
"input_file_id": null,
"object": "batch",
"status": "validating",
"cancelled_at": null,
"cancelling_at": null,
"completed_at": null,
"error_file_id": null,
"errors": null,
"expired_at": null,
"expires_at": 1747602881,
"failed_at": null,
"finalizing_at": null,
"in_progress_at": null,
"metadata": null,
"output_file_id": null,
"request_counts": {
"completed": 0,
"failed": 0,
"total": 0
},
"error_blob": "",
"input_blob": "https://docstest002.blob.core.windows.net/batch-input/test.jsonl",
"output_blob": ""
}
Вы можете отслеживать состояние таким же образом, как описано ранее в нашем комплексном руководстве по использованию пакета Azure OpenAI.
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}")
Выходные данные:
2025-05-17 17:16:56.950427 Batch Id: batch_b632a805-797b-49ed-9c9c-86eb4057f2a2, Status: validating
2025-05-17 17:17:57.532054 Batch Id: batch_b632a805-797b-49ed-9c9c-86eb4057f2a2, Status: validating
2025-05-17 17:18:58.156793 Batch Id: batch_b632a805-797b-49ed-9c9c-86eb4057f2a2, Status: in_progress
2025-05-17 17:19:58.739708 Batch Id: batch_b632a805-797b-49ed-9c9c-86eb4057f2a2, Status: in_progress
2025-05-17 17:20:59.398508 Batch Id: batch_b632a805-797b-49ed-9c9c-86eb4057f2a2, Status: finalizing
2025-05-17 17:22:00.242371 Batch Id: batch_b632a805-797b-49ed-9c9c-86eb4057f2a2, Status: completed
Как только status
станет completed
, вы сможете получить свой путь output_blob
:
print(batch_response.model_dump_json(indent=2))
Выходные данные:
{
"id": "batch_b632a805-797b-49ed-9c9c-86eb4057f2a2",
"completion_window": "24h",
"created_at": 1747516485,
"endpoint": "/chat/completions",
"input_file_id": null,
"object": "batch",
"status": "completed",
"cancelled_at": null,
"cancelling_at": null,
"completed_at": 1747516883,
"error_file_id": null,
"errors": null,
"expired_at": null,
"expires_at": 1747602881,
"failed_at": null,
"finalizing_at": 1747516834,
"in_progress_at": 1747516722,
"metadata": null,
"output_file_id": null,
"request_counts": {
"completed": 3,
"failed": 0,
"total": 3
},
"error_blob": "https://docstest002.blob.core.windows.net/batch-output/{GUID}/errors.jsonl",
"input_blob": "https://docstest002.blob.core.windows.net/batch-input/test.jsonl",
"output_blob": "https://docstest002.blob.core.windows.net/batch-output/{GUID}/results.jsonl"
}
После завершения пакетного задания можно скачать error_blob
и output_blob
через интерфейс Azure Blob Storage в портале Azure или запрограммировать скачивание.
Замечание
error_blob
, а также output_blob
пути всегда возвращаются в ответе, даже в тех случаях, когда соответствующий файл не создается. В этом случае не было никаких ошибок, поэтому errors.jsonl
не было создано, существует только results.jsonl
.
pip install azure-identity azure-storage-blob
Помните, что, хотя вы предоставили ресурсу Azure OpenAI программный доступ к хранилищу BLOB-объектов Azure, чтобы скачать результаты, вам может потребоваться также предоставить доступ учетной записи пользователя, выполняющей скрипт ниже. Для скачивания файла достаточно Storage Blob Data Reader
доступа.
# Import required libraries
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
# Define storage account and container information
storage_account_name = "docstest002" # replace with your storage account name
container_name = "batch-output"
# Define the blob paths to download
blob_paths = [
"{REPLACE-WITH-YOUR-GUID}/results.jsonl",
]
credential = DefaultAzureCredential()
account_url = f"https://{storage_account_name}.blob.core.windows.net"
blob_service_client = BlobServiceClient(account_url=account_url, credential=credential)
container_client = blob_service_client.get_container_client(container_name)
for blob_path in blob_paths:
blob_client = container_client.get_blob_client(blob_path)
file_name = blob_path.split("/")[-1]
print(f"Downloading {file_name}...")
with open(file_name, "wb") as file:
download_stream = blob_client.download_blob()
file.write(download_stream.readall())
print(f"Downloaded {file_name} successfully!")
См. также
Дополнительные сведения о пакетной службе Azure OpenAI см. в комплексном руководстве по пакетной службе.