Delen via


Aan de slag met Azure OpenAI-batchimplementaties

De Azure OpenAI Batch-API is ontworpen om grootschalige en grote verwerkingstaken efficiënt te verwerken. Asynchrone groepen aanvragen verwerken met een afzonderlijk quotum, met 24-uurs doeltijd, tegen 50% lagere kosten dan de algemene standaard. Met batchverwerking, in plaats van één aanvraag tegelijk te verzenden, verzendt u een groot aantal aanvragen in één bestand. Globale batchaanvragen hebben een afzonderlijk ge enqueued tokenquotum om onderbrekingen van uw onlineworkloads te voorkomen.

Enkele belangrijke gebruiksvoorbeelden:

  • Grootschalige gegevensverwerking: analyseer snel uitgebreide gegevenssets parallel.

  • Inhoudsgeneratie: Maak grote hoeveelheden tekst, zoals productbeschrijvingen of artikelen.

  • Documentbeoordeling en samenvatting: Automatiseer de beoordeling en samenvatting van lange documenten.

  • Automatisering van klantondersteuning: meerdere query's tegelijk verwerken voor snellere antwoorden.

  • Gegevensextractie en analyse: gegevens extraheren en analyseren uit grote hoeveelheden ongestructureerde gegevens.

  • NLP-taken (Natural Language Processing): voer taken uit zoals sentimentanalyse of vertaling op grote gegevenssets.

  • Marketing en personalisatie: genereer gepersonaliseerde inhoud en aanbevelingen op schaal.

Belangrijk

We streven ernaar om batchaanvragen binnen 24 uur te verwerken; de taken die langer duren, verlopen niet. U kunt de taak op elk gewenst moment annuleren . Wanneer u de taak annuleert, wordt alle resterende hoeveelheid werk geannuleerd en worden alle reeds voltooide werkzaamheden geretourneerd. Er worden kosten in rekening gebracht voor voltooid werk.

Gegevens die in rust zijn opgeslagen, blijven in de aangewezen Azure-geografie, terwijl gegevens kunnen worden verwerkt voor deductie op elke Azure OpenAI-locatie. Meer informatie over gegevenslocatie. 

Ondersteuning voor Batch

Wereldwijde beschikbaarheid van batchmodellen

Regio 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
Polencentral
southafricanorth
US - zuid-centraal
southindia
swedencentral
switzerlandnorth
uksouth
westeurope
westus
westus3

De volgende modellen ondersteunen globale batch:

Modelleren Versie Invoerindeling
gpt-4o 2024-08-06 text + image
gpt-4o-mini 2024-07-18 text + image
gpt-4o 2024-05-13 text + image
gpt-4 turbo-2024-04-09 sms verzenden
gpt-4 0613 sms verzenden
gpt-35-turbo 0125 sms verzenden
gpt-35-turbo 1106 sms verzenden
gpt-35-turbo 0613 sms verzenden

Raadpleeg de pagina modellen voor de meest recente informatie over regio's/modellen waarin globale batch momenteel wordt ondersteund.

API-ondersteuning

API-versie
Nieuwste GA API-release: 2024-10-21
Nieuwste preview-API-release: 2024-10-01-preview

Ondersteuning voor het eerst toegevoegd in: 2024-07-01-preview

Functieondersteuning

Het volgende wordt momenteel niet ondersteund:

  • Integratie met de Assistants-API.
  • Integratie met Azure OpenAI op uw gegevensfunctie.

Notitie

Gestructureerde uitvoer wordt nu ondersteund met Global Batch.

Batch-implementatie

Notitie

In de Azure AI Foundry-portal worden de batchimplementatietypen weergegeven als Global-Batch en Data Zone Batch. Zie onze handleiding voor implementatietypen voor Azure OpenAI voor meer informatie over azure OpenAI-implementatietypen.

