Utbildning
Komma igång med globala batchdistributioner i Azure OpenAI
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.
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-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
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.
I Studio-användargränssnittet visas distributionstypen som Global-Batch
.
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.
- En Azure-prenumeration – Skapa en kostnadsfritt.
- En Azure OpenAI-resurs med en modell av distributionstypen
Global-Batch
distribuerad. Du kan läsa guiden för att skapa resurser och modeller för att få hjälp med den här processen.
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:
{"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.
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.
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.
Logga in på AI Studio.
Välj den Azure OpenAI-resurs där du har en global batchmodelldistribution tillgänglig.
Välj Batch-jobb>+Skapa batchjobb.
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.
Välj Skapa för att starta batchjobbet.
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.
Du kan spåra jobbstatus för ditt jobb i den högra rutan:
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.
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.
- En Azure-prenumeration – Skapa en kostnadsfritt.
- Python 3.8 eller senare version
- Följande Python-bibliotek:
openai
- Jupyter Notebook
- En Azure OpenAI-resurs med en modell av distributionstypen
Global-Batch
distribuerad. Du kan läsa guiden för att skapa resurser och modeller för att få hjälp med den här processen.
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
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:
{"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.
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.
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
}
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
}
}
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.
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
}
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 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)
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"
}
- En Azure-prenumeration – Skapa en kostnadsfritt.
- En Azure OpenAI-resurs med en modell av distributionstypen
Global-Batch
distribuerad. Du kan läsa guiden för att skapa resurser och modeller för att få hjälp med den här processen.
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:
{"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.
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.
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"
}
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"
}
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"
}
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 . |
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
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"
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.
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
.
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 |
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
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:total heltal Det totala antalet begäranden i batchen. completed heltal Antalet begäranden i batchen som har slutförts. failed heltal 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. |
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.
Detta stöds inte för närvarande.
Detta stöds inte för närvarande.
Ja. På samma sätt som andra distributionstyper kan du skapa innehållsfilter och associera dem med distributionstypen Global Batch.
Ja, från kvotsidan i Studio-användargränssnittet. Standardkvotallokering finns i artikeln om kvoter och gränser.
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.
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.
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
},
}
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. |
- 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.
- Läs mer om Distributionstyper för Azure OpenAI
- Läs mer om Azure OpenAI-kvoter och -gränser