Bagikan melalui


Mulai menggunakan penyebaran batch global Azure OpenAI

Azure OpenAI Batch API dirancang untuk menangani tugas pemrosesan skala besar dan volume tinggi secara efisien. Proses grup permintaan asinkron dengan kuota terpisah, dengan penyelesaian target 24 jam, dengan biaya 50% lebih murah daripada standar global. Dengan pemrosesan batch, daripada mengirim satu permintaan pada satu waktu Anda mengirim sejumlah besar permintaan dalam satu file. Permintaan batch global memiliki kuota token antrean terpisah yang menghindari gangguan beban kerja online Anda.

Kasus penggunaan utama meliputi:

  • Pemrosesan Data Skala Besar: Menganalisis himpunan data yang luas secara paralel dengan cepat.

  • Pembuatan Konten: Membuat teks dalam volume besar, seperti deskripsi produk atau artikel.

  • Tinjauan dan Ringkasan Dokumen: Mengotomatiskan tinjauan dan ringkasan dokumen yang panjang.

  • Automasi Dukungan Pelanggan: Tangani banyak kueri secara bersamaan untuk respons yang lebih cepat.

  • Ekstraksi dan Analisis Data: Mengekstrak dan menganalisis informasi dari sejumlah besar data yang tidak terstruktur.

  • Tugas Pemrosesan Bahasa Alami (NLP): Lakukan tugas seperti analisis sentimen atau terjemahan pada himpunan data besar.

  • Pemasaran dan Personalisasi: Hasilkan konten dan rekomendasi yang dipersonalisasi dalam skala besar.

Penting

Kami bertujuan untuk memproses permintaan batch dalam waktu 24 jam; kami tidak kedaluwarsa pekerjaan yang memakan waktu lebih lama. Anda dapat membatalkan pekerjaan kapan saja. Saat Anda membatalkan pekerjaan, pekerjaan yang tersisa dibatalkan dan pekerjaan yang sudah selesai dikembalikan. Anda akan dikenakan biaya untuk pekerjaan yang telah selesai.

Data yang disimpan saat tidak aktif tetap berada di geografi Azure yang ditunjuk, sementara data dapat diproses untuk inferensi di lokasi Azure OpenAI mana pun. Pelajari selengkapnya tentang residensi data. 

Dukungan batch global

Dukungan wilayah dan model

Batch global saat ini didukung di wilayah berikut:

Wilayah 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
canadaeast
eastus
eastus2
northcentralus
southcentralus
swedencentral
westus
westus3

Model berikut mendukung batch global:

Model Versi Format input
gpt-4o 2024-08-06 teks + gambar
gpt-4o-mini 2024-07-18 teks + gambar
gpt-4o 2024-05-13 teks + gambar
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

Lihat halaman model untuk informasi terbaru tentang wilayah/model di mana batch global saat ini didukung.

Dukungan API

Versi API
Rilis GA API terbaru: 2024-10-21
Rilis API Pratinjau Terbaru: 2024-10-01-preview

Dukungan pertama kali ditambahkan dalam: 2024-07-01-preview

Dukungan fitur

Berikut ini saat ini tidak didukung:

  • Integrasi dengan Assistants API.
  • Integrasi dengan fitur Azure OpenAI On Your Data.

Catatan

Output terstruktur sekarang didukung dengan Global Batch.

Penyebaran batch global

Di UI Studio, jenis penyebaran akan muncul sebagai Global-Batch.

Cuplikan layar yang memperlihatkan dialog penyebaran model di Azure AI Studio dengan jenis penyebaran Global-Batch disorot.

Tip

Sebaiknya aktifkan kuota dinamis untuk semua penyebaran model batch global untuk membantu menghindari kegagalan pekerjaan karena kuota token antrean yang tidak mencukup. Kuota dinamis memungkinkan penyebaran Anda secara oportunistik memanfaatkan lebih banyak kuota ketika kapasitas tambahan tersedia. Ketika kuota dinamis diatur ke nonaktif, penyebaran Anda hanya akan dapat memproses permintaan hingga batas token antrean yang ditentukan saat Anda membuat penyebaran.

Prasyarat

  • Langganan Azure - Buat langganan gratis.
  • Sumber daya Azure OpenAI dengan model jenis Global-Batch penyebaran yang disebarkan. Anda dapat merujuk ke panduan pembuatan sumber daya dan penyebaran model untuk bantuan terkait proses ini.

Menyiapkan file batch Anda

Seperti penyempurnaan, batch global menggunakan file dalam format baris JSON (.jsonl). Di bawah ini adalah beberapa contoh file dengan berbagai jenis konten yang didukung:

Format input

{"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 diperlukan untuk memungkinkan Anda mengidentifikasi permintaan batch individual mana yang sesuai dengan respons tertentu. Respons tidak akan dikembalikan dalam urutan yang identik dengan urutan yang ditentukan dalam .jsonl file batch.

model atribut harus diatur agar sesuai dengan nama penyebaran Global Batch yang ingin Anda targetkan untuk respons inferensi.

Penting

Atribut model harus diatur agar sesuai dengan nama penyebaran Global Batch yang ingin Anda targetkan untuk respons inferensi. Nama penyebaran model Global Batch yang sama harus ada di setiap baris file batch. Jika Anda ingin menargetkan penyebaran yang berbeda, Anda harus melakukannya dalam file/pekerjaan batch terpisah.

Untuk performa terbaik, sebaiknya kirimkan file besar untuk pemrosesan batch, daripada sejumlah besar file kecil hanya dengan beberapa baris di setiap file.

Membuat file input

Untuk artikel ini, kita akan membuat file bernama test.jsonl dan akan menyalin konten dari blok kode input standar di atas ke file. Anda harus memodifikasi dan menambahkan nama penyebaran batch global Anda ke setiap baris file.

Mengunggah file batch

Setelah file input Anda disiapkan, Anda harus terlebih dahulu mengunggah file untuk kemudian dapat memulai pekerjaan batch. Unggahan file dapat dilakukan baik secara terprogram atau melalui Studio.

  1. Masuk ke AI Studio.

  2. Pilih sumber daya Azure OpenAI tempat Anda memiliki penyebaran model batch global yang tersedia.

  3. Pilih Pekerjaan> batch+Buat pekerjaan batch.

    Cuplikan layar yang memperlihatkan pengalaman pembuatan pekerjaan batch di Azure AI Studio.

  4. Dari menu dropdown di bawah File unggah data>Batch pilih Unggah file dan berikan jalur untuk file yang test.jsonl dibuat di langkah> sebelumnya Berikutnya.>

    Cuplikan layar yang memperlihatkan pengalaman unggah file.

Membuat pekerjaan batch

Pilih Buat untuk memulai pekerjaan batch Anda.

Cuplikan layar membuat pekerjaan batch pengalaman antarmuka pengguna Azure Studio.

Melacak kemajuan pekerjaan batch

Setelah pekerjaan dibuat, Anda dapat memantau kemajuan pekerjaan dengan memilih ID Pekerjaan untuk pekerjaan yang terakhir dibuat. Secara default, Anda akan dibawa ke halaman status untuk pekerjaan batch yang terakhir dibuat.

Cuplikan layar yang memperlihatkan ID pekerjaan batch untuk pekerjaan yang saat ini sedang menjalani validasi.

Anda dapat melacak status pekerjaan untuk pekerjaan Anda di panel kanan:

Cuplikan layar yang memperlihatkan pengalaman status pekerjaan batch di Azure AI Studio.

Mengambil file output pekerjaan batch

Setelah pekerjaan Anda selesai atau mencapai status terminal, itu akan menghasilkan file kesalahan dan file output yang dapat diunduh untuk ditinjau dengan memilih tombol masing-masing dengan ikon panah ke bawah.

Cuplikan layar yang memperlihatkan output pekerjaan batch dan file kesalahan yang tersedia untuk diunduh.

Batalkan batch

Membatalkan batch yang sedang berlangsung. Batch akan berada dalam status cancelling hingga 10 menit, sebelum berubah ke cancelled, di mana batch akan memiliki hasil parsial (jika ada) yang tersedia dalam file output.

Cuplikan layar yang memperlihatkan tombol batalkan pekerjaan batch di Azure AI Studio.

Prasyarat

  • Langganan Azure - Buat langganan gratis.
  • Python 3.8 atau versi yang lebih baru
  • Pustaka Python berikut ini: openai
  • Jupyter Notebooks
  • Sumber daya Azure OpenAI dengan model jenis Global-Batch penyebaran yang disebarkan. Anda dapat merujuk ke panduan pembuatan sumber daya dan penyebaran model untuk bantuan terkait proses ini.

Langkah-langkah dalam artikel ini dimaksudkan untuk dijalankan secara berurutan di Jupyter Notebooks. Untuk alasan ini, kami hanya akan membuat instans klien Azure OpenAI sekali di awal contoh. Jika Anda ingin menjalankan langkah di luar urutan, Anda sering kali perlu menyiapkan klien Azure OpenAI sebagai bagian dari panggilan tersebut.

Bahkan jika Anda sudah menginstal pustaka OpenAI Python, Anda mungkin perlu meningkatkan penginstalan Anda ke versi terbaru:

!pip install openai --upgrade

Menyiapkan file batch Anda

Seperti penyempurnaan, batch global menggunakan file dalam format baris JSON (.jsonl). Di bawah ini adalah beberapa contoh file dengan berbagai jenis konten yang didukung:

Format input

{"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 diperlukan untuk memungkinkan Anda mengidentifikasi permintaan batch individual mana yang sesuai dengan respons tertentu. Respons tidak akan dikembalikan dalam urutan yang identik dengan urutan yang ditentukan dalam .jsonl file batch.

model atribut harus diatur agar sesuai dengan nama penyebaran Global Batch yang ingin Anda targetkan untuk respons inferensi.

Penting

Atribut model harus diatur agar sesuai dengan nama penyebaran Global Batch yang ingin Anda targetkan untuk respons inferensi. Nama penyebaran model Global Batch yang sama harus ada di setiap baris file batch. Jika Anda ingin menargetkan penyebaran yang berbeda, Anda harus melakukannya dalam file/pekerjaan batch terpisah.

Untuk performa terbaik, sebaiknya kirimkan file besar untuk pemrosesan batch, daripada sejumlah besar file kecil hanya dengan beberapa baris di setiap file.

Membuat file input

Untuk artikel ini kita akan membuat file bernama test.jsonl dan akan menyalin konten dari blok kode input standar di atas ke file. Anda harus memodifikasi dan menambahkan nama penyebaran batch global Anda ke setiap baris file. Simpan file ini di direktori yang sama dengan yang Anda jalankan jupyter Notebook Anda.

Mengunggah file batch

Setelah file input Anda disiapkan, Anda harus terlebih dahulu mengunggah file untuk kemudian dapat memulai pekerjaan batch. Unggahan file dapat dilakukan baik secara terprogram atau melalui Studio. Contoh ini menggunakan variabel lingkungan sebagai pengganti nilai kunci dan titik akhir. Jika Anda tidak terbiasa menggunakan variabel lingkungan dengan Python, lihat salah satu mulai cepat kami di mana proses pengaturan variabel lingkungan dalam langkah demi langkah yang dijelaskan.

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

Output:

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

Membuat pekerjaan batch

Setelah file Berhasil diunggah, Anda dapat mengirimkan file untuk pemrosesan batch.

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

Catatan

Saat ini jendela penyelesaian harus diatur ke 24 jam. Jika Anda menetapkan nilai lain selain 24 jam, pekerjaan Anda akan gagal. Pekerjaan yang memakan waktu lebih dari 24 jam akan terus dijalankan hingga dibatalkan.

Output:

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

Melacak kemajuan pekerjaan batch

Setelah berhasil membuat pekerjaan batch, Anda dapat memantau kemajuannya baik di Studio atau secara terprogram. Saat memeriksa kemajuan pekerjaan batch, sebaiknya tunggu setidaknya 60 detik di antara setiap panggilan status.

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

Output:

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

Nilai status berikut dimungkinkan:

Keadaan Keterangan
validating File input sedang divalidasi sebelum pemrosesan batch dapat dimulai.
failed File input gagal dalam proses validasi.
in_progress File input berhasil divalidasi dan batch saat ini sedang berjalan.
finalizing Batch telah selesai dan hasilnya sedang disiapkan.
completed Batch telah selesai dan hasilnya siap.
expired Batch tidak dapat diselesaikan dalam jendela waktu 24 jam.
cancelling Batch sedang cancelled (Ini mungkin memakan waktu hingga 10 menit untuk mulai berlaku.)
cancelled batchnya adalah cancelled.

Untuk memeriksa detail status pekerjaan, Anda dapat menjalankan:

print(batch_response.model_dump_json(indent=2))

Output:

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

Amati bahwa ada dan error_file_id terpisah output_file_id. error_file_id Gunakan untuk membantu men-debug masalah apa pun yang terjadi dengan pekerjaan batch Anda.

Mengambil file output pekerjaan batch

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)

Output:

Untuk brevity, kami hanya menyertakan satu respons penyelesaian obrolan output. Jika Anda mengikuti langkah-langkah dalam artikel ini, Anda harus memiliki tiga respons yang mirip dengan yang di bawah ini:

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

Perintah batch tambahan

Batalkan batch

Membatalkan batch yang sedang berlangsung. Batch akan berada dalam status cancelling hingga 10 menit, sebelum berubah ke cancelled, di mana batch akan memiliki hasil parsial (jika ada) yang tersedia dalam file output.

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

Daftar batch

Mencantumkan pekerjaan batch untuk sumber daya Azure OpenAI tertentu.

client.batches.list()

Metode daftar di pustaka Python dipaginasi.

Untuk mencantumkan semua pekerjaan:

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)

Daftar batch (Pratinjau)

Gunakan REST API untuk mencantumkan semua pekerjaan batch dengan opsi pengurutan/pemfilteran tambahan.

Dalam contoh di bawah ini kami menyediakan generate_time_filter fungsi untuk membuat pembuatan filter lebih mudah. Jika Anda tidak ingin menggunakan fungsi ini, format string filter akan terlihat seperti 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)  

Output:

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

Prasyarat

  • Langganan Azure - Buat langganan gratis.
  • Sumber daya Azure OpenAI dengan model jenis Global-Batch penyebaran yang disebarkan. Anda dapat merujuk ke panduan pembuatan sumber daya dan penyebaran model untuk bantuan terkait proses ini.

Menyiapkan file batch Anda

Seperti penyempurnaan, batch global menggunakan file dalam format baris JSON (.jsonl). Di bawah ini adalah beberapa contoh file dengan berbagai jenis konten yang didukung:

Format input

{"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 diperlukan untuk memungkinkan Anda mengidentifikasi permintaan batch individual mana yang sesuai dengan respons tertentu. Respons tidak akan dikembalikan dalam urutan yang identik dengan urutan yang ditentukan dalam .jsonl file batch.

model atribut harus diatur agar sesuai dengan nama penyebaran Global Batch yang ingin Anda targetkan untuk respons inferensi.

Penting

Atribut model harus diatur agar sesuai dengan nama penyebaran Global Batch yang ingin Anda targetkan untuk respons inferensi. Nama penyebaran model Global Batch yang sama harus ada di setiap baris file batch. Jika Anda ingin menargetkan penyebaran yang berbeda, Anda harus melakukannya dalam file/pekerjaan batch terpisah.

Untuk performa terbaik, sebaiknya kirimkan file besar untuk pemrosesan batch, daripada sejumlah besar file kecil hanya dengan beberapa baris di setiap file.

Membuat file input

Untuk artikel ini kita akan membuat file bernama test.jsonl dan akan menyalin konten dari blok kode input standar di atas ke file. Anda harus memodifikasi dan menambahkan nama penyebaran batch global Anda ke setiap baris file.

Mengunggah file batch

Setelah file input Anda disiapkan, Anda harus terlebih dahulu mengunggah file untuk kemudian dapat memulai pekerjaan batch. Unggahan file dapat dilakukan baik secara terprogram atau melalui Studio. Contoh ini menggunakan variabel lingkungan sebagai pengganti nilai kunci dan titik akhir. Jika Anda tidak terbiasa menggunakan variabel lingkungan dengan Python, lihat salah satu mulai cepat kami di mana proses pengaturan variabel lingkungan dalam langkah demi langkah yang dijelaskan.

Penting

Jika Anda menggunakan kunci API, simpan dengan aman di tempat lain, seperti di Azure Key Vault. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik.

Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan 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"

Kode di atas mengasumsikan jalur file tertentu untuk file test.jsonl Anda. Sesuaikan jalur file ini seperlunya untuk sistem lokal Anda.

Output:

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

Lacak status unggahan file

Bergantung pada ukuran file unggahan Anda, mungkin perlu waktu sebelum sepenuhnya diunggah dan diproses. Untuk memeriksa status unggahan file Anda, jalankan:

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

Output:

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

Membuat pekerjaan batch

Setelah file Berhasil diunggah, Anda dapat mengirimkan file untuk pemrosesan batch.

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

Catatan

Saat ini jendela penyelesaian harus diatur ke 24 jam. Jika Anda menetapkan nilai lain selain 24 jam, pekerjaan Anda akan gagal. Pekerjaan yang memakan waktu lebih dari 24 jam akan terus dijalankan hingga dibatalkan.

Output:

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

Melacak kemajuan pekerjaan batch

Setelah berhasil membuat pekerjaan batch, Anda dapat memantau kemajuannya baik di Studio atau secara terprogram. Saat memeriksa kemajuan pekerjaan batch, sebaiknya tunggu setidaknya 60 detik di antara setiap panggilan status.

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

Output:

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

Nilai status berikut dimungkinkan:

Keadaan Keterangan
validating File input sedang divalidasi sebelum pemrosesan batch dapat dimulai.
failed File input gagal dalam proses validasi.
in_progress File input berhasil divalidasi dan batch saat ini sedang berjalan.
finalizing Batch telah selesai dan hasilnya sedang disiapkan.
completed Batch telah selesai dan hasilnya siap.
expired Batch tidak dapat diselesaikan dalam jendela waktu 24 jam.
cancelling Batch sedang ( cancelled Ini dapat memakan waktu hingga 10 menit untuk mulai berlaku.)
cancelled batchnya adalah cancelled.

Mengambil file output pekerjaan batch

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

Perintah batch tambahan

Batalkan batch

Membatalkan batch yang sedang berlangsung. Batch akan berada dalam status cancelling hingga 10 menit, sebelum berubah ke cancelled, di mana batch akan memiliki hasil parsial (jika ada) yang tersedia dalam file output.

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" 

Daftar batch

Mencantumkan pekerjaan batch yang ada untuk sumber daya Azure OpenAI tertentu.

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

Panggilan API daftar dipaginasi. Respons berisi boolean has_more untuk menunjukkan kapan ada lebih banyak hasil untuk melakukan iterasi.

Daftar batch (Pratinjau)

Gunakan REST API untuk mencantumkan semua pekerjaan batch dengan opsi pengurutan/pemfilteran tambahan.

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"

Untuk menghindari ruang kesalahan URL rejected: Malformed input to a URL function diganti dengan %20.

Batas batch global

Nama Batas Nilai Batas
File maks per sumber daya 500
Ukuran file input maks 200 MB
Permintaan maks per file 100.000

Kuota batch global

Tabel memperlihatkan batas kuota batch. Nilai kuota untuk batch global diwakili dalam hal token antrean. Saat Anda mengirimkan file untuk pemrosesan batch, jumlah token yang ada dalam file dihitung. Hingga pekerjaan batch mencapai status terminal, token tersebut akan dihitung terhadap batas token antrean total Anda.

Model Perjanjian Enterprise Default Langganan berbasis kartu kredit bulanan Langganan MSDN Azure for Students, Uji Coba Gratis
gpt-4o 5 B 200 M 50 M 90 K T/A
gpt-4o-mini 15 B 1 B 50 M 90 K T/A
gpt-4-turbo 300 M 80 M 40 M 90 K T/A
gpt-4 150 M 30 M 5 M 100 K T/A
gpt-35-turbo 10 B 1 B 100 M 2 M 50 rb

B = miliar | M = juta | K = ribu

Objek batch

Properti Tipe Definisi
id string
object string batch
endpoint string Titik akhir API yang digunakan oleh batch
errors object
input_file_id string ID file input untuk batch
completion_window string Jangka waktu di mana batch harus diproses
status string Status batch saat ini. Nilai yang mungkin: validating, , failed, finalizingin_progress, completed, expired, cancelling, cancelled.
output_file_id string ID file yang berisi output permintaan yang berhasil dijalankan.
error_file_id string ID file yang berisi output permintaan dengan kesalahan.
created_at Integer Tanda waktu ketika batch ini dibuat (dalam epoch unix).
in_progress_at Integer Tanda waktu ketika batch ini mulai berkembang (dalam epoch unix).
expires_at Integer Tanda waktu ketika batch ini akan kedaluwarsa (dalam epoch unix).
finalizing_at Integer Tanda waktu ketika batch ini mulai diselesaikan (dalam epoch unix).
completed_at Integer Tanda waktu ketika batch ini mulai diselesaikan (dalam epoch unix).
failed_at Integer Tanda waktu ketika batch ini gagal (dalam epoch unix)
expired_at Integer Tanda waktu ketika batch ini kedaluwarsa (dalam epoch unix).
cancelling_at Integer Tanda waktu ketika batch ini dimulai cancelling (dalam epoch unix).
cancelled_at Integer Tanda waktu ketika batch ini ( cancelled dalam epoch unix).
request_counts object Struktur objek:

totalInteger
Jumlah total permintaan dalam batch.
completed Integer
Jumlah permintaan dalam batch yang telah berhasil diselesaikan.
failedInteger
Jumlah permintaan dalam batch yang telah gagal.
metadata peta Sekumpulan pasangan kunci-nilai yang dapat dilampirkan ke batch. Properti ini dapat berguna untuk menyimpan informasi tambahan tentang batch dalam format terstruktur.

Pertanyaan Umum (FAQ)

Dapatkah gambar digunakan dengan API batch?

Kemampuan ini terbatas pada model multi-modal tertentu. Saat ini hanya GPT-4o yang mendukung gambar sebagai bagian dari permintaan batch. Gambar dapat disediakan sebagai input baik melalui url gambar atau representasi gambar yang dikodekan base64. Gambar untuk batch saat ini tidak didukung dengan GPT-4 Turbo.

Dapatkah saya menggunakan API batch dengan model yang disempurnakan?

Saat ini alamat IP statis tidak didukung.

Dapatkah saya menggunakan API batch untuk menyematkan model?

Saat ini alamat IP statis tidak didukung.

Apakah pemfilteran konten berfungsi dengan penyebaran Global Batch?

Ya. Mirip dengan jenis penyebaran lainnya, Anda dapat membuat filter konten dan mengaitkannya dengan jenis penyebaran Global Batch.

Dapatkah saya meminta kuota tambahan?

Ya, dari halaman kuota di UI Studio. Alokasi kuota default dapat ditemukan di artikel kuota dan batasan.

Apa yang terjadi jika API tidak menyelesaikan permintaan saya dalam jangka waktu 24 jam?

Kami bertujuan untuk memproses permintaan ini dalam waktu 24 jam; kami tidak kedaluwarsa pekerjaan yang memakan waktu lebih lama. Anda dapat membatalkan pekerjaan kapan saja. Saat Anda membatalkan pekerjaan, pekerjaan yang tersisa dibatalkan dan pekerjaan yang sudah selesai dikembalikan. Anda akan dikenakan biaya untuk pekerjaan yang telah selesai.

Berapa banyak permintaan yang dapat saya antre menggunakan batch?

Namun, tidak ada batas tetap pada jumlah permintaan yang dapat Anda batch, namun, itu akan bergantung pada kuota token antrean Anda. Kuota token antrean Anda mencakup jumlah maksimum token input yang dapat Anda antre pada satu waktu.

Setelah permintaan batch Anda selesai, batas laju batch Anda diatur ulang, karena token input Anda dibersihkan. Batas tergantung pada jumlah permintaan global dalam antrean. Jika antrean API Batch memproses batch Anda dengan cepat, batas laju batch Anda diatur ulang lebih cepat.

Pemecahan Masalah

Pekerjaan berhasil ketika status adalah Completed. Pekerjaan yang berhasil masih akan menghasilkan error_file_id, tetapi akan dikaitkan dengan file kosong dengan nol byte.

Saat kegagalan pekerjaan terjadi, Anda akan menemukan detail tentang kegagalan di errors properti:

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

Kode kesalahan

Kode kesalahan Definisi
invalid_json_line Baris (atau beberapa) dalam file input Anda tidak dapat diurai sebagai json yang valid.

Pastikan tidak ada kesalahan ketik, tanda kurung buka dan tutup yang tepat, dan tanda kutip sesuai standar JSON, dan kirim ulang permintaan.
too_many_tasks Jumlah permintaan dalam file input melebihi nilai maksimum yang diizinkan sebesar 100.000.

Pastikan total permintaan Anda di bawah 100.000 dan kirim ulang pekerjaan.
url_mismatch Baris dalam file input Anda memiliki URL yang tidak cocok dengan baris lainnya, atau URL yang ditentukan dalam file input tidak cocok dengan URL titik akhir yang diharapkan.

Pastikan semua URL permintaan sama, dan url tersebut cocok dengan URL titik akhir yang terkait dengan penyebaran Azure OpenAI Anda.
model_not_found Nama penyebaran model Azure OpenAI yang ditentukan dalam model properti file input tidak ditemukan.

Pastikan nama ini menunjuk ke penyebaran model Azure OpenAI yang valid.
duplicate_custom_id ID kustom untuk permintaan ini adalah duplikat ID kustom dalam permintaan lain.
empty_batch Silakan periksa file input Anda untuk memastikan bahwa parameter ID kustom unik untuk setiap permintaan dalam batch.
model_mismatch Nama penyebaran model Azure OpenAI yang ditentukan dalam model properti permintaan ini dalam file input tidak cocok dengan file lainnya.

Pastikan bahwa semua permintaan dalam titik batch ke penyebaran model AOAI yang sama di model properti permintaan.
invalid_request Skema baris input tidak valid atau SKU penyebaran tidak valid.

Pastikan properti permintaan dalam file input Anda cocok dengan properti input yang diharapkan, dan bahwa SKU penyebaran Azure OpenAI adalah globalbatch untuk permintaan API batch.

Masalah umum

  • Sumber daya yang disebarkan dengan Azure CLI tidak akan berfungsi secara langsung dengan batch global Azure OpenAI. Hal ini disebabkan oleh masalah di mana sumber daya yang disebarkan menggunakan metode ini memiliki subdomain titik akhir yang tidak mengikuti https://your-resource-name.openai.azure.com pola. Solusi untuk masalah ini adalah menyebarkan sumber daya Azure OpenAI baru menggunakan salah satu metode penyebaran umum lainnya yang akan menangani penyiapan subdomain dengan benar sebagai bagian dari proses penyebaran.

Lihat juga

  • Pelajari selengkapnya tentang jenis penyebaran Azure OpenAI
  • Pelajari selengkapnya tentang kuota dan batasan Azure OpenAI