Schermopname van het dialoogvenster voor modelimplementatie in de Azure AI Foundry-portal met het implementatietype Global-Batch gemarkeerd.

Tip

We raden u aan dynamisch quotum in te schakelen voor alle globale batchmodelimplementaties om taakfouten te voorkomen vanwege onvoldoende ge enqueued tokenquotum. Met dynamisch quotum kan uw implementatie opportunistisch profiteren van meer quota wanneer er extra capaciteit beschikbaar is. Wanneer dynamisch quotum is ingesteld op uit, kan uw implementatie alleen aanvragen verwerken tot de limiet van het enqueued-token dat is gedefinieerd toen u de implementatie maakte.

Vereisten

  • Een Azure-abonnement: maak er gratis een.
  • Een Azure OpenAI-resource met een model van het geïmplementeerde implementatietype Global-Batch . Raadpleeg de handleiding voor het maken van resources en modelimplementatie voor hulp bij dit proces.

Uw batchbestand voorbereiden

Net als bij het afstemmen maakt globale batch gebruik van bestanden in JSON-regels (.jsonl)-indeling. Hieronder ziet u enkele voorbeeldbestanden met verschillende typen ondersteunde inhoud:

Invoerindeling

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

Dit custom_id is vereist om te bepalen welke afzonderlijke batchaanvraag overeenkomt met een bepaald antwoord. Antwoorden worden niet in dezelfde volgorde geretourneerd als de volgorde die is gedefinieerd in het .jsonl batchbestand.

model kenmerk moet worden ingesteld op overeenstemming met de naam van de Global Batch-implementatie die u wilt instellen voor deductiereacties.

Belangrijk

Het model kenmerk moet worden ingesteld op overeenstemming met de naam van de Global Batch-implementatie die u wilt instellen voor deductiereacties. Dezelfde naam voor de implementatie van het Globale Batch-model moet aanwezig zijn op elke regel van het batchbestand. Als u een andere implementatie wilt toepassen, moet u dit doen in een afzonderlijk batchbestand/-taak.

Voor de beste prestaties raden we u aan om grote bestanden voor batchverwerking in te dienen in plaats van een groot aantal kleine bestanden met slechts een paar regels in elk bestand.

Invoerbestand maken

Voor dit artikel maken we een bestand met de naam test.jsonl en kopiëren we de inhoud van het standaardinvoercodeblok hierboven naar het bestand. U moet de naam van de globale batchimplementatie wijzigen en toevoegen aan elke regel van het bestand.

Batchbestand uploaden

Zodra het invoerbestand is voorbereid, moet u eerst het bestand uploaden om vervolgens een batchtaak te kunnen starten. Het uploaden van bestanden kan zowel programmatisch als via de Studio worden uitgevoerd.

  1. Meld u aan bij de Azure AI Foundry-portal.

  2. Selecteer de Azure OpenAI-resource waar u een wereldwijde batchmodelimplementatie beschikbaar hebt.

  3. Selecteer Batch-taken>+ Batch-taken maken.

    Schermopname van de ervaring voor het maken van batchtaken in de Azure AI Foundry-portal.

  4. Selecteer bestand uploaden in de vervolgkeuzelijst onder Batch-gegevens>uploadbestanden> en geef het pad op voor het test.jsonl bestand dat u in de vorige stap> Hebt gemaakt.

    Schermopname van de ervaring van het uploaden van bestanden.

Batchtaak maken

Selecteer Maken om uw batchtaak te starten.

Schermopname van het maken van een batchtaak in de Azure AI Foundry-portal.

Voortgang van batchtaak bijhouden

Zodra uw taak is gemaakt, kunt u de voortgang van de taak controleren door de taak-id te selecteren voor de laatst gemaakte taak. Standaard gaat u naar de statuspagina voor uw laatst gemaakte batchtaak.

Schermopname van de batchtaak-id voor een taak die momenteel wordt gevalideerd.

