Läs på engelska

Dela via


Komma igång med globala batchdistributioner i Azure OpenAI

Välj önskad användningsmetod

Azure OpenAI Batch-API:et är utformat för att effektivt hantera storskaliga och stora bearbetningsuppgifter. Bearbeta asynkrona grupper av begäranden med separat kvot, med 24-timmars målomställning, till 50 % lägre kostnad än global standard. Med batchbearbetning skickar du ett stort antal begäranden i en enda fil i stället för att skicka en begäran i taget. Globala batchbegäranden har en separat kvot för kodad token som undviker avbrott i dina onlinearbetsbelastningar.

De främsta användningsfallen är:

  • Storskalig databearbetning: Analysera snabbt omfattande datamängder parallellt.

  • Innehållsgenerering: Skapa stora mängder text, till exempel produktbeskrivningar eller artiklar.

  • Dokumentgranskning och sammanfattning: Automatisera granskning och sammanfattning av långa dokument.

  • Kundsupportautomatisering: Hantera flera frågor samtidigt för snabbare svar.

  • Dataextrahering och analys: Extrahera och analysera information från stora mängder ostrukturerade data.

  • NLP-uppgifter (Natural Language Processing): Utför uppgifter som attitydanalys eller översättning på stora datamängder.

  • Marknadsföring och anpassning: Generera anpassat innehåll och rekommendationer i stor skala.

Viktigt

Vi strävar efter att bearbeta batchbegäranden inom 24 timmar. vi upphör inte att gälla de jobb som tar längre tid. Du kan avbryta jobbet när som helst. När du avbryter jobbet avbryts allt återstående arbete och allt redan slutfört arbete returneras. Du debiteras för allt slutfört arbete.

Data som lagras i vila finns kvar i det angivna Azure-geografin, medan data kan bearbetas för slutsatsdragning på valfri Azure OpenAI-plats. Läs mer om datahemvist. 

Stöd för globala batchar

Stöd för region och modell

Global batch stöds för närvarande i följande regioner:

Region gpt-4o, 2024-05-13 gpt-4o, 2024-08-06 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
canadaeast
eastus
eastus2
francecentral
Japan, östra
koreacentral
northcentralus
norwayeast
USA, södra centrala
southindia
swedencentral
switzerlandnorth
uksouth
Europa, västra
westus
westus3

Följande modeller stöder global batch:

Modell Version Indataformat
gpt-4o 2024-08-06 text + bild
gpt-4o-mini 2024-07-18 text + bild
gpt-4o 2024-05-13 text + bild
gpt-4 turbo-2024-04-09 text
gpt-4 0613 text
gpt-35-turbo 0125 text
gpt-35-turbo 1106 text
gpt-35-turbo 0613 text

Se modellsidan för den senaste informationen om regioner/modeller där global batch stöds för närvarande.

API-stöd

API-version
Senaste GA API-versionen: 2024-10-21
Senaste förhandsversion av API:et: 2024-10-01-preview

Supporten lades först till i: 2024-07-01-preview

Funktionsstöd

Följande stöds inte för närvarande:

  • Integrering med ASSISTENT-API:et.
  • Integrering med Azure OpenAI På dina data-funktioner.

Anteckning

Strukturerade utdata stöds nu med Global Batch.

Global batchdistribution

I Studio-användargränssnittet visas distributionstypen som Global-Batch.

Skärmbild som visar dialogrutan för modelldistribution i Azure AI Studio med distributionstypen Global-Batch markerad.

Tips

Vi rekommenderar att du aktiverar dynamisk kvot för alla globala batchmodelldistributioner för att undvika jobbfel på grund av otillräcklig kvot för enqueued token. Med dynamisk kvot kan distributionen opportunistiskt dra nytta av mer kvot när extra kapacitet är tillgänglig. När den dynamiska kvoten är inställd på av kan distributionen endast bearbeta begäranden upp till den köade tokengräns som definierades när du skapade distributionen.

Förutsättningar

Förbereda batchfilen

