Sdílet prostřednictvím


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

Nejnovější informace o oblastech a modelech, ve kterých se aktuálně podporuje globální dávka, najdete na stránce modelů.

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í.

Snímek obrazovky znázorňující dialogové okno nasazení modelu na portálu Azure AI Foundry se zvýrazněným typem nasazení Global-Batch

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ří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.

  1. Přihlaste se k portálu Azure AI Foundry.

  2. Vyberte prostředek Azure OpenAI, ve kterém máte k dispozici globální nasazení dávkového modelu.

  3. Vyberte úlohy> Batch a vytvořte dávkové úlohy.

    Snímek obrazovky znázorňující prostředí dávkového vytváření úloh na portálu Azure AI Foundry

  4. 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ší.

    Snímek obrazovky znázorňující prostředí pro nahrání souboru

Vytvoření dávkové úlohy

Výběrem možnosti Vytvořit spusťte dávkovou úlohu.

Snímek obrazovky s prostředím portálu Azure AI Foundry pro vytvoření dávkové úlohy

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.

Snímek obrazovky znázorňující ID dávkové úlohy pro úlohu, která právě prochází ověřením

Stav úlohy můžete sledovat v pravém podokně:

Snímek obrazovky znázorňující prostředí stavu dávkové úlohy na portálu Azure AI Foundry

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ů.

Snímek obrazovky znázorňující výstup dávkové úlohy a soubory chyb, které jsou k dispozici ke stažení

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

Snímek obrazovky znázorňující tlačítko pro zrušení dávkové úlohy na portálu Azure AI Foundry

Požadavky

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ří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, , finalizingin_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:

totalcelé čí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.
failedcelé čí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.

Viz také

  • Další informace o typech nasazení Azure OpenAI
  • Další informace o kvótách a limitech Azure OpenAI