Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Remarque
Ce document fait référence au portail Microsoft Foundry (classique).
🔍 Consultez la documentation Microsoft Foundry (nouvelle) pour en savoir plus sur le nouveau portail.
Azure OpenAI prend désormais en charge l’utilisation du Stockage Blob Azure pour les fichiers d’entrée et de sortie Azure OpenAI Batch. En utilisant votre propre stockage, vous n’êtes pas soumis aux restrictions de lot sur le nombre de fichiers.
Prise en charge des régions
Désormais disponible dans toutes les régions où les déploiements par lots sont soutenus.
Configuration du Stockage Blob Azure
Conditions préalables
- Un compte de stockage Blob Azure.
- Une ressource Azure OpenAI avec un modèle du type de déploiement déployé
Global-BatchouDataZoneBatch. Pour obtenir de l’aide sur ce processus, reportez-vous au guide de création de ressources et de déploiement de modèles.
Identité managée
Pour que votre ressource Azure OpenAI accède en toute sécurité à votre compte Stockage Blob Azure, vous devez configurer votre ressource avec une identité managée affectée par le système.
Remarque
Actuellement, les identités gérées attribuées par l'utilisateur ne sont pas prises en charge.
Connectez-vous à https://portal.azure.com.
Trouvez votre ressource Azure OpenAI > Sélectionnez Resource Management>Identity>System affecté>, et définissez le statut sur Activé.
Contrôle d’accès basé sur les rôles
Une fois que votre ressource Azure OpenAI a été configurée pour l’identité managée affectée par le système, vous devez lui accorder l’accès à votre compte Stockage Blob Azure.
À partir de https://portal.azure.com, recherchez et sélectionnez votre ressource Stockage Blob Azure.
Sélectionnez Contrôle d’accès (IAM)>>.
Recherchez pour Collaborateur des données de stockage Blob>Suivant.
Sélectionnez Identité managée>+Sélectionner les membres> Sélectionnez l’identité managée de vos ressources Azure OpenAI.
Si vous préférez utiliser des rôles personnalisés pour un accès plus granulaire, les autorisations suivantes sont requises :
Données d’entrée :
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Données/dossiers de sortie :
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/readMicrosoft.Storage/storageAccounts/blobServices/containers/blobs/write
Créer des conteneurs
Pour cet exemple, vous allez créer deux conteneurs nommés batch-input, et batch-output. Vous pouvez nommer ces éléments de votre choix, mais si vous utilisez un autre nom, vous devez ajuster les exemples dans les étapes suivantes.
Pour créer un conteneur sous Stockage de données> sélectionnez +Conteneur> donnez un nom à vos conteneurs.
Une fois que vos conteneurs sont créés, récupérez l’URL de chaque conteneur en sélectionnant les>des paramètres> du conteneur>, copiez les URL.
Dans ce cas, nous avons :
https://{AZURE-BLOB-STORAGE-RESOURCE-NAME}.blob.core.windows.net/batch-inputhttps://{AZURE-BLOB-STORAGE-RESOURCE-NAME}.blob.core.windows.net/batch-output
Créer un fichier d'entrée
Pour cet article, nous allons créer un fichier nommé test.jsonl et copier le contenu ci-dessous dans le fichier. Vous devrez modifier et ajouter le nom de votre déploiement de type Traitement par lots global à chaque ligne du fichier.
{"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?"}]}}
Charger le fichier d’entraînement
À partir de votre compte Stockage Blob Azure, ouvrez votre conteneur d’entrée par lots que vous avez créé précédemment.
Sélectionnez Charger et sélectionner votre test.jsonl fichier.
Au cours du traitement de votre jsonl fichier dans le cadre du travail de traitement par lots, vous ne pouvez apporter aucune modification au fichier. Si un fichier change pendant l’exécution du travail par lots, le travail échoue.
Créer un travail de traitement par lots
Remarque
metadata n’est actuellement pas pris en charge avec cette fonctionnalité.
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))
Output:
{
"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": ""
}
Vous pouvez surveiller l’état de la même façon que vous le feriez précédemment comme indiqué dans notre guide complet sur l’utilisation d’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}")
Output:
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
Une fois que status devient completed vous pouvez récupérer votre chemin d’accès output_blob :
print(batch_response.model_dump_json(indent=2))
Output:
{
"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"
}
Une fois votre tâche de traitement par lots terminée, vous pouvez télécharger error_blob et output_blob via l’interface Stockage Blob Azure dans le portail Azure, ou télécharger par programmation.
Remarque
error_blob, et output_blob les chemins sont toujours retournés dans la réponse même dans les cas où un fichier correspondant n’est pas créé. Dans ce cas, aucune erreur ne s’est produite, donc errors.jsonl n’a pas été créé ; seul results.jsonl existe.
pip install azure-identity azure-storage-blob
N’oubliez pas que pendant que vous avez accordé l’accès programmatique à la ressource Azure OpenAI à votre stockage Blob Azure, pour télécharger les résultats, vous devrez peut-être également donner au compte d’utilisateur qui exécute le script ci-dessous l’accès. Pour télécharger le fichier, l’accès Storage Blob Data Reader est suffisant.
# 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!")
Voir aussi
Pour plus d’informations sur Azure OpenAI Batch, consultez le guide complet du traitement par lots.