Precis som finjustering använder den globala batchen filer i JSON-linjeformat (.jsonl). Nedan visas några exempelfiler med olika typer av innehåll som stöds:

Indataformat

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

custom_id Krävs för att du ska kunna identifiera vilken enskild batchbegäran som motsvarar ett givet svar. Svar returneras inte i samma ordning som den ordning som definierats i .jsonl batchfilen.

model attributet ska anges så att det matchar namnet på den globala Batch-distribution som du vill rikta in dig på för slutsatsdragningssvar.

Viktigt

Attributet model måste anges så att det matchar namnet på den globala Batch-distribution som du vill rikta in dig på för slutsatsdragningssvar. Samma distributionsnamn för global Batch-modell måste finnas på varje rad i batchfilen. Om du vill rikta in dig på en annan distribution måste du göra det i en separat batchfil/ett separat batchjobb.

För bästa prestanda rekommenderar vi att du skickar stora filer för batchbearbetning i stället för ett stort antal små filer med bara några rader i varje fil.

Skapa indatafil

I den här artikeln skapar vi en fil med namnet test.jsonl och kopierar innehållet från standardindatakodblocket ovan till filen. Du måste ändra och lägga till namnet på den globala batchdistributionen till varje rad i filen.

Ladda upp batchfil

När indatafilen har förberetts måste du först ladda upp filen för att sedan kunna starta ett batchjobb. Filuppladdning kan göras både programmatiskt eller via Studio.

  1. Logga in på AI Studio.

  2. Välj den Azure OpenAI-resurs där du har en global batchmodelldistribution tillgänglig.

  3. Välj Batch-jobb>+Skapa batchjobb.

    Skärmbild som visar hur du skapar batchjobb i Azure AI Studio.

  4. I listrutan under Uppladdningsfiler> för Batch-data>väljer du Ladda upp fil och anger sökvägen för test.jsonl filen som skapades i föregående steg >Nästa.

    Skärmbild som visar uppladdningsfilens upplevelse.

Skapa batchjobb

Välj Skapa för att starta batchjobbet.

Skärmbild av azure Studio-användargränssnittet för att skapa ett batchjobb.

Spåra förlopp för batchjobb

När jobbet har skapats kan du övervaka jobbets förlopp genom att välja jobb-ID:t för det senast skapade jobbet. Som standard kommer du till statussidan för ditt senast skapade batchjobb.

Skärmbild som visar batchjobbs-ID:t för ett jobb som för närvarande genomgår validering.

Du kan spåra jobbstatus för ditt jobb i den högra rutan:

Skärmbild som visar statusen för batchjobbet i Azure AI Studio.

Hämta utdatafil för batchjobb

När jobbet har slutförts eller nått ett terminaltillstånd genereras en felfil och en utdatafil som kan laddas ned för granskning genom att välja respektive knapp med nedåtpilikonen.

Skärmbild som visar batchjobbets utdata och felfiler som är tillgängliga för nedladdning.

Avbryt batch

Avbryter en pågående batch. Batchen har status cancelling i upp till 10 minuter innan den ändras till cancelled, där det kommer att ha partiella resultat (om några) tillgängliga i utdatafilen.

Skärmbild som visar knappen avbryt batchjobb i Azure AI Studio.

Förutsättningar

Stegen i den här artikeln är avsedda att köras sekventiellt i Jupyter Notebooks. Därför instansierar vi bara Azure OpenAI-klienten en gång i början av exemplen. Om du vill köra ett steg i fel ordning måste du ofta konfigurera en Azure OpenAI-klient som en del av det anropet.

Även om du redan har Installerat OpenAI Python-biblioteket kan du behöva uppgradera installationen till den senaste versionen:

!pip install openai --upgrade

Förbereda batchfilen

Precis som finjustering använder den globala batchen filer i JSON-linjeformat (.jsonl). Nedan visas några exempelfiler med olika typer av innehåll som stöds:

Indataformat

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

custom_id Krävs för att du ska kunna identifiera vilken enskild batchbegäran som motsvarar ett givet svar. Svar returneras inte i samma ordning som den ordning som definierats i .jsonl batchfilen.

model attributet ska anges så att det matchar namnet på den globala Batch-distribution som du vill rikta in dig på för slutsatsdragningssvar.

Viktigt

Attributet model måste anges så att det matchar namnet på den globala Batch-distribution som du vill rikta in dig på för slutsatsdragningssvar. Samma distributionsnamn för global Batch-modell måste finnas på varje rad i batchfilen. Om du vill rikta in dig på en annan distribution måste du göra det i en separat batchfil/ett separat batchjobb.

För bästa prestanda rekommenderar vi att du skickar stora filer för batchbearbetning i stället för ett stort antal små filer med bara några rader i varje fil.

Skapa indatafil

I den här artikeln skapar vi en fil med namnet test.jsonl och kopierar innehållet från standardindatakodblocket ovan till filen. Du måste ändra och lägga till namnet på den globala batchdistributionen till varje rad i filen. Spara den här filen i samma katalog som du kör Jupyter Notebook.

Ladda upp batchfil

När indatafilen har förberetts måste du först ladda upp filen för att sedan kunna starta ett batchjobb. Filuppladdning kan göras både programmatiskt eller via Studio. I det här exemplet används miljövariabler i stället för nyckel- och slutpunktsvärdena. Om du inte känner till att använda miljövariabler med Python kan du läsa någon av våra snabbstarter där processen med att konfigurera miljövariablerna i förklaras steg för steg.

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

Utdata:

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

Skapa batchjobb

När filen har laddats upp kan du skicka filen för batchbearbetning.

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

Anteckning

För närvarande måste slutförandefönstret vara inställt på 24h. Om du anger något annat värde än 24 timmar misslyckas jobbet. Jobb som tar längre tid än 24 timmar fortsätter att köras tills de avbryts.

Utdata:

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

Spåra förlopp för batchjobb

När du har skapat batchjobbet kan du övervaka förloppet antingen i Studio eller programatiskt. När du kontrollerar batchjobbförloppet rekommenderar vi att du väntar minst 60 sekunder mellan varje statusanrop.

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

Utdata:

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

Följande statusvärden är möjliga:

Status Beskrivning
validating Indatafilen verifieras innan batchbearbetningen kan börja.
failed Indatafilen har misslyckats med valideringsprocessen.
in_progress Indatafilen har verifierats och batchen körs för närvarande.
finalizing Batchen har slutförts och resultaten förbereds.
completed Batchen har slutförts och resultatet är klart.
expired Batchen kunde inte slutföras inom tidsperioden på 24 timmar.
cancelling Batchen börjar gälla cancelled (det kan ta upp till 10 minuter att börja gälla.)
cancelled batchen var cancelled.

Så här undersöker du jobbstatusinformationen som du kan köra:

print(batch_response.model_dump_json(indent=2))

Utdata:

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

Observera att det finns både error_file_id och en separat output_file_id. error_file_id Använd för att felsöka eventuella problem som uppstår med batchjobbet.

Hämta utdatafil för batchjobb

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)

Utdata:

För korthet inkluderar vi bara ett svar om att chatten har slutförts med utdata. Om du följer stegen i den här artikeln bör du ha tre svar som liknar det nedan:

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

Ytterligare batchkommandon

Avbryt batch

Avbryter en pågående batch. Batchen har status cancelling i upp till 10 minuter innan den ändras till cancelled, där det kommer att ha partiella resultat (om några) tillgängliga i utdatafilen.

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

Lista batch

Lista batchjobb för en viss Azure OpenAI-resurs.

client.batches.list()

Listmetoder i Python-biblioteket är sidnumrerade.

Så här listar du alla jobb:

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)

Listbatch (förhandsversion)

Använd REST-API:et för att visa en lista över alla batchjobb med ytterligare sorterings-/filtreringsalternativ.

I exemplen nedan tillhandahåller vi funktionen generate_time_filter för att göra det enklare att konstruera filtret. Om du inte vill använda den här funktionen skulle formatet för filtersträngen se ut som created_at gt 1728860560 and status eq 'Completed'.

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)  

Utdata:

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

Förutsättningar

Förbereda batchfilen

Precis som finjustering använder den globala batchen filer i JSON-linjeformat (.jsonl). Nedan visas några exempelfiler med olika typer av innehåll som stöds:

Indataformat

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

custom_id Krävs för att du ska kunna identifiera vilken enskild batchbegäran som motsvarar ett givet svar. Svar returneras inte i samma ordning som den ordning som definierats i .jsonl batchfilen.

model attributet ska anges så att det matchar namnet på den globala Batch-distribution som du vill rikta in dig på för slutsatsdragningssvar.

Viktigt

Attributet model måste anges så att det matchar namnet på den globala Batch-distribution som du vill rikta in dig på för slutsatsdragningssvar. Samma distributionsnamn för global Batch-modell måste finnas på varje rad i batchfilen. Om du vill rikta in dig på en annan distribution måste du göra det i en separat batchfil/ett separat batchjobb.

För bästa prestanda rekommenderar vi att du skickar stora filer för batchbearbetning i stället för ett stort antal små filer med bara några rader i varje fil.

Skapa indatafil

I den här artikeln skapar vi en fil med namnet test.jsonl och kopierar innehållet från standardindatakodblocket ovan till filen. Du måste ändra och lägga till namnet på den globala batchdistributionen till varje rad i filen.

Ladda upp batchfil

När indatafilen har förberetts måste du först ladda upp filen för att sedan kunna starta ett batchjobb. Filuppladdning kan göras både programmatiskt eller via Studio. I det här exemplet används miljövariabler i stället för nyckel- och slutpunktsvärdena. Om du inte känner till att använda miljövariabler med Python kan du läsa någon av våra snabbstarter där processen med att konfigurera miljövariablerna i förklaras steg för steg.

Viktigt

Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.

Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.

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"

Koden ovan förutsätter en viss filsökväg för din test.jsonl-fil. Justera den här filsökvägen efter behov för det lokala systemet.

Utdata:

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

Spåra filuppladdningsstatus

Beroende på storleken på din uppladdningsfil kan det ta lite tid innan den laddas upp och bearbetas helt. Så här kontrollerar du statusen för filuppladdningen:

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

Utdata:

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

Skapa batchjobb

När filen har laddats upp kan du skicka filen för batchbearbetning.

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

Anteckning

För närvarande måste slutförandefönstret vara inställt på 24h. Om du anger något annat värde än 24 timmar misslyckas jobbet. Jobb som tar längre tid än 24 timmar fortsätter att köras tills de avbryts.

Utdata:

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

Spåra förlopp för batchjobb

När du har skapat batchjobbet kan du övervaka förloppet antingen i Studio eller programatiskt. När du kontrollerar batchjobbförloppet rekommenderar vi att du väntar minst 60 sekunder mellan varje statusanrop.

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

Utdata:

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

Följande statusvärden är möjliga:

Status Beskrivning
validating Indatafilen verifieras innan batchbearbetningen kan börja.
failed Indatafilen har misslyckats med valideringsprocessen.
in_progress Indatafilen har verifierats och batchen körs för närvarande.
finalizing Batchen har slutförts och resultaten förbereds.
completed Batchen har slutförts och resultatet är klart.
expired Det gick inte att slutföra batchen inom tidsperioden på 24 timmar.
cancelling Batchen används cancelled (det kan ta upp till 10 minuter att börja gälla.)
cancelled batchen var cancelled.

Hämta utdatafil för batchjobb

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

Ytterligare batchkommandon

Avbryt batch

Avbryter en pågående batch. Batchen har status cancelling i upp till 10 minuter innan den ändras till cancelled, där det kommer att ha partiella resultat (om några) tillgängliga i utdatafilen.

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" 

Lista batch

Visa en lista över befintliga batchjobb för en viss Azure OpenAI-resurs.

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

LIST-API-anropet är sidnumrerat. Svaret innehåller ett booleskt has_more värde som anger när det finns fler resultat att iterera igenom.

Listbatch (förhandsversion)

Använd REST-API:et för att visa en lista över alla batchjobb med ytterligare sorterings-/filtreringsalternativ.

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"

För att undvika felutrymmena URL rejected: Malformed input to a URL function ersätts med %20.

Globala batchgränser

Gränsnamn Gränsvärde
Maximalt antal filer per resurs 500
Maximal filstorlek för indata 200 MB
Maximalt antal begäranden per fil 100,000

Global batchkvot

Tabellen visar batchkvotgränsen. Kvotvärden för global batch representeras när det gäller kodade token. När du skickar en fil för batchbearbetning räknas antalet token som finns i filen. Tills batchjobbet når ett terminaltillstånd räknas dessa token mot den totala tillåtna tokengränsen.

Modell Enterprise-avtal Standardvärde Månatliga kreditkortsbaserade prenumerationer MSDN-prenumerationer Azure for Students, kostnadsfria utvärderingsversioner
gpt-4o 5 B 200 M 50 M 90 K Ej tillämpligt
gpt-4o-mini 15 B 1 B 50 M 90 K Ej tillämpligt
gpt-4-turbo 300 M 80 M 40 M 90 K Ej tillämpligt
gpt-4 150 M 30 M 5 M 100 K Ej tillämpligt
gpt-35-turbo 10 B 1 B 100 M 2 M 50 K

B = miljarder | M = miljoner | K = tusen

Batch-objekt

Property Type Definition
id sträng
object sträng batch
endpoint sträng API-slutpunkten som används av batchen
errors objekt
input_file_id sträng ID för indatafilen för batchen
completion_window sträng Den tidsram inom vilken batchen ska bearbetas
status sträng Batchens aktuella status. Möjliga värden: validating, failed, in_progress, finalizing, completed, expired, , cancelling. cancelled
output_file_id sträng ID:t för filen som innehåller utdata från begäranden som har körts.
error_file_id sträng ID:t för filen som innehåller utdata från begäranden med fel.
created_at integer En tidsstämpel när den här batchen skapades (i unix-epoker).
in_progress_at integer En tidsstämpel när den här batchen började utvecklas (i unix-epoker).
expires_at integer En tidsstämpel när den här batchen upphör att gälla (i unix-epoker).
finalizing_at integer En tidsstämpel när den här batchen började slutföras (i unix-epoker).
completed_at integer En tidsstämpel när den här batchen började slutföras (i unix-epoker).
failed_at integer En tidsstämpel när den här batchen misslyckades (i unix-epoker)
expired_at integer En tidsstämpel när den här batchen upphörde att gälla (i unix-epoker).
cancelling_at integer En tidsstämpel när den här batchen startade cancelling (i unix-epoker).
cancelled_at integer En tidsstämpel när den här batchen var cancelled (i unix-epoker).
request_counts objekt Objektstruktur:

totalheltal
Det totala antalet begäranden i batchen.
completed heltal
Antalet begäranden i batchen som har slutförts.
failedheltal
Antalet begäranden i batchen som har misslyckats.
metadata map En uppsättning nyckel/värde-par som kan kopplas till batchen. Den här egenskapen kan vara användbar för att lagra ytterligare information om batchen i ett strukturerat format.

Vanliga frågor och svar

Kan avbildningar användas med batch-API:et?

Den här funktionen är begränsad till vissa multimodala modeller. För närvarande stöder endast GPT-4o bilder som en del av batchbegäranden. Bilder kan anges som indata antingen via bild-URL eller en base64-kodad representation av bilden. Bilder för batch stöds för närvarande inte med GPT-4 Turbo.

Kan jag använda batch-API:et med finjusterade modeller?

Detta stöds inte för närvarande.

Kan jag använda batch-API:et för inbäddningsmodeller?

Detta stöds inte för närvarande.

Fungerar innehållsfiltrering med Global Batch-distribution?

Ja. På samma sätt som andra distributionstyper kan du skapa innehållsfilter och associera dem med distributionstypen Global Batch.

Kan jag begära ytterligare kvot?

Ja, från kvotsidan i Studio-användargränssnittet. Standardkvotallokering finns i artikeln om kvoter och gränser.

Vad händer om API:et inte slutför min begäran inom tidsramen på 24 timmar?

Vi strävar efter att behandla dessa begäranden inom 24 timmar; Vi upphör inte att gälla de jobb som tar längre tid. Du kan avbryta jobbet när som helst. När du avbryter jobbet avbryts allt återstående arbete och allt redan slutfört arbete returneras. Du debiteras för allt slutfört arbete.

Hur många begäranden kan jag köa med batch?

Det finns ingen fast gräns för hur många begäranden du kan batcha, men det beror på din kvot för enqueued-token. Din köade tokenkvot innehåller det maximala antalet indatatoken som du kan ange samtidigt.

När batchbegäran har slutförts återställs batchhastighetsgränsen när dina indatatoken rensas. Gränsen beror på antalet globala begäranden i kön. Om Batch API-kön bearbetar dina batchar snabbt återställs batchhastighetsgränsen snabbare.

Felsökning

Ett jobb lyckas när status är Completed. Lyckade jobb genererar fortfarande en error_file_id, men den associeras med en tom fil med noll byte.

När ett jobbfel inträffar hittar du information om felet i egenskapen errors :

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

Felkoder

Felkod Definition
invalid_json_line En rad (eller flera) i indatafilen kunde inte parsas som giltig json.

Se till att inga stavfel, korrekt inledande och avslutande hakparenteser och citattecken enligt JSON-standard och skicka begäran igen.
too_many_tasks Antalet begäranden i indatafilen överskrider det högsta tillåtna värdet på 100 000.

Kontrollera att dina totala begäranden är under 100 000 och skicka jobbet igen.
url_mismatch Antingen har en rad i indatafilen en URL som inte matchar resten av raderna, eller så matchar url:en som anges i indatafilen inte den förväntade slutpunkts-URL:en.

Kontrollera att alla url:er för begäran är desamma och att de matchar slutpunkts-URL:en som är associerad med din Azure OpenAI-distribution.
model_not_found Distributionsnamnet för Azure OpenAI-modellen som angavs i model egenskapen för indatafilen hittades inte.

Kontrollera att det här namnet pekar på en giltig Azure OpenAI-modelldistribution.
duplicate_custom_id Det anpassade ID:t för den här begäran är en dubblett av det anpassade ID:t i en annan begäran.
empty_batch Kontrollera indatafilen för att se till att den anpassade ID-parametern är unik för varje begäran i batchen.
model_mismatch Distributionsnamnet för Azure OpenAI-modellen som angavs i egenskapen för den model här begäran i indatafilen matchar inte resten av filen.

Kontrollera att alla begäranden i batchen pekar på samma AOAI-modelldistribution i model egenskapen för begäran.
invalid_request Schemat för indataraden är ogiltigt eller så är distributions-SKU:n ogiltig.

Kontrollera att egenskaperna för begäran i indatafilen matchar de förväntade indataegenskaperna och att Azure OpenAI-distributions-SKU:n är globalbatch för batch-API-begäranden.

Kända problem

  • Resurser som distribueras med Azure CLI fungerar inte direkt med den globala Azure OpenAI-batchen. Detta beror på ett problem där resurser som distribueras med den här metoden har underdomäner för slutpunkter som inte följer https://your-resource-name.openai.azure.com mönstret. En lösning på det här problemet är att distribuera en ny Azure OpenAI-resurs med någon av de andra vanliga distributionsmetoderna som hanterar underdomänkonfigurationen korrekt som en del av distributionsprocessen.

Se även

  • Läs mer om Distributionstyper för Azure OpenAI
  • Läs mer om Azure OpenAI-kvoter och -gränser