U kunt de taakstatus voor uw taak bijhouden in het rechterdeelvenster:

Schermopname van de status van de batchtaak in de Azure AI Foundry-portal.

Uitvoerbestand van batchtaak ophalen

Zodra uw taak een terminalstatus heeft voltooid of bereikt, wordt er een foutbestand en een uitvoerbestand gegenereerd dat kan worden gedownload om te controleren door de betreffende knop te selecteren met het pijl-omlaagpictogram.

Schermopname van de batchtaakuitvoer en foutbestanden die beschikbaar zijn om te downloaden.

Batch annuleren

Hiermee wordt een batch in uitvoering geannuleerd. De batch heeft een status cancelling van maximaal 10 minuten, voordat deze wordt gewijzigd cancelledin , waar de batch gedeeltelijke resultaten (indien van toepassing) beschikbaar is in het uitvoerbestand.

Schermopname van de knop Voor het annuleren van batchtaken in de Azure AI Foundry-portal.

Vereisten

  • Een Azure-abonnement: maak er gratis een.
  • Python 3.8 of nieuwere versie
  • De volgende Python-bibliotheek: openai
  • Jupyter Notebooks
  • Een Azure OpenAI-resource met een model van het geïmplementeerde implementatietype Global-Batch . Raadpleeg de handleiding voor het maken van resources en modelimplementatie voor hulp bij dit proces.

De stappen in dit artikel zijn bedoeld om sequentieel uit te voeren in Jupyter Notebooks. Daarom instantiëren we de Azure OpenAI-client slechts één keer aan het begin van de voorbeelden. Als u een stap buiten de volgorde wilt uitvoeren, moet u vaak een Azure OpenAI-client instellen als onderdeel van die aanroep.

Zelfs als u de OpenAI Python-bibliotheek al hebt geïnstalleerd, moet u mogelijk uw installatie upgraden naar de nieuwste versie:

!pip install openai --upgrade

Uw batchbestand voorbereiden

Net als bij het afstemmen maakt globale batch gebruik van bestanden in JSON-regels (.jsonl)-indeling. Hieronder ziet u enkele voorbeeldbestanden met verschillende typen ondersteunde inhoud:

Invoerindeling

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

Dit custom_id is vereist om te bepalen welke afzonderlijke batchaanvraag overeenkomt met een bepaald antwoord. Antwoorden worden niet in dezelfde volgorde geretourneerd als de volgorde die is gedefinieerd in het .jsonl batchbestand.

model kenmerk moet worden ingesteld op overeenstemming met de naam van de Global Batch-implementatie die u wilt instellen voor deductiereacties.

Belangrijk

Het model kenmerk moet worden ingesteld op overeenstemming met de naam van de Global Batch-implementatie die u wilt instellen voor deductiereacties. Dezelfde naam voor de implementatie van het Globale Batch-model moet aanwezig zijn op elke regel van het batchbestand. Als u een andere implementatie wilt toepassen, moet u dit doen in een afzonderlijk batchbestand/-taak.

Voor de beste prestaties raden we u aan om grote bestanden voor batchverwerking in te dienen in plaats van een groot aantal kleine bestanden met slechts een paar regels in elk bestand.

Invoerbestand maken

Voor dit artikel maken we een bestand met de naam test.jsonl en kopiëren we de inhoud van het standaardinvoercodeblok hierboven naar het bestand. U moet de naam van de globale batchimplementatie wijzigen en toevoegen aan elke regel van het bestand. Sla dit bestand op in dezelfde map die u uitvoert als uw Jupyter Notebook.

Batchbestand uploaden

Zodra het invoerbestand is voorbereid, moet u eerst het bestand uploaden om vervolgens een batchtaak te kunnen starten. Het uploaden van bestanden kan zowel programmatisch als via de Studio worden uitgevoerd. In dit voorbeeld worden omgevingsvariabelen gebruikt in plaats van de sleutel- en eindpuntwaarden. Als u niet bekend bent met het gebruik van omgevingsvariabelen met Python, raadpleegt u een van onze quickstarts waarin het proces voor het instellen van de omgevingsvariabelen stapsgewijs wordt uitgelegd.

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

Uitvoer:

{
  "id": "file-9f3a81d899b4442f98b640e4bc3535dd",
  "bytes": 815,
  "created_at": 1722476551,
  "filename": "test.jsonl",
  "object": "file",
  "purpose": "batch",
  "status": null,
  "status_details": null
}

Batchtaak maken

Zodra het bestand is geüpload, kunt u het bestand indienen voor batchverwerking.

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

Notitie

Momenteel moet het voltooiingsvenster worden ingesteld op 24 uur. Als u een andere waarde dan 24 uur instelt, mislukt uw taak. Taken die langer dan 24 uur duren, worden nog steeds uitgevoerd totdat ze zijn geannuleerd.

Uitvoer:

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

Voortgang van batchtaak bijhouden

Zodra u een batchtaak hebt gemaakt, kunt u de voortgang ervan controleren in studio of programmatisch. Bij het controleren van de voortgang van batchtaken wordt u aangeraden ten minste 60 seconden te wachten tussen elke statusoproep.

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

Uitvoer:

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

De volgende statuswaarden zijn mogelijk:

-Status Beschrijving
validating Het invoerbestand wordt gevalideerd voordat de batchverwerking kan worden gestart.
failed Het invoerbestand heeft het validatieproces mislukt.
in_progress Het invoerbestand is gevalideerd en de batch wordt momenteel uitgevoerd.
finalizing De batch is voltooid en de resultaten worden voorbereid.
completed De batch is voltooid en de resultaten zijn gereed.
expired De batch kon niet worden voltooid binnen het tijdvenster van 24 uur.
cancelling De batch wordt uitgevoerd cancelled (dit kan tot 10 minuten duren.)
cancelled de partij was cancelled.

Als u de details van de taakstatus wilt bekijken, kunt u het volgende uitvoeren:

print(batch_response.model_dump_json(indent=2))

Uitvoer:

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

Let op: er is zowel error_file_id een apart output_file_id. Gebruik de functie error_file_id om u te helpen bij het opsporen van fouten die zich voordoen met uw batchtaak.

Uitvoerbestand van batchtaak ophalen

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)

Uitvoer:

Voor de beknoptheid zijn we slechts één antwoord van de voltooiing van de chat in de uitvoer inbegrepen. Als u de stappen in dit artikel volgt, moet u drie antwoorden hebben die vergelijkbaar zijn met de onderstaande:

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

Aanvullende batchopdrachten

Batch annuleren

Hiermee wordt een batch in uitvoering geannuleerd. De batch heeft een status cancelling van maximaal 10 minuten, voordat deze wordt gewijzigd cancelledin , waar de batch gedeeltelijke resultaten (indien van toepassing) beschikbaar is in het uitvoerbestand.

client.batches.cancel("batch_abc123") # set to your batch_id for the job you want to cancel

Batch vermelden

Batchtaken weergeven voor een bepaalde Azure OpenAI-resource.

client.batches.list()

Lijstmethoden in de Python-bibliotheek worden gepagineerd.

Alle taken weergeven:

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)

Batch weergeven (preview)

Gebruik de REST API om alle batchtaken weer te geven met extra sorteer-/filteropties.

In de onderstaande voorbeelden bieden we de generate_time_filter functie om het filter gemakkelijker te maken. Als u deze functie niet wilt gebruiken, ziet de indeling van de filtertekenreeks er als volgt created_at gt 1728860560 and status eq 'Completed'uit.

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)  

Uitvoer:

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

Vereisten

  • Een Azure-abonnement: maak er gratis een.
  • Een Azure OpenAI-resource met een model van het geïmplementeerde implementatietype Global-Batch . Raadpleeg de handleiding voor het maken van resources en modelimplementatie voor hulp bij dit proces.

Uw batchbestand voorbereiden

Net als bij het afstemmen maakt globale batch gebruik van bestanden in JSON-regels (.jsonl)-indeling. Hieronder ziet u enkele voorbeeldbestanden met verschillende typen ondersteunde inhoud:

Invoerindeling

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

Dit custom_id is vereist om te bepalen welke afzonderlijke batchaanvraag overeenkomt met een bepaald antwoord. Antwoorden worden niet in dezelfde volgorde geretourneerd als de volgorde die is gedefinieerd in het .jsonl batchbestand.

model kenmerk moet worden ingesteld op overeenstemming met de naam van de Global Batch-implementatie die u wilt instellen voor deductiereacties.

Belangrijk

Het model kenmerk moet worden ingesteld op overeenstemming met de naam van de Global Batch-implementatie die u wilt instellen voor deductiereacties. Dezelfde naam voor de implementatie van het Globale Batch-model moet aanwezig zijn op elke regel van het batchbestand. Als u een andere implementatie wilt toepassen, moet u dit doen in een afzonderlijk batchbestand/-taak.

Voor de beste prestaties raden we u aan om grote bestanden voor batchverwerking in te dienen in plaats van een groot aantal kleine bestanden met slechts een paar regels in elk bestand.

Invoerbestand maken

Voor dit artikel maken we een bestand met de naam test.jsonl en kopiëren we de inhoud van het standaardinvoercodeblok hierboven naar het bestand. U moet de naam van de globale batchimplementatie wijzigen en toevoegen aan elke regel van het bestand.

Batchbestand uploaden

Zodra het invoerbestand is voorbereid, moet u eerst het bestand uploaden om vervolgens een batchtaak te kunnen starten. Het uploaden van bestanden kan zowel programmatisch als via de Studio worden uitgevoerd. In dit voorbeeld worden omgevingsvariabelen gebruikt in plaats van de sleutel- en eindpuntwaarden. Als u niet bekend bent met het gebruik van omgevingsvariabelen met Python, raadpleegt u een van onze quickstarts waarin het proces voor het instellen van de omgevingsvariabelen stapsgewijs wordt uitgelegd.

Belangrijk

Als u een API-sleutel gebruikt, slaat u deze veilig op ergens anders op, zoals in Azure Key Vault. Neem de API-sleutel niet rechtstreeks in uw code op en plaats deze nooit openbaar.

Zie Aanvragen verifiëren bij Azure AI-services voor meer informatie over beveiliging van AI-services.

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"

In de bovenstaande code wordt uitgegaan van een bepaald bestandspad voor uw test.jsonl-bestand. Pas dit bestandspad zo nodig aan voor uw lokale systeem.

Uitvoer:

{
  "status": "pending",
  "bytes": 686,
  "purpose": "batch",
  "filename": "test.jsonl",
  "id": "file-21006e70789246658b86a1fc205899a4",
  "created_at": 1721408291,
  "object": "file"
}

Uploadstatus van bestand bijhouden

Afhankelijk van de grootte van het uploadbestand kan het enige tijd duren voordat het volledig is geüpload en verwerkt. Ga als volgende te werk om de uploadstatus van uw bestand te controleren:

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files/{file-id}?api-version=2024-10-21 \
  -H "api-key: $AZURE_OPENAI_API_KEY"

Uitvoer:

{
  "status": "processed",
  "bytes": 686,
  "purpose": "batch",
  "filename": "test.jsonl",
  "id": "file-21006e70789246658b86a1fc205899a4",
  "created_at": 1721408291,
  "object": "file"
}

Batchtaak maken

Zodra het bestand is geüpload, kunt u het bestand indienen voor batchverwerking.

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

Notitie

Momenteel moet het voltooiingsvenster worden ingesteld op 24 uur. Als u een andere waarde dan 24 uur instelt, mislukt uw taak. Taken die langer dan 24 uur duren, worden nog steeds uitgevoerd totdat ze zijn geannuleerd.

Uitvoer:

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

Voortgang van batchtaak bijhouden

Zodra u een batchtaak hebt gemaakt, kunt u de voortgang ervan controleren in studio of programmatisch. Bij het controleren van de voortgang van batchtaken wordt u aangeraden ten minste 60 seconden te wachten tussen elke statusoproep.

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches/{batch_id}?api-version=2024-10-21 \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Uitvoer:

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

De volgende statuswaarden zijn mogelijk:

-Status Beschrijving
validating Het invoerbestand wordt gevalideerd voordat de batchverwerking kan worden gestart.
failed Het invoerbestand heeft het validatieproces mislukt.
in_progress Het invoerbestand is gevalideerd en de batch wordt momenteel uitgevoerd.
finalizing De batch is voltooid en de resultaten worden voorbereid.
completed De batch is voltooid en de resultaten zijn gereed.
expired De batch kon niet worden voltooid binnen het tijdvenster van 24 uur.
cancelling De batch wordt uitgevoerd cancelled (dit kan tot 10 minuten duren.)
cancelled de partij was cancelled.

Uitvoerbestand van batchtaak ophalen

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

Aanvullende batchopdrachten

Batch annuleren

Hiermee wordt een batch in uitvoering geannuleerd. De batch heeft een status cancelling van maximaal 10 minuten, voordat deze wordt gewijzigd cancelledin , waar de batch gedeeltelijke resultaten (indien van toepassing) beschikbaar is in het uitvoerbestand.

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" 

Batch vermelden

Maak een lijst van bestaande batchtaken voor een bepaalde Azure OpenAI-resource.

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches?api-version=2024-10-21 \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

De lijst-API-aanroep wordt gepagineerd. Het antwoord bevat een Booleaanse waarde has_more die aangeeft wanneer er meer resultaten zijn om door te lopen.

Batch weergeven (preview)

Gebruik de REST API om alle batchtaken weer te geven met extra sorteer-/filteropties.

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"

Om te voorkomen dat de foutruimten URL rejected: Malformed input to a URL function worden vervangen door %20.

Batchlimieten

Naam van limiet Limietwaarde
Maximum aantal bestanden per resource 500
Maximale grootte van invoerbestand 200 MB
Maximum aantal aanvragen per bestand 100.000

Batchquotum

In de tabel wordt de limiet voor batchquota weergegeven. Quotumwaarden voor globale batch worden weergegeven in termen van enqueued tokens. Wanneer u een bestand verzendt voor batchverwerking, wordt het aantal tokens in het bestand geteld. Totdat de batchtaak een terminalstatus heeft bereikt, worden deze tokens meegeteld voor de totale limiet voor het enquêtetoken.

Globale batch

Modelleren Enterprise Agreement Standaardinstelling Maandelijkse abonnementen op basis van creditcards MSDN-abonnementen Azure for Students, gratis proefversies
gpt-4o 5 B 200 M 50 M 90 K N.v.t.
gpt-4o-mini 15 B 1 B 50 M 90 K N.v.t.
gpt-4-turbo 300 M 80 M 40 M 90 K N.v.t.
gpt-4 150 M 30 M 5 M 100k N.v.t.
gpt-35-turbo 10 B 1 B 100 M 2 M 50 K

B = miljard | M = miljoen | K = duizend

Gegevenszonebatch

Modelleren Enterprise Agreement Standaardinstelling Maandelijkse abonnementen op basis van creditcards MSDN-abonnementen Azure for Students, gratis proefversies
gpt-4o 500 M 30 M 30 M 90 K N.v.t.
gpt-4o-mini 1,5 B 100 M 50 M 90 K N.v.t.

Batch-object

Eigenschap Type Definitie
id tekenreeks
object tekenreeks batch
endpoint tekenreeks Het API-eindpunt dat wordt gebruikt door de batch
errors object
input_file_id tekenreeks De id van het invoerbestand voor de batch
completion_window tekenreeks Het tijdsbestek waarin de batch moet worden verwerkt
status tekenreeks De huidige status van de batch. Mogelijke waarden: validating, failed, in_progress, , finalizing, completed, expired, cancelling. cancelled
output_file_id tekenreeks De id van het bestand met de uitvoer van geslaagde aanvragen.
error_file_id tekenreeks De id van het bestand met de uitvoer van aanvragen met fouten.
created_at geheel getal Een tijdstempel toen deze batch werd gemaakt (in unix-epochs).
in_progress_at geheel getal Een tijdstempel waarop deze batch is begonnen met de voortgang (in unix-epochs).
expires_at geheel getal Een tijdstempel wanneer deze batch verloopt (in unix-epochs).
finalizing_at geheel getal Een tijdstempel wanneer deze batch is begonnen met voltooien (in unix-epochs).
completed_at geheel getal Een tijdstempel wanneer deze batch is begonnen met voltooien (in unix-epochs).
failed_at geheel getal Een tijdstempel wanneer deze batch is mislukt (in unix-epochs)
expired_at geheel getal Een tijdstempel wanneer deze batch is verlopen (in unix-epochs).
cancelling_at geheel getal Een tijdstempel wanneer deze batch is gestart cancelling (in unix-epochs).
cancelled_at geheel getal Een tijdstempel toen deze batch (in unix-epochs) was cancelled .
request_counts object Objectstructuur:

totalgeheel getal
Het totale aantal aanvragen in de batch.
completed geheel getal
Het aantal aanvragen in de batch dat is voltooid.
failedgeheel getal
Het aantal aanvragen in de batch dat is mislukt.
metadata map Een set sleutel-waardeparen die aan de batch kunnen worden gekoppeld. Deze eigenschap kan handig zijn voor het opslaan van aanvullende informatie over de batch in een gestructureerde indeling.

Veelgestelde vragen

Kunnen afbeeldingen worden gebruikt met de batch-API?

Deze mogelijkheid is beperkt tot bepaalde multimodale modellen. Momenteel ondersteunen alleen GPT-4o-installatiekopieën als onderdeel van batchaanvragen. Afbeeldingen kunnen worden opgegeven als invoer via de afbeeldings-URL of een base64-gecodeerde weergave van de afbeelding. Installatiekopieën voor batch worden momenteel niet ondersteund met GPT-4 Turbo.

Kan ik de batch-API gebruiken met nauwkeurig afgestemde modellen?

Dit wordt momenteel niet ondersteund.

Kan ik de batch-API gebruiken voor het insluiten van modellen?

Dit wordt momenteel niet ondersteund.

Werkt inhoudsfiltering met global Batch-implementatie?

Ja. Net als bij andere implementatietypen kunt u inhoudsfilters maken en deze koppelen aan het implementatietype Global Batch.

Kan ik extra quotum aanvragen?

Ja, vanaf de quotapagina in de Azure AI Foundry-portal. Standaardquotumtoewijzing vindt u in het artikel quotum en limieten.

Wat gebeurt er als de API mijn aanvraag niet binnen het tijdsbestek van 24 uur voltooit?

We streven ernaar om deze aanvragen binnen 24 uur te verwerken; De taken die langer duren, verlopen niet. U kunt de taak op elk gewenst moment annuleren. Wanneer u de taak annuleert, wordt alle resterende hoeveelheid werk geannuleerd en worden alle reeds voltooide werkzaamheden geretourneerd. Er worden kosten in rekening gebracht voor voltooid werk.

Hoeveel aanvragen kan ik in de wachtrij plaatsen met behulp van batch?

Er is geen vaste limiet voor het aantal aanvragen dat u kunt batcheren, maar dit is afhankelijk van het quotum voor het enquêtetoken. Uw tokenquotum met enqueued bevat het maximum aantal invoertokens dat u tegelijk kunt in de wachtrij opnemen.

Zodra uw batchaanvraag is voltooid, wordt de limiet voor batchsnelheid opnieuw ingesteld, omdat uw invoertokens worden gewist. De limiet is afhankelijk van het aantal globale aanvragen in de wachtrij. Als de Batch API-wachtrij uw batches snel verwerkt, wordt de limiet voor batchsnelheid sneller hersteld.

Probleemoplossing

Een taak is geslaagd wanneer status dit is Completed. Geslaagde taken genereren nog steeds een error_file_id, maar worden gekoppeld aan een leeg bestand met nul bytes.

Wanneer er een taakfout optreedt, vindt u details over de fout in de errors eigenschap:

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

Foutcodes

Foutcode Definitie
invalid_json_line Een regel (of meerdere) in het invoerbestand kon niet worden geparseerd als geldige json.

Zorg ervoor dat er geen typefouten, juiste haakjes openen en sluiten, en aanhalingstekens volgens de JSON-standaard, en verzend de aanvraag opnieuw.
too_many_tasks Het aantal aanvragen in het invoerbestand overschrijdt de maximaal toegestane waarde van 100.000.

Zorg ervoor dat uw totale aanvragen minder dan 100.000 zijn en verzend de taak opnieuw.
url_mismatch Een rij in uw invoerbestand heeft een URL die niet overeenkomt met de rest van de rijen, of de URL die is opgegeven in het invoerbestand komt niet overeen met de verwachte eindpunt-URL.

Zorg ervoor dat alle aanvraag-URL's hetzelfde zijn en dat deze overeenkomen met de eindpunt-URL die is gekoppeld aan uw Azure OpenAI-implementatie.
model_not_found De implementatienaam van het Azure OpenAI-model die is opgegeven in de model eigenschap van het invoerbestand, is niet gevonden.

Zorg ervoor dat deze naam verwijst naar een geldige implementatie van het Azure OpenAI-model.
duplicate_custom_id De aangepaste id voor deze aanvraag is een duplicaat van de aangepaste id in een andere aanvraag.
empty_batch Controleer het invoerbestand om ervoor te zorgen dat de aangepaste id-parameter uniek is voor elke aanvraag in de batch.
model_mismatch De implementatienaam van het Azure OpenAI-model die is opgegeven in de model eigenschap van deze aanvraag in het invoerbestand komt niet overeen met de rest van het bestand.

Zorg ervoor dat alle aanvragen in het batchpunt naar dezelfde Azure OpenAI-servicemodelimplementatie in de model eigenschap van de aanvraag.
invalid_request Het schema van de invoerregel is ongeldig of de implementatie-SKU is ongeldig.

Zorg ervoor dat de eigenschappen van de aanvraag in uw invoerbestand overeenkomen met de verwachte invoereigenschappen en dat de Azure OpenAI-implementatie-SKU voor batch-API-aanvragen is globalbatch .

Bekende problemen

  • Resources die met Azure CLI zijn geïmplementeerd, werken niet standaard met de globale Azure OpenAI-batch. Dit is het gevolg van een probleem waarbij resources die zijn geïmplementeerd met deze methode eindpuntsubdomeinen hebben die niet voldoen aan het https://your-resource-name.openai.azure.com patroon. Een tijdelijke oplossing voor dit probleem is het implementeren van een nieuwe Azure OpenAI-resource met behulp van een van de andere veelgebruikte implementatiemethoden waarmee de installatie van het subdomein correct wordt afgehandeld als onderdeel van het implementatieproces.

Zie ook

  • Meer informatie over Azure OpenAI-implementatietypen
  • Meer informatie over Azure OpenAI-quota en -limieten