Dela via


Konfigurera Azure Blob Storage för Azure OpenAI

Azure OpenAI stöder nu användning av Azure Blob Storage för Azure OpenAI Batch-indata- och utdatafiler. Genom att använda din egen lagring omfattas du inte av batchbegränsningarna för antalet filer.

Regionstöd

Stöds nu i alla regioner där batchdistributioner stöds.

Azure Blob Storage-konfiguration

Förutsättningar

Hanterad identitet

För att Azure OpenAI-resursen ska få säker åtkomst till ditt Azure Blob Storage-konto behöver du konfigurera resursen med en systemtilldelad hanterad identitet.

Anmärkning

Användartilldelade hanterade identiteter stöds för närvarande inte.

  1. Logga in på https://portal.azure.com.

  2. Leta reda på din Azure OpenAI-resurs > Välj Resurshantering>Identitet>Systemtilldelad> ange status till .

    Skärmbild som visar systemhanterad identitetskonfiguration.

Rollbaserad åtkomstkontroll

När din Azure OpenAI-resurs har konfigurerats för systemtilldelad hanterad identitet måste du ge den åtkomst till ditt Azure Blob Storage-konto.

  1. Leta https://portal.azure.com upp och välj din Azure Blob Storage-resurs.

  2. Välj Ätkomstkontroll (IAM)>Lägg till>Lägg till rolltilldelning.

    Skärmbild som visar åtkomstkontrollgränssnittet för en Azure Blob Storage-resurs.

  3. Sök efter Storage Blob Data-deltagare>Nästa.

  4. Välj Hanterad identitet>+Välj medlemmar> Välj dina Azure OpenAI-resursers hanterade identitet.

    Skärmbild som visar rolltilldelning för Storage Blob Data Contributor.

Om du föredrar att använda anpassade roller för mer detaljerad åtkomst krävs följande behörigheter:

Indata:

  • Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read

Utdata/mappar:

  • Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
  • Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write

Skapa behållare

I det här exemplet skapar du två containrar med namnet batch-input, och batch-output. Du kan namnge dessa vad du vill, men om du använder ett alternativt namn måste du justera exemplen i följande steg.

Om du vill skapa en container under Datalagring> väljer du +ContainerNamn> dina containrar.

Skärmbild som visar Lagringsblobdatacontainrar.

När dina containrar har skapats hämtar du URL:en för varje container genom att välja> för >> Kopiera URL:erna.

I det här fallet har vi:

  • https://{AZURE-BLOB-STORAGE-RESOURCE-NAME}.blob.core.windows.net/batch-input
  • https://{AZURE-BLOB-STORAGE-RESOURCE-NAME}.blob.core.windows.net/batch-output

Skapa indatafil

I den här artikeln skapar vi en fil med namnet test.jsonl och kopierar innehållet nedan till filen. Du måste ändra och lägga till ditt globala batchdistributionsnamn till varje rad i filen.

{"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?"}]}}

Ladda upp träningsfil

Öppna från ditt Azure Blob Storage-konto din batch-indatakontainer som du skapade tidigare.

Välj Ladda upp och välj din test.jsonl fil.

Skärmbild som visar hur Azure Storage Blob-container överför UX.

Under tiden som vi bearbetar filen jsonl som en del av batchjobbet kan du inte göra några ändringar i filen. Om en fil ändras när batchjobbet körs misslyckas jobbet.

Skapa batchjobb

Anmärkning

metadata stöds för närvarande inte med den här funktionen.

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))

Resultat:

{
  "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": ""
}

Du kan övervaka statusen på samma sätt som du tidigare skulle göra som beskrivs i vår omfattande guide om hur du använder Azure OpenAI-batch.

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}")

Resultat:

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

När status är completed kan du hämta din output_blob sökväg:

print(batch_response.model_dump_json(indent=2))

Resultat:

{
  "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"
}

När batchjobbet är klart kan du ladda ned error_blob och output_blob via Azure Blob Storage-gränssnittet i Azure-portalen eller ladda ned programmatiskt:

Anmärkning

error_blob, och output_blob sökvägar returneras alltid i svaret även i fall där en motsvarande fil inte skapas. I det här fallet fanns det inga fel, så errors.jsonl skapades inte, det finns bara results.jsonl.

pip install azure-identity azure-storage-blob

Tänk på att även om du har beviljat Azure OpenAI-resursen programmatisk åtkomst till Azure Blob Storage, kan du även behöva ge det användarkonto som kör skriptet nedan åtkomst för att ladda ned resultaten. För att ladda ned filen Storage Blob Data Reader räcker det med åtkomst.

# 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!")

Se även

Mer information om Azure OpenAI Batch finns i den omfattande batchguiden.