Udostępnij za pomocą


Konfigurowanie usługi Azure Blob Storage dla usługi Azure OpenAI

Uwaga / Notatka

Ten dokument odnosi się do portalu Microsoft Foundry (klasycznego).

🔍 Zapoznaj się z dokumentacją rozwiązania Microsoft Foundry (nową), aby dowiedzieć się więcej o nowym portalu.

Usługa Azure OpenAI obsługuje teraz używanie usługi Azure Blob Storage dla plików wejściowych i wyjściowych usługi Azure OpenAI Batch. Korzystając z własnego przechowywania, nie podlegasz ograniczeniom dotyczącym liczby plików w partiach.

Obsługa regionów

Teraz obsługiwane we wszystkich regionach, w których są obsługiwane wdrożenia wsadowe.

Konfiguracja usługi Azure Blob Storage

Wymagania wstępne

  • Konto usługi Azure Blob Storage.
  • Zasób Azure OpenAI z wdrożonym modelem typu Global-Batch lub DataZoneBatch. Aby uzyskać pomoc dotyczącą tego procesu, zapoznaj się z przewodnikiem tworzenia zasobów i wdrażania modelu.

Tożsamość zarządzana

Aby zasób usługi Azure OpenAI bezpiecznie uzyskiwał dostęp do konta usługi Azure Blob Storage, musisz skonfigurować zasób przy użyciu przypisanej przez system tożsamości zarządzanej.

Uwaga / Notatka

Obecnie tożsamości zarządzane przypisane przez użytkownika nie są obsługiwane.

  1. Zaloguj się do https://portal.azure.com.

  2. Znajdź zasób usługi Azure OpenAI > Wybierz Zarządzanie zasobami>Tożsamości>Przypisane systemowo, ustaw status na >.

    Zrzut ekranu przedstawiający konfigurację tożsamości zarządzanej systemu.

Kontrola dostępu oparta na rolach

Po skonfigurowaniu zasobu usługi Azure OpenAI dla przypisanej przez system tożsamości zarządzanej należy przyznać mu dostęp do konta usługi Azure Blob Storage.

  1. W https://portal.azure.com obszarze znajdź i wybierz zasób usługi Azure Blob Storage.

  2. Wybierz Kontrola dostępu (IAM)>Dodaj>Dodaj przypisanie roli.

    Zrzut ekranu przedstawiający interfejs kontroli dostępu dla zasobu usługi Azure Blob Storage.

  3. Wyszukaj pozycję Współautor> danych obiektu blob usługi Storage.

  4. Wybierz Tożsamość zarządzaną>+Wybierz członków> Wybierz tożsamość zarządzaną zasobów usługi Azure OpenAI.

    Zrzut ekranu przedstawiający przypisanie roli Współautor danych usługi Azure Blob Storage.

Jeśli wolisz używać ról niestandardowych w celu uzyskania bardziej szczegółowego dostępu, wymagane są następujące uprawnienia:

Dane wejściowe:

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

Dane wyjściowe/foldery:

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

Tworzenie kontenerów

W tym przykładzie utworzysz dwa kontenery o nazwie batch-inputi batch-output. Możesz je nazwać jakkolwiek chcesz, ale jeśli użyjesz alternatywnej nazwy, musisz dostosować przykłady w poniższych krokach.

Aby utworzyć kontener w obszarze Magazyn danych>, wybierz +Container> i nadaj nazwę swoim kontenerom.

Zrzut ekranu przedstawiający kontenery danych obiektu blob usługi Storage.

Po utworzeniu kontenerów pobierz adres URL dla każdego kontenera, wybierając kontener >Ustawienia>Właściwości>. Skopiuj adresy URL.

W tym przypadku mamy:

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

Tworzenie pliku wejściowego

W tym artykule utworzymy plik o nazwie test.jsonl i skopiujemy zawartość poniżej do pliku. Musisz zmodyfikować każdy wiersz pliku, dodając do niego globalną nazwę wdrożenia wsadowego.

{"custom_id": "task-0", "method": "POST", "url": "/v1/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": "/v1/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": "/v1/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?"}]}}

Przekazywanie pliku szkoleniowego

Na koncie usługi Azure Blob Storage otwórz utworzony wcześniej kontener batch-input .

Wybierz Przekaż, a następnie wybierz plik test.jsonl.

Zrzut ekranu przedstawiający interfejs użytkownika przesyłania kontenera obiektów Blob usługi Azure Storage.

W czasie przetwarzania jsonl pliku w ramach zadania wsadowego nie można wprowadzać żadnych zmian w pliku. Jeśli plik ulegnie zmianie podczas uruchamiania zadania wsadowego, zadanie zakończy się niepowodzeniem.

Utwórz zadanie wsadowe

Uwaga / Notatka

metadata ta funkcja nie jest obecnie obsługiwana.

import os
from datetime import datetime
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  api_key=token_provider,
)

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

Wyjście:

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

Stan można monitorować w taki sam sposób, jak wcześniej, zgodnie z naszym kompleksowym przewodnikiem dotyczącym korzystania z batch w usłudze 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}")

Wyjście:

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

Gdy status jest completed, możesz pobrać swoją ścieżkę output_blob.

print(batch_response.model_dump_json(indent=2))

Wyjście:

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

Po zakończeniu zadania wsadowego możesz pobrać error_blob i output_blob za pośrednictwem interfejsu usługi Azure Blob Storage w portalu Azure lub pobrać je programowo:

Uwaga / Notatka

error_blobścieżki i output_blob są zawsze zwracane w odpowiedzi nawet w przypadkach, gdy odpowiedni plik nie jest tworzony. W tym przypadku nie było żadnych błędów, więc errors.jsonl nie zostały utworzone, istnieje tylko results.jsonl .

pip install azure-identity azure-storage-blob

Należy pamiętać, że chociaż udzieliłeś zasobowi Azure OpenAI dostępu programowego do usługi Azure Blob Storage, aby pobrać wyniki, może być konieczne także nadanie dostępu kontu użytkownika, które wykonuje poniższy skrypt. Do pobrania pliku Storage Blob Data Reader wystarczy dostęp.

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

Zobacz także

Aby uzyskać więcej informacji na temat usługi Azure OpenAI Batch, zapoznaj się z kompleksowym przewodnikiem dotyczącym przetwarzania wsadowego.