Začínáme s nasazeními batch Azure OpenAI
Rozhraní API služby Azure OpenAI Batch je navržené tak, aby efektivně zpracovával úlohy rozsáhlého a velkoobjemového zpracování. Zpracování asynchronních skupin požadavků s samostatnou kvótou s 24hodinovým cílovým turnaroundem s 50% nižšími náklady než globální standard. Při dávkovém zpracování místo odeslání jednoho požadavku v jednom souboru odešlete velký počet požadavků. Globální dávkové požadavky mají samostatnou kvótu front tokenů, aby nedošlo k přerušení online úloh.
Mezi klíčové případy použití patří:
Rozsáhlé zpracování dat: Paralelní rychlá analýza rozsáhlých datových sad
Generování obsahu: Umožňuje vytvářet velké objemy textu, jako jsou popisy produktů nebo články.
Kontrola a shrnutí dokumentů: Automatizujte kontrolu a shrnutí dlouhých dokumentů.
Automatizace zákaznické podpory: Zpracování mnoha dotazů současně za účelem rychlejších odpovědí
Extrakce a analýza dat: Extrahování a analýza informací z obrovského množství nestrukturovaných dat
Úlohy zpracování přirozeného jazyka (NLP): Provádění úkolů, jako je analýza mínění nebo překlad velkých datových sad
Marketing a přizpůsobení: Vygenerujte přizpůsobený obsah a doporučení ve velkém měřítku.
Důležité
Snažíme se zpracovávat dávkové žádosti do 24 hodin; nevypršíme platnost úloh, které trvá déle. Úlohu můžete kdykoli zrušit . Když zrušíte úlohu, zruší se všechna zbývající práce a vrátí se všechna již dokončená práce. Za všechny dokončené práce se vám budou účtovat poplatky.
Neaktivní uložená data zůstávají v určené geografické oblasti Azure, zatímco data se můžou zpracovávat pro odvozování v libovolném umístění Azure OpenAI. Přečtěte si další informace o rezidenci dat.
Podpora služby Batch
Globální dostupnost dávkového modelu
Oblast | 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 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Německo – středozápad | ✅ | ✅ | - | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
japaneast | ✅ | ✅ | - | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
koreacentral | ✅ | ✅ | - | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
northcentralus | ✅ | ✅ | - | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Norsko – východ | ✅ | ✅ | - | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
polskocentral | ✅ | ✅ | - | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Jižní Afrika – sever | ✅ | ✅ | - | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Střed USA – jih | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
southindia | ✅ | ✅ | - | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
swedencentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
switzerlandnorth | ✅ | ✅ | - | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
uksouth | ✅ | ✅ | - | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
westeurope | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
westus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
westus3 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Globální dávky podporují následující modely:
Model | Verze | Vstupní formát |
---|---|---|
gpt-4o |
2024-08-06 | text + obrázek |
gpt-4o-mini |
2024-07-18 | text + obrázek |
gpt-4o |
2024-05-13 | text + obrázek |
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 |
Podpora rozhraní API
Verze rozhraní API | |
---|---|
Nejnovější verze rozhraní GA API: | 2024-10-21 |
Nejnovější verze rozhraní API verze Preview: | 2024-10-01-preview |
Podpora byla přidána jako první: 2024-07-01-preview
Podpora funkcí
V současné době nejsou podporovány následující položky:
- Integrace s rozhraním API pro asistenty
- Integrace se službou Azure OpenAI ve vašich datech
Poznámka:
Strukturované výstupy se teď podporují v globální službě Batch.
Nasazení služby Batch
Poznámka:
Na portálu Azure AI Foundry se typy dávkového nasazení zobrazí jako Global-Batch
a Data Zone Batch
. Další informace o typech nasazení Azure OpenAI najdete v průvodci typy nasazení.
Tip
Doporučujeme povolit dynamickou kvótu pro všechna globální nasazení dávkových modelů, aby se zabránilo selháním úloh kvůli nedostatečné kvótě vyčíslených tokenů. Dynamická kvóta umožňuje vašemu nasazení příležitostně využít větší kvótu, pokud je k dispozici dodatečná kapacita. Když je dynamická kvóta nastavená na vypnutou, vaše nasazení bude moci zpracovávat pouze požadavky až do limitu fronty tokenu, který byl definován při vytváření nasazení.
Požadavky
- Předplatné Azure – Vytvořte si ho zdarma.
- Prostředek Azure OpenAI s modelem nasazeného typu
Global-Batch
nasazení. Nápovědu k tomuto procesu najdete v průvodci vytvořením prostředků a nasazením modelu.
Příprava dávkového souboru
Stejně jako vyladění používá globální dávka soubory ve formátu řádků JSON (.jsonl
). Níže je několik ukázkových souborů s různými typy podporovaného obsahu:
Vstupní formát
{"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?"}]}}
Vyžaduje custom_id
se, abyste mohli určit, které jednotlivé dávkové požadavky odpovídají dané odpovědi. Odpovědi nebudou vráceny stejně jako pořadí definované v dávkovém .jsonl
souboru.
model
atribut by měl být nastaven tak, aby odpovídal názvu globálního nasazení batch, které chcete cílit na odpovědi na odvozování.
Důležité
Atribut model
musí být nastavený tak, aby odpovídal názvu globálního nasazení batch, na které chcete cílit na odpovědi odvozování. Stejný název nasazení globálního modelu batch musí být na každém řádku dávkového souboru. Pokud chcete cílit na jiné nasazení, musíte to udělat v samostatném dávkovém souboru nebo úloze.
Pro zajištění nejlepšího výkonu doporučujeme odeslat velké soubory pro dávkové zpracování, nikoli velký počet malých souborů s několika řádky v každém souboru.
Vytvoření vstupního souboru
V tomto článku vytvoříme soubor s názvem test.jsonl
a zkopírujeme obsah z bloku standardního vstupního kódu výše do souboru. Ke každému řádku souboru budete muset upravit a přidat název globálního dávkového nasazení.
Nahrání dávkového souboru
Jakmile je vstupní soubor připravený, musíte nejprve nahrát soubor, abyste pak mohli začít dávkovou úlohu. Nahrávání souborů je možné provádět prostřednictvím kódu programu nebo prostřednictvím studia.
Vyberte prostředek Azure OpenAI, ve kterém máte k dispozici globální nasazení dávkového modelu.
Vyberte úlohy> Batch a vytvořte dávkové úlohy.
V rozevíracím seznamu v části Dávkové soubory nahrání dat>> vyberte Nahrát soubor a zadejte cestu k
test.jsonl
souboru vytvořenému v předchozím kroku >Další.
Vytvoření dávkové úlohy
Výběrem možnosti Vytvořit spusťte dávkovou úlohu.
Sledování průběhu dávkové úlohy
Po vytvoření úlohy můžete průběh úlohy monitorovat výběrem ID úlohy pro naposledy vytvořenou úlohu. Ve výchozím nastavení přejdete na stránku stavu pro naposledy vytvořenou dávkovou úlohu.
Stav úlohy můžete sledovat v pravém podokně:
Načtení výstupního souboru dávkové úlohy
Po dokončení nebo dosažení stavu terminálu se vygeneruje chybový soubor a výstupní soubor, který si můžete stáhnout ke kontrole výběrem příslušného tlačítka s ikonou šipky dolů.
Zrušit dávku
Zruší probíhající dávku. Dávka bude ve stavu cancelling
až 10 minut před změnou na cancelled
, kde bude mít ve výstupním souboru k dispozici částečné výsledky (pokud je k dispozici).
Požadavky
- Předplatné Azure – Vytvořte si ho zdarma.
- Python 3.8 nebo novější verze
- Následující knihovna Pythonu:
openai
- Poznámkové bloky Jupyter
- Prostředek Azure OpenAI s modelem nasazeného typu
Global-Batch
nasazení. Nápovědu k tomuto procesu najdete v průvodci vytvořením prostředků a nasazením modelu.
Kroky v tomto článku se mají spouštět postupně v poznámkových blocích Jupyter. Z tohoto důvodu vytvoříme instanci klienta Azure OpenAI pouze jednou na začátku příkladů. Pokud chcete spustit krok mimo pořadí, budete často muset v rámci tohoto volání nastavit klienta Azure OpenAI.
I když už máte nainstalovanou knihovnu OpenAI Python, možná budete muset upgradovat instalaci na nejnovější verzi:
!pip install openai --upgrade
Příprava dávkového souboru
Stejně jako vyladění používá globální dávka soubory ve formátu řádků JSON (.jsonl
). Níže je několik ukázkových souborů s různými typy podporovaného obsahu:
Vstupní formát
{"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?"}]}}
Vyžaduje custom_id
se, abyste mohli určit, které jednotlivé dávkové požadavky odpovídají dané odpovědi. Odpovědi nebudou vráceny stejně jako pořadí definované v dávkovém .jsonl
souboru.
model
atribut by měl být nastaven tak, aby odpovídal názvu globálního nasazení batch, které chcete cílit na odpovědi na odvozování.
Důležité
Atribut model
musí být nastavený tak, aby odpovídal názvu globálního nasazení batch, na které chcete cílit na odpovědi odvozování. Stejný název nasazení globálního modelu batch musí být na každém řádku dávkového souboru. Pokud chcete cílit na jiné nasazení, musíte to udělat v samostatném dávkovém souboru nebo úloze.
Pro zajištění nejlepšího výkonu doporučujeme odeslat velké soubory pro dávkové zpracování, nikoli velký počet malých souborů s několika řádky v každém souboru.
Vytvoření vstupního souboru
Pro účely tohoto článku vytvoříme soubor s názvem test.jsonl
a zkopírujeme obsah ze standardního vstupního bloku kódu výše do souboru. Budete muset upravit a přidat název globálního dávkového nasazení do každého řádku souboru. Uložte tento soubor do stejného adresáře, ve kterém spouštíte poznámkový blok Jupyter.
Nahrání dávkového souboru
Jakmile je vstupní soubor připravený, musíte nejprve nahrát soubor, abyste pak mohli začít dávkovou úlohu. Nahrávání souborů je možné provádět prostřednictvím kódu programu nebo prostřednictvím studia. Tento příklad používá proměnné prostředí místo hodnot klíče a koncového bodu. Pokud neznáte používání proměnných prostředí s Pythonem, přečtěte si jeden z našich rychlých startů , kde se postup nastavení proměnných prostředí podrobně popisuje.
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
Výstup:
{
"id": "file-9f3a81d899b4442f98b640e4bc3535dd",
"bytes": 815,
"created_at": 1722476551,
"filename": "test.jsonl",
"object": "file",
"purpose": "batch",
"status": null,
"status_details": null
}
Vytvoření dávkové úlohy
Po úspěšném nahrání souboru můžete odeslat soubor pro dávkové zpracování.
# 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))
Poznámka:
V současné době musí být okno dokončení nastaveno na hodnotu 24h. Pokud nastavíte jinou hodnotu než 24h, úloha selže. Úlohy, které zabírají déle než 24 hodin, se budou spouštět až do zrušení.
Výstup:
{
"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
}
}
Sledování průběhu dávkové úlohy
Po úspěšném vytvoření dávkové úlohy můžete sledovat její průběh buď v sadě Studio, nebo programově. Při kontrole průběhu dávkové úlohy doporučujeme počkat alespoň 60 sekund mezi každým stavem volání.
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}")
Výstup:
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
Možné jsou následující stavové hodnoty:
Stav | Popis |
---|---|
validating |
Vstupní soubor se ověřuje před zahájením dávkového zpracování. |
failed |
Vstupní soubor selhal procesem ověření. |
in_progress |
Vstupní soubor byl úspěšně ověřen a dávka je aktuálně spuštěná. |
finalizing |
Dávka se dokončila a výsledky jsou připravené. |
completed |
Dávka byla dokončena a výsledky jsou připravené. |
expired |
Dávku nebylo možné dokončit během 24hodinového časového intervalu. |
cancelling |
Dávka se cancelled spouští (Může to trvat až 10 minut.) |
cancelled |
dávka byla cancelled . |
Pokud chcete zkontrolovat podrobnosti o stavu úlohy, můžete spustit:
print(batch_response.model_dump_json(indent=2))
Výstup:
{
"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
}
}
Všimněte si, že existuje obojí error_file_id
i samostatné output_file_id
. error_file_id
Použijte k usnadnění ladění všech problémů, ke kterým dochází u dávkové úlohy.
Načtení výstupního souboru dávkové úlohy
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)
Výstup:
Kvůli stručnosti zahrneme pouze jednu odpověď na dokončení chatu výstupu. Pokud budete postupovat podle kroků v tomto článku, měli byste mít tři odpovědi podobné následujícímu:
{
"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
}
Další dávkové příkazy
Zrušit dávku
Zruší probíhající dávku. Dávka bude ve stavu cancelling
až 10 minut před změnou na cancelled
, kde bude mít ve výstupním souboru k dispozici částečné výsledky (pokud je k dispozici).
client.batches.cancel("batch_abc123") # set to your batch_id for the job you want to cancel
Výpis dávky
Zobrazení seznamu dávkových úloh pro konkrétní prostředek Azure OpenAI
client.batches.list()
Metody seznamů v knihovně Pythonu jsou stránkované.
Zobrazení seznamu všech úloh:
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)
Výpis dávky (Preview)
Pomocí rozhraní REST API můžete zobrazit seznam všech dávkových úloh s dalšími možnostmi řazení a filtrování.
V následujících příkladech poskytujeme generate_time_filter
funkci, která usnadňuje vytváření filtru. Pokud nechcete tuto funkci použít, bude formát řetězce filtru vypadat takto 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)
Výstup:
{
"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"
}
Požadavky
- Předplatné Azure – Vytvořte si ho zdarma.
- Prostředek Azure OpenAI s modelem nasazeného typu
Global-Batch
nasazení. Nápovědu k tomuto procesu najdete v průvodci vytvořením prostředků a nasazením modelu.
Příprava dávkového souboru
Stejně jako vyladění používá globální dávka soubory ve formátu řádků JSON (.jsonl
). Níže je několik ukázkových souborů s různými typy podporovaného obsahu:
Vstupní formát
{"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?"}]}}
Vyžaduje custom_id
se, abyste mohli určit, které jednotlivé dávkové požadavky odpovídají dané odpovědi. Odpovědi nebudou vráceny stejně jako pořadí definované v dávkovém .jsonl
souboru.
model
atribut by měl být nastaven tak, aby odpovídal názvu globálního nasazení batch, které chcete cílit na odpovědi na odvozování.
Důležité
Atribut model
musí být nastavený tak, aby odpovídal názvu globálního nasazení batch, na které chcete cílit na odpovědi odvozování. Stejný název nasazení globálního modelu batch musí být na každém řádku dávkového souboru. Pokud chcete cílit na jiné nasazení, musíte to udělat v samostatném dávkovém souboru nebo úloze.
Pro zajištění nejlepšího výkonu doporučujeme odeslat velké soubory pro dávkové zpracování, nikoli velký počet malých souborů s několika řádky v každém souboru.
Vytvoření vstupního souboru
Pro účely tohoto článku vytvoříme soubor s názvem test.jsonl
a zkopírujeme obsah ze standardního vstupního bloku kódu výše do souboru. Budete muset upravit a přidat název globálního dávkového nasazení do každého řádku souboru.
Nahrání dávkového souboru
Jakmile je vstupní soubor připravený, musíte nejprve nahrát soubor, abyste pak mohli začít dávkovou úlohu. Nahrávání souborů je možné provádět prostřednictvím kódu programu nebo prostřednictvím studia. Tento příklad používá proměnné prostředí místo hodnot klíče a koncového bodu. Pokud neznáte používání proměnných prostředí s Pythonem, přečtěte si jeden z našich rychlých startů , kde se postup nastavení proměnných prostředí podrobně popisuje.
Důležité
Pokud používáte klíč rozhraní API, uložte ho bezpečně někam jinam, například ve službě Azure Key Vault. Nezahrnujte klíč rozhraní API přímo do kódu a nikdy ho nevštěvujte veřejně.
Další informace o zabezpečení služeb AI najdete v tématu Ověřování požadavků na služby Azure AI.
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"
Výše uvedený kód předpokládá konkrétní cestu k souboru test.jsonl. Podle potřeby upravte tuto cestu k souboru pro místní systém.
Výstup:
{
"status": "pending",
"bytes": 686,
"purpose": "batch",
"filename": "test.jsonl",
"id": "file-21006e70789246658b86a1fc205899a4",
"created_at": 1721408291,
"object": "file"
}
Sledování stavu nahrávání souborů
V závislosti na velikosti nahrávaného souboru může nějakou dobu trvat, než se soubor úplně nahraje a zpracuje. Postup kontroly spuštění stavu nahrání souboru:
curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files/{file-id}?api-version=2024-10-21 \
-H "api-key: $AZURE_OPENAI_API_KEY"
Výstup:
{
"status": "processed",
"bytes": 686,
"purpose": "batch",
"filename": "test.jsonl",
"id": "file-21006e70789246658b86a1fc205899a4",
"created_at": 1721408291,
"object": "file"
}
Vytvoření dávkové úlohy
Po úspěšném nahrání souboru můžete odeslat soubor pro dávkové zpracování.
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"
}'
Poznámka:
V současné době musí být okno dokončení nastaveno na hodnotu 24h. Pokud nastavíte jinou hodnotu než 24h, úloha selže. Úlohy, které zabírají déle než 24 hodin, se budou spouštět až do zrušení.
Výstup:
{
"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"
}
Sledování průběhu dávkové úlohy
Po úspěšném vytvoření dávkové úlohy můžete sledovat její průběh buď v sadě Studio, nebo programově. Při kontrole průběhu dávkové úlohy doporučujeme počkat alespoň 60 sekund mezi každým stavem volání.
curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches/{batch_id}?api-version=2024-10-21 \
-H "api-key: $AZURE_OPENAI_API_KEY"
Výstup:
{
"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"
}
Možné jsou následující stavové hodnoty:
Stav | Popis |
---|---|
validating |
Vstupní soubor se ověřuje před zahájením dávkového zpracování. |
failed |
Vstupní soubor selhal procesem ověření. |
in_progress |
Vstupní soubor byl úspěšně ověřen a dávka je aktuálně spuštěná. |
finalizing |
Dávka se dokončila a výsledky jsou připravené. |
completed |
Dávka byla dokončena a výsledky jsou připravené. |
expired |
Dávku nebylo možné dokončit během 24hodinového časového intervalu. |
cancelling |
Dávka se cancelled spouští (Může to trvat až 10 minut.) |
cancelled |
dávka byla cancelled . |
Načtení výstupního souboru dávkové úlohy
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
Další dávkové příkazy
Zrušit dávku
Zruší probíhající dávku. Dávka bude ve stavu cancelling
až 10 minut před změnou na cancelled
, kde bude mít ve výstupním souboru k dispozici částečné výsledky (pokud je k dispozici).
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"
Výpis dávky
Uveďte seznam existujících dávkových úloh pro daný prostředek Azure OpenAI.
curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches?api-version=2024-10-21 \
-H "api-key: $AZURE_OPENAI_API_KEY"
Volání rozhraní API seznamu je stránkované. Odpověď obsahuje logickou hodnotu has_more
, která označuje, kdy se má iterovat více výsledků.
Výpis dávky (Preview)
Pomocí rozhraní REST API můžete zobrazit seznam všech dávkových úloh s dalšími možnostmi řazení a filtrování.
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"
Aby se zabránilo chybám URL rejected: Malformed input to a URL function
mezer, nahradí se znakem %20
.
Limity služby Batch
Název limitu | Omezit hodnotu |
---|---|
Maximální počet souborů na prostředek | 500 |
Maximální velikost vstupního souboru | 200 MB |
Maximální počet požadavků na soubor | 100 000 |
Kvóta služby Batch
V tabulce je uveden limit kvóty dávky. Hodnoty kvót pro globální dávku jsou reprezentovány z hlediska vyčtených tokenů. Když odešlete soubor pro dávkové zpracování počtu tokenů, které jsou přítomné v souboru, se započítávají. Dokud dávková úloha nedosáhne stavu terminálu, tyto tokeny se započítávají do celkového limitu vyčíslených tokenů.
Globální dávka
Model | Smlouva Enterprise | Výchozí | Předplatná založená na měsíčních platebních kartách | Předplatná MSDN | Azure for Students, bezplatné zkušební verze |
---|---|---|---|---|---|
gpt-4o |
5 B | 200 M | 50 M | 90 K | – |
gpt-4o-mini |
15 B | 1 B | 50 M | 90 K | – |
gpt-4-turbo |
300 M | 80 M | 40 M | 90 K | – |
gpt-4 |
150 M | 30 M | 5 M | 100 tis. | – |
gpt-35-turbo |
10 B | 1 B | 100 M | 2 M | 50 tis. |
B = miliarda | M = milion | K = tisíc
Dávka datové zóny
Model | Smlouva Enterprise | Výchozí | Předplatná založená na měsíčních platebních kartách | Předplatná MSDN | Azure for Students, bezplatné zkušební verze |
---|---|---|---|---|---|
gpt-4o |
500 M | 30 M | 30 M | 90 K | – |
gpt-4o-mini |
1,5 B | 100 M | 50 M | 90 K | – |
Objekt Batch
Vlastnost | Typ | Definice |
---|---|---|
id |
string | |
object |
string | batch |
endpoint |
string | Koncový bod rozhraní API používaný službou Batch |
errors |
objekt | |
input_file_id |
string | ID vstupního souboru pro dávku |
completion_window |
string | Časový rámec, ve kterém má být dávka zpracována |
status |
string | Aktuální stav dávky. Možné hodnoty: validating , failed , , finalizing in_progress , completed , expired , cancelling , , cancelled . |
output_file_id |
string | ID souboru obsahujícího výstupy úspěšně provedených požadavků. |
error_file_id |
string | ID souboru obsahujícího výstupy požadavků s chybami. |
created_at |
integer | Časové razítko, kdy byla tato dávka vytvořena (v unixových epochách). |
in_progress_at |
integer | Časové razítko, kdy tato dávka začala postupovat (v unixových epochách). |
expires_at |
integer | Časové razítko, kdy tato dávka vyprší (v unixových epochách). |
finalizing_at |
integer | Časové razítko, kdy tato dávka začala finalizovat (v unixových epochách). |
completed_at |
integer | Časové razítko, kdy tato dávka začala finalizovat (v unixových epochách). |
failed_at |
integer | Časové razítko, kdy tato dávka selhala (v unixových epochách) |
expired_at |
integer | Časové razítko, kdy tato dávka vypršela (v epochách unixu). |
cancelling_at |
integer | Časové razítko při spuštění cancelling této dávky (v epochách unixu) |
cancelled_at |
integer | Časové razítko, kdy byla cancelled tato dávka (v unixových epochách). |
request_counts |
objekt | Struktura objektu:total celé číslo Celkový počet požadavků v dávce. completed celé číslo Počet požadavků v dávce, které byly úspěšně dokončeny. failed celé číslo Počet požadavků v dávce, které selhaly. |
metadata |
map | Sada párů klíč-hodnota, které lze připojit k dávce. Tato vlastnost může být užitečná pro ukládání dalších informací o dávce ve strukturovaném formátu. |
Nejčastější dotazy
Dají se image používat s rozhraním API služby Batch?
Tato funkce je omezená na některé multimodální modely. V současné době podporují obrázky jako součást dávkových požadavků pouze GPT-4o. Obrázky je možné zadat jako vstup buď prostřednictvím adresy URL obrázku, nebo reprezentace obrázku zakódované v base64. Obrázky pro dávku se v současné době nepodporují v GPT-4 Turbo.
Můžu rozhraní API služby Batch používat s jemně vyladěnými modely?
Tato možnost není v současnosti podporovaná.
Můžu použít dávkové rozhraní API pro vkládání modelů?
Tato možnost není v současnosti podporovaná.
Funguje filtrování obsahu s globálním nasazením služby Batch?
Ano. Podobně jako u jiných typů nasazení můžete vytvořit filtry obsahu a přidružit je k typu globálního nasazení batch.
Můžu požádat o další kvótu?
Ano, na stránce kvóty na portálu Azure AI Foundry. Výchozí přidělení kvóty najdete v článku o kvótách a omezeních.
Co se stane, když rozhraní API nedokončí můj požadavek během 24hodinového časového rámce?
Snažíme se tyto žádosti zpracovat do 24 hodin; Nevypršíme platnost úloh, které trvá déle. Úlohu můžete kdykoli zrušit. Když zrušíte úlohu, zruší se všechna zbývající práce a vrátí se všechna již dokončená práce. Za dokončenou práci se vám budou účtovat poplatky.
Kolik požadavků můžu zařadit do fronty pomocí dávky?
Počet žádostí, které můžete dávkot, není nijak omezený, ale bude záviset na kvótě vyčíslených tokenů. Kvóta vyčíslených tokenů zahrnuje maximální počet vstupních tokenů, které můžete zadávat do fronty najednou.
Po dokončení dávkové žádosti se limit dávkové rychlosti resetuje, protože se vymažou vstupní tokeny. Limit závisí na počtu globálních požadavků ve frontě. Pokud fronta rozhraní API služby Batch zpracovává dávky rychle, limit dávkové rychlosti se resetuje rychleji.
Řešení problému
Úloha je úspěšná, pokud status
je Completed
. Úspěšné úlohy stále generují error_file_id, ale přidružují se k prázdnému souboru s nulovými bajty.
Když dojde k selhání úlohy, najdete podrobnosti o selhání ve errors
vlastnosti:
"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
},
}
Kódy chyb
Kód chyby | Definice |
---|---|
invalid_json_line |
Řádek (nebo více) ve vstupním souboru se nedá analyzovat jako platný json. Ujistěte se, že nejsou překlepy, správné levá a pravá hranatá závorka a uvozovky podle standardu JSON, a znovu odešlete požadavek. |
too_many_tasks |
Počet požadavků ve vstupním souboru překračuje maximální povolenou hodnotu 100 000. Ujistěte se, že jsou vaše celkové žádosti pod 100 000 a znovu odešlete úlohu. |
url_mismatch |
Řádek ve vstupním souboru má adresu URL, která neodpovídá zbytku řádků, nebo adresa URL zadaná ve vstupním souboru neodpovídá očekávané adrese URL koncového bodu. Ujistěte se, že jsou všechny adresy URL požadavků stejné a že odpovídají adrese URL koncového bodu přidružené k vašemu nasazení Azure OpenAI. |
model_not_found |
Název nasazení modelu Azure OpenAI zadaný ve model vlastnosti vstupního souboru nebyl nalezen.Ujistěte se, že tento název odkazuje na platné nasazení modelu Azure OpenAI. |
duplicate_custom_id |
Vlastní ID pro tento požadavek je duplikát vlastního ID v jiném požadavku. |
empty_batch |
Zkontrolujte vstupní soubor a ujistěte se, že je parametr vlastního ID jedinečný pro každý požadavek v dávce. |
model_mismatch |
Název nasazení modelu Azure OpenAI zadaný ve model vlastnosti tohoto požadavku ve vstupním souboru neodpovídá zbytku souboru.Ujistěte se, že všechny požadavky v dávkovém bodu na stejné nasazení modelu služby Azure OpenAI service ve model vlastnosti požadavku. |
invalid_request |
Schéma vstupního řádku je neplatné nebo skladová položka nasazení je neplatná. Ujistěte se, že vlastnosti požadavku ve vstupním souboru odpovídají očekávaným vstupním vlastnostem a že skladová položka nasazení Azure OpenAI je globalbatch určená pro požadavky rozhraní API batch. |
Známé problémy
- Prostředky nasazené pomocí Azure CLI nebudou fungovat v globální dávce Azure OpenAI. Důvodem je problém, kdy prostředky nasazené pomocí této metody mají subdomény koncového bodu, které tento model nedodržují
https://your-resource-name.openai.azure.com
. Alternativním řešením tohoto problému je nasazení nového prostředku Azure OpenAI pomocí jedné z dalších běžných metod nasazení, které v rámci procesu nasazení správně zpracuje nastavení subdomény.