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
.
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.
Masuk ke AI Studio.
Pilih sumber daya Azure OpenAI tempat Anda memiliki penyebaran model batch global yang tersedia.
Pilih Pekerjaan> batch+Buat pekerjaan batch.
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.>
Membuat pekerjaan batch
Pilih Buat untuk memulai pekerjaan batch Anda.
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.
Anda dapat melacak status pekerjaan untuk pekerjaan Anda di panel kanan:
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.
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.
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 , finalizing in_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:total Integer Jumlah total permintaan dalam batch. completed Integer Jumlah permintaan dalam batch yang telah berhasil diselesaikan. failed Integer 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.