Aracılığıyla paylaş


Azure OpenAI genel toplu iş dağıtımlarını kullanmaya başlama

Azure OpenAI Batch API'si, büyük ölçekli ve yüksek hacimli işleme görevlerini verimli bir şekilde işlemek için tasarlanmıştır. Genel standarttan %50 daha az maliyetle, 24 saatlik hedef geri dönüş ile ayrı kotaya sahip zaman uyumsuz istek gruplarını işleyin. Toplu işlemle, aynı anda bir istek göndermek yerine tek bir dosyada çok sayıda istek gönderirsiniz. Genel toplu iş istekleri, çevrimiçi iş yüklerinizin kesintiye uğramasını önleyerek ayrı bir sıralanmış belirteç kotası sunar.

Temel kullanım örnekleri şunlardır:

  • Büyük Ölçekli Veri İşleme: Kapsamlı veri kümelerini paralel olarak hızla analiz edin.

  • İçerik Oluşturma: Ürün açıklamaları veya makaleler gibi büyük hacimli metinler oluşturun.

  • Belge Gözden Geçirme ve Özetleme: Uzun belgelerin gözden geçirilmesini ve özetlemeyi otomatikleştirin.

  • Müşteri Desteği Otomasyonu: Daha hızlı yanıtlar için aynı anda çok sayıda sorgu işleyin.

  • Veri Ayıklama ve Çözümleme: Çok büyük miktarlarda yapılandırılmamış veriden bilgi ayıklayın ve analiz edin.

  • Doğal Dil İşleme (NLP) Görevleri: Büyük veri kümelerinde yaklaşım analizi veya çeviri gibi görevler gerçekleştirin.

  • Pazarlama ve Kişiselleştirme: Büyük ölçekte kişiselleştirilmiş içerik ve öneriler oluşturun.

Önemli

Toplu istekleri 24 saat içinde işlemeyi hedefliyoruz; daha uzun sürecek işlerin süresi dolmaz. İşi istediğiniz zaman iptal edebilirsiniz. İşi iptal ettiğinizde kalan tüm çalışmalar iptal edilir ve tamamlanmış tüm çalışmalar döndürülür. Tamamlanan tüm çalışmalar için ücretlendirilirsiniz.

Beklemede depolanan veriler belirlenen Azure coğrafyasında kalırken, veriler herhangi bir Azure OpenAI konumunda çıkarım için işlenebilir. Veri yerleşimi hakkında daha fazla bilgi edinin. 

Genel toplu iş desteği

Bölge ve model desteği

Genel toplu iş şu anda aşağıdaki bölgelerde desteklenmektedir:

  • Doğu ABD
  • Batı ABD
  • Orta İsveç

Aşağıdaki modeller genel toplu işlemi destekler:

Model Sürüm Giriş biçimi
gpt-4o 2024-08-06 metin + resim
gpt-4o-mini 2024-07-18 metin + resim
gpt-4o 2024-05-13 metin + resim
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

Genel toplu işleminin şu anda desteklendiği bölgeler/modeller hakkında en güncel bilgiler için modeller sayfasına bakın.

API desteği

API Sürümü
En son GA API sürümü: 2024-10-21
En son Önizleme API sürümü: 2024-10-01-preview

Destek ilk olarak eklendi: 2024-07-01-preview

Özellik desteği

Şu anda aşağıdakiler desteklenmiyor:

  • Yardımcılar API'siyle tümleştirme.
  • Verilerinizde Azure OpenAI özelliğiyle tümleştirme.

Not

Yapılandırılmış çıkışlar artık Genel Batch ile desteklenmektedir.

Genel toplu dağıtım

Studio kullanıcı arabiriminde dağıtım türü olarak Global-Batchgörünür.

Azure AI Studio'da Genel Toplu dağıtım türü vurgulanmış şekilde model dağıtımı iletişim kutusunu gösteren ekran görüntüsü.

İpucu

Sıraya alınan belirteç kotasının yetersiz olması nedeniyle iş hatalarını önlemeye yardımcı olmak için tüm genel toplu iş modeli dağıtımları için dinamik kotayı etkinleştirmenizi öneririz. Dinamik kota, ek kapasite kullanılabilir olduğunda dağıtımınızın fırsatçı olarak daha fazla kotadan yararlanmasını sağlar. Dinamik kota kapalı olarak ayarlandığında, dağıtımınız yalnızca dağıtımı oluşturduğunuzda tanımlanan sıralanmış belirteç sınırına kadar olan istekleri işleyebilecektir.

Önkoşullar

Toplu iş dosyanızı hazırlama

Genel toplu işlem, ince ayarlama gibi dosyaları da JSON satırları (.jsonl) biçiminde kullanır. Aşağıda desteklenen içerik türleri farklı olan bazı örnek dosyalar verilmişti:

Giriş biçimi

{"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, belirli bir yanıta karşılık gelen tek tek toplu iş isteğini belirlemenize olanak tanımak için gereklidir. Yanıtlar, toplu iş dosyasında tanımlanan .jsonl siparişle aynı sırada döndürülemez.

model özniteliği, çıkarım yanıtları için hedeflemek istediğiniz Genel Batch dağıtımının adıyla eşleşecek şekilde ayarlanmalıdır.

Önemli

Öznitelik, model çıkarım yanıtları için hedeflemek istediğiniz Genel Batch dağıtımının adıyla eşleşecek şekilde ayarlanmalıdır. Toplu iş dosyasının her satırında aynı Genel Batch modeli dağıtım adı bulunmalıdır. Farklı bir dağıtımı hedeflemek istiyorsanız, bunu ayrı bir toplu iş dosyasında/işinde yapmanız gerekir.

En iyi performans için, her dosyada yalnızca birkaç satır bulunan çok sayıda küçük dosya yerine toplu işlem için büyük dosyalar göndermenizi öneririz.

Giriş dosyası oluşturma

Bu makale için adlı test.jsonl bir dosya oluşturacağız ve yukarıdaki standart giriş kodu bloğundaki içeriği dosyaya kopyalayacağız. Genel toplu dağıtım adınızı değiştirmeniz ve dosyanın her satırına eklemeniz gerekir.

Toplu iş dosyasını karşıya yükleme

Giriş dosyanız hazırlandıktan sonra bir toplu iş başlatabilmek için önce dosyayı karşıya yüklemeniz gerekir. Dosya yükleme işlemi hem program aracılığıyla hem de Studio aracılığıyla yapılabilir.

  1. AI Studio'da oturum açın.

  2. Genel toplu iş modeli dağıtımına sahip olduğunuz Azure OpenAI kaynağını seçin.

  3. Toplu işler+Toplu iş> oluştur'u seçin.

    Azure AI Studio'da toplu iş oluşturma deneyimini gösteren ekran görüntüsü.

  4. Batch verileri>Dosyaları> karşıya yükle altındaki açılan listeden Dosyayı karşıya yükle'yi seçin ve sonraki adımda >oluşturulan dosyanın yolunu test.jsonl belirtin.

    Karşıya dosya yükleme deneyimini gösteren ekran görüntüsü.

Toplu iş oluşturma

Toplu işleminizi başlatmak için Oluştur'u seçin.

Toplu iş oluşturma Azure Studio kullanıcı arabirimi deneyiminin ekran görüntüsü.

Toplu iş ilerleme durumunu izleme

İşiniz oluşturulduktan sonra, en son oluşturulan işin İş Kimliğini seçerek işin ilerleme durumunu izleyebilirsiniz. Varsayılan olarak, en son oluşturduğunuz toplu işin durum sayfasına yönlendirilirsiniz.

Şu anda doğrulamada olan bir işin toplu iş kimliğini gösteren ekran görüntüsü.

İşinizin durumunu sağ bölmeden izleyebilirsiniz:

Azure AI Studio'da toplu iş durumu deneyimini gösteren ekran görüntüsü.

Toplu iş çıktı dosyasını alma

İşiniz tamamlandıktan veya terminal durumuna ulaştıktan sonra, aşağı ok simgesiyle ilgili düğme seçilerek gözden geçirilme amacıyla indirilebilen bir hata dosyası ve bir çıkış dosyası oluşturur.

toplu iş çıktısını ve indirilebilecek hata dosyalarını gösteren ekran görüntüsü.

Toplu işlemi iptal et

Devam eden toplu işlemi iptal eder. Toplu işlem, olarak değiştirilmeden cancelledönce 10 dakikaya kadar durumda cancelling olur ve burada çıktı dosyasında kısmi sonuçlar (varsa) bulunur.

Azure AI Studio'da toplu iş iptal düğmesini gösteren ekran görüntüsü.

Önkoşullar

Bu makaledeki adımların Jupyter Notebooks'ta sıralı olarak çalıştırılması amaçlanmıştır. Bu nedenle örneklerin başında Azure OpenAI istemcisinin örneğini yalnızca bir kez oluşturacağız. Sıra dışı bir adım çalıştırmak istiyorsanız genellikle bu çağrının bir parçası olarak bir Azure OpenAI istemcisi ayarlamanız gerekir.

OpenAI Python kitaplığı zaten yüklü olsa bile yüklemenizi en son sürüme yükseltmeniz gerekebilir:

!pip install openai --upgrade

Toplu iş dosyanızı hazırlama

Genel toplu işlem, ince ayarlama gibi dosyaları da JSON satırları (.jsonl) biçiminde kullanır. Aşağıda desteklenen içerik türleri farklı olan bazı örnek dosyalar verilmişti:

Giriş biçimi

{"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, belirli bir yanıta karşılık gelen tek tek toplu iş isteğini belirlemenize olanak tanımak için gereklidir. Yanıtlar, toplu iş dosyasında tanımlanan .jsonl siparişle aynı sırada döndürülemez.

model özniteliği, çıkarım yanıtları için hedeflemek istediğiniz Genel Batch dağıtımının adıyla eşleşecek şekilde ayarlanmalıdır.

Önemli

Öznitelik, model çıkarım yanıtları için hedeflemek istediğiniz Genel Batch dağıtımının adıyla eşleşecek şekilde ayarlanmalıdır. Toplu iş dosyasının her satırında aynı Genel Batch modeli dağıtım adı bulunmalıdır. Farklı bir dağıtımı hedeflemek istiyorsanız, bunu ayrı bir toplu iş dosyasında/işinde yapmanız gerekir.

En iyi performans için, her dosyada yalnızca birkaç satır bulunan çok sayıda küçük dosya yerine toplu işlem için büyük dosyalar göndermenizi öneririz.

Giriş dosyası oluşturma

Bu makale için adlı test.jsonl bir dosya oluşturacağız ve yukarıdaki standart giriş kodu bloğundaki içerikleri dosyaya kopyalayacağız. Genel toplu dağıtım adınızı değiştirmeniz ve dosyanın her satırına eklemeniz gerekir. Bu dosyayı Jupyter Notebook'unuzu yürüttüğünüz dizine kaydedin.

Toplu iş dosyasını karşıya yükleme

Giriş dosyanız hazırlandıktan sonra bir toplu iş başlatabilmek için önce dosyayı karşıya yüklemeniz gerekir. Dosya yükleme işlemi hem program aracılığıyla hem de Studio aracılığıyla yapılabilir. Bu örnekte anahtar ve uç nokta değerleri yerine ortam değişkenleri gerçekleştirilir. Python ile ortam değişkenlerini kullanmayı bilmiyorsanız, ortam değişkenlerini ayarlama işleminin adım adım açıklandığı hızlı başlangıçlarımızdan birine bakın.

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

Çıktı:

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

Toplu iş oluşturma

Dosyanız başarıyla karşıya yüklendikten sonra dosyayı toplu işlem için gönderebilirsiniz.

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

Not

Şu anda tamamlanma penceresi 24h olarak ayarlanmalıdır. 24h dışında bir değer ayarlarsanız işiniz başarısız olur. 24 saatten uzun süren işler iptal edilene kadar yürütülmeye devam eder.

Çıktı:

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

Toplu iş ilerleme durumunu izleme

Toplu işi başarıyla oluşturduktan sonra, ilerleme durumunu Studio'da veya programlı olarak izleyebilirsiniz. Toplu iş ilerleme durumunu denetlerken her durum çağrısı arasında en az 60 saniye beklemenizi öneririz.

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

Çıktı:

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

Aşağıdaki durum değerleri mümkündür:

Statü Açıklama
validating Toplu işlem başlamadan önce giriş dosyası doğrulanıyor.
failed Giriş dosyası doğrulama işlemi başarısız oldu.
in_progress Giriş dosyası başarıyla doğrulandı ve toplu iş şu anda çalışıyor.
finalizing Toplu işlem tamamlandı ve sonuçlar hazırlanıyor.
completed Toplu iş tamamlandı ve sonuçlar hazır.
expired Toplu işlem 24 saatlik zaman penceresinde tamamlanmadı.
cancelling Toplu işlem yapılıyor cancelled (Bu işlem 10 dakika kadar sürebilir.)
cancelled toplu iş şeklindeydi cancelled.

İş durumu ayrıntılarını incelemek için şunu çalıştırabilirsiniz:

print(batch_response.model_dump_json(indent=2))

Çıktı:

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

Hem hem de error_file_id ayrı output_file_idbir olduğunu gözlemleyin. Toplu işinizde oluşan sorunların hatalarını ayıklamaya yardımcı olması için öğesini error_file_id kullanın.

Toplu iş çıktı dosyasını alma

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)

Çıktı:

Kısa bir süre için yalnızca çıkışın tek bir sohbet tamamlama yanıtını dahil ediyoruz. Bu makaledeki adımları izlerseniz aşağıdakine benzer üç yanıtınız olmalıdır:

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

Ek toplu iş komutları

Toplu işlemi iptal et

Devam eden toplu işlemi iptal eder. Toplu işlem, olarak değiştirilmeden cancelledönce 10 dakikaya kadar durumda cancelling olur ve burada çıktı dosyasında kısmi sonuçlar (varsa) bulunur.

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

Toplu işlemi listeleme

Belirli bir Azure OpenAI kaynağı için toplu işleri listeleyin.

client.batches.list()

Python kitaplığındaki liste yöntemleri sayfalandırılmıştır.

Tüm işleri listelemek için:

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)

Toplu işlemi listeleme (Önizleme)

Tüm toplu işleri ek sıralama/filtreleme seçenekleriyle listelemek için REST API'sini kullanın.

Aşağıdaki örneklerde, filtreyi oluşturma işlemini generate_time_filter kolaylaştırmak için işlevini sağlıyoruz. Bu işlevi kullanmak istemiyorsanız, filtre dizesinin biçimi gibi created_at gt 1728860560 and status eq 'Completed'görünür.

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)  

Çıktı:

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

Önkoşullar

Toplu iş dosyanızı hazırlama

Genel toplu işlem, ince ayarlama gibi dosyaları da JSON satırları (.jsonl) biçiminde kullanır. Aşağıda desteklenen içerik türleri farklı olan bazı örnek dosyalar verilmişti:

Giriş biçimi

{"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, belirli bir yanıta karşılık gelen tek tek toplu iş isteğini belirlemenize olanak tanımak için gereklidir. Yanıtlar, toplu iş dosyasında tanımlanan .jsonl siparişle aynı sırada döndürülemez.

model özniteliği, çıkarım yanıtları için hedeflemek istediğiniz Genel Batch dağıtımının adıyla eşleşecek şekilde ayarlanmalıdır.

Önemli

Öznitelik, model çıkarım yanıtları için hedeflemek istediğiniz Genel Batch dağıtımının adıyla eşleşecek şekilde ayarlanmalıdır. Toplu iş dosyasının her satırında aynı Genel Batch modeli dağıtım adı bulunmalıdır. Farklı bir dağıtımı hedeflemek istiyorsanız, bunu ayrı bir toplu iş dosyasında/işinde yapmanız gerekir.

En iyi performans için, her dosyada yalnızca birkaç satır bulunan çok sayıda küçük dosya yerine toplu işlem için büyük dosyalar göndermenizi öneririz.

Giriş dosyası oluşturma

Bu makale için adlı test.jsonl bir dosya oluşturacağız ve yukarıdaki standart giriş kodu bloğundaki içerikleri dosyaya kopyalayacağız. Genel toplu dağıtım adınızı değiştirmeniz ve dosyanın her satırına eklemeniz gerekir.

Toplu iş dosyasını karşıya yükleme

Giriş dosyanız hazırlandıktan sonra bir toplu iş başlatabilmek için önce dosyayı karşıya yüklemeniz gerekir. Dosya yükleme işlemi hem program aracılığıyla hem de Studio aracılığıyla yapılabilir. Bu örnekte anahtar ve uç nokta değerleri yerine ortam değişkenleri gerçekleştirilir. Python ile ortam değişkenlerini kullanmayı bilmiyorsanız, ortam değişkenlerini ayarlama işleminin adım adım açıklandığı hızlı başlangıçlarımızdan birine bakın.

Önemli

API anahtarı kullanıyorsanız, bunu Azure Key Vault gibi başka bir yerde güvenli bir şekilde depolayın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin.

Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz . Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.

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"

Yukarıdaki kod, test.jsonl dosyanız için belirli bir dosya yolu olduğunu varsayar. Bu dosya yolunu yerel sisteminiz için gerektiği gibi ayarlayın.

Çıktı:

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

Dosya karşıya yükleme durumunu izleme

Karşıya yükleme dosyanızın boyutuna bağlı olarak, dosyanın tamamen karşıya yüklenmesi ve işlenmesi biraz zaman alabilir. Dosya karşıya yükleme durumunuzu denetlemek için şu komutu çalıştırın:

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

Çıktı:

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

Toplu iş oluşturma

Dosyanız başarıyla karşıya yüklendikten sonra dosyayı toplu işlem için gönderebilirsiniz.

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

Not

Şu anda tamamlanma penceresi 24h olarak ayarlanmalıdır. 24h dışında bir değer ayarlarsanız işiniz başarısız olur. 24 saatten uzun süren işler iptal edilene kadar yürütülmeye devam eder.

Çıktı:

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

Toplu iş ilerleme durumunu izleme

Toplu işi başarıyla oluşturduktan sonra, ilerleme durumunu Studio'da veya programlı olarak izleyebilirsiniz. Toplu iş ilerleme durumunu denetlerken her durum çağrısı arasında en az 60 saniye beklemenizi öneririz.

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

Çıktı:

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

Aşağıdaki durum değerleri mümkündür:

Statü Açıklama
validating Toplu işlem başlamadan önce giriş dosyası doğrulanıyor.
failed Giriş dosyası doğrulama işlemi başarısız oldu.
in_progress Giriş dosyası başarıyla doğrulandı ve toplu iş şu anda çalışıyor.
finalizing Toplu işlem tamamlandı ve sonuçlar hazırlanıyor.
completed Toplu iş tamamlandı ve sonuçlar hazır.
expired Toplu işlem 24 saatlik zaman penceresinde tamamlanmadı.
cancelling Toplu işlem şu anda yapılıyor cancelled (Bu işlem 10 dakika kadar sürebilir.)
cancelled toplu iş şeklindeydi cancelled.

Toplu iş çıktı dosyasını alma

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

Ek toplu iş komutları

Toplu işlemi iptal et

Devam eden toplu işlemi iptal eder. Toplu işlem, olarak değiştirilmeden cancelledönce 10 dakikaya kadar durumda cancelling olur ve burada çıktı dosyasında kısmi sonuçlar (varsa) bulunur.

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" 

Toplu işlemi listeleme

Belirli bir Azure OpenAI kaynağı için mevcut toplu işleri listeleyin.

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

Liste API çağrısı sayfalandırılmıştır. Yanıt, yinelemek için daha fazla sonuç olduğunda göstermek için bir boole has_more değeri içerir.

Toplu işlemi listeleme (Önizleme)

Tüm toplu işleri ek sıralama/filtreleme seçenekleriyle listelemek için REST API'sini kullanı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"

Hata URL rejected: Malformed input to a URL function alanlarının ile %20değiştirilmesini önlemek için.

Genel toplu iş sınırları

Sınır Adı Sınır Değeri
Kaynak başına en fazla dosya sayısı 500
Maksimum giriş dosyası boyutu 200 MB
Dosya başına en fazla istek sayısı 100.000

Genel toplu iş kotası

Tabloda toplu iş kotası sınırı gösterilir. Genel toplu iş için kota değerleri, sıralanmış belirteçler açısından temsil edilir. Toplu işlem için bir dosya gönderdiğinizde, dosyada bulunan belirteçlerin sayısı sayılır. Toplu iş terminal durumuna ulaşana kadar, bu belirteçler toplam sıralanmış belirteç sınırınıza göre sayılır.

Model Kurumsal anlaşma Varsayılan Aylık kredi kartı tabanlı abonelikler MSDN abonelikleri Öğrenciler için Azure, Ücretsiz Denemeler
gpt-4o 5 B 200 M 50 M 90 K Yok
gpt-4o-mini 15 B 1 B 50 M 90 K Yok
gpt-4-turbo 300 M 80 M 40 M 90 K Yok
gpt-4 150 M 30 M 5 M 100 K Yok
gpt-35-turbo 10 B 1 B 100 M 2 M 50 K

B = milyar | M = milyon | K = bin

Batch nesnesi

Özellik Tür Tanım
id Dize
object Dize batch
endpoint Dize Toplu işlem tarafından kullanılan API uç noktası
errors nesne
input_file_id Dize Toplu iş için giriş dosyasının kimliği
completion_window Dize Toplu işlemin içinde işlenmesi gereken zaman dilimi
status Dize Toplu işlemin geçerli durumu. Olası değerler: , , , , , completed, expired, cancelling. cancelledfinalizingin_progressfailedvalidating
output_file_id Dize Başarıyla yürütülen isteklerin çıkışlarını içeren dosyanın kimliği.
error_file_id Dize Hata içeren isteklerin çıkışlarını içeren dosyanın kimliği.
created_at integer Bu toplu iş oluşturulduğunda bir zaman damgası (unix dönemlerinde).
in_progress_at integer Bu toplu iş ilerlemeye başladığında bir zaman damgası (unix dönemlerinde).
expires_at integer Bu toplu iş süresinin dolacağı zaman damgası (unix dönemlerinde).
finalizing_at integer Bu toplu işlemi sonlandırmaya başladığı zaman damgası (unix dönemlerinde).
completed_at integer Bu toplu işlemi sonlandırmaya başladığı zaman damgası (unix dönemlerinde).
failed_at integer Bu toplu iş başarısız olduğunda bir zaman damgası (unix dönemlerinde)
expired_at integer Bu toplu iş süresinin dolduğu zaman damgası (unix dönemlerinde).
cancelling_at integer Bu toplu iş başlatıldığında cancelling bir zaman damgası (unix dönemlerinde).
cancelled_at integer Bu toplu iş cancelled olduğu zaman damgası (unix dönemlerinde).
request_counts nesne Nesne yapısı:

totaltam sayı
Toplu iş içindeki toplam istek sayısı.
completed tam sayı
Toplu işlemdeki başarıyla tamamlanan isteklerin sayısı.
failedtam sayı
Toplu işlemdeki başarısız olan istek sayısı.
metadata map Toplu işe eklenebilen anahtar-değer çiftleri kümesi. Bu özellik, toplu iş hakkındaki ek bilgileri yapılandırılmış biçimde depolamak için yararlı olabilir.

Sık sorulan sorular (SSS)

Görüntüler toplu iş API'siyle kullanılabilir mi?

Bu özellik belirli çoklu modal modellerde sınırlıdır. Şu anda toplu istekler kapsamında yalnızca GPT-4o görüntüleri desteklemektedir. Görüntüler, görüntü URL'si veya görüntünün base64 kodlanmış gösterimi aracılığıyla giriş olarak sağlanabilir. Toplu iş görüntüleri şu anda GPT-4 Turbo ile desteklenmiyor.

Batch API'sini ince ayarlı modellerle kullanabilir miyim?

Bu işlem şu anda desteklenmiyor.

Ekleme modelleri için toplu iş API'sini kullanabilir miyim?

Bu işlem şu anda desteklenmiyor.

İçerik filtreleme Genel Batch dağıtımıyla çalışır mı?

Evet. Diğer dağıtım türlerine benzer şekilde, içerik filtreleri oluşturabilir ve bunları Genel Batch dağıtım türüyle ilişkilendirebilirsiniz.

Ek kota isteyebilir miyim?

Evet, Studio kullanıcı arabirimindeki kota sayfasından. Varsayılan kota ayırma, kota ve sınırlar makalesinde bulunabilir.

API isteğimi 24 saat içinde tamamlamazsa ne olur?

Bu istekleri 24 saat içinde işlemeyi hedefliyoruz; daha uzun sürecek işlerin süresi dolmaz. İşi istediğiniz zaman iptal edebilirsiniz. İşi iptal ettiğinizde kalan tüm çalışmalar iptal edilir ve tamamlanmış tüm çalışmalar döndürülür. Tamamlanan tüm çalışmalar için ücretlendirilirsiniz.

Toplu iş kullanarak kaç istek kuyruğa aabilirim?

Toplu iş yapabileceğiniz istek sayısı üzerinde sabit bir sınır yoktur, ancak bu, sıralanan belirteç kotanıza bağlıdır. Sıralanan belirteç kotanız, bir kerede sıralayabileceğiniz en fazla giriş belirteci sayısını içerir.

Toplu iş isteğiniz tamamlandıktan sonra, giriş belirteçleriniz temizlendiğinden toplu iş hızı sınırınız sıfırlanır. Sınır, kuyruktaki genel isteklerin sayısına bağlıdır. Batch API kuyruğu toplu işlemlerinizi hızlı bir şekilde işlerse toplu iş hızı sınırınız daha hızlı sıfırlanır.

Sorun giderme

olduğunda bir iş başarılı status olur Completed. Başarılı işler yine de bir error_file_id oluşturur, ancak sıfır bayt içeren boş bir dosyayla ilişkilendirilecektir.

bir iş hatası oluştuğunda, hatayla ilgili ayrıntıları özelliğinde errors bulabilirsiniz:

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

Hata kodları

Hata kodu Tanım
invalid_json_line Giriş dosyanızdaki bir satır (veya birden çok) geçerli json olarak ayrıştırılamadı.

Lütfen JSON standardına göre yazım hatası, düzgün açma ve kapatma köşeli ayraçları ve tırnak işaretleri olmadığından emin olun ve isteği yeniden gönderin.
too_many_tasks Giriş dosyasındaki istek sayısı izin verilen en fazla 100.000 değerini aşıyor.

Lütfen toplam isteklerinizin 100.000'in altında olduğundan emin olun ve işi yeniden gönderin.
url_mismatch Giriş dosyanızdaki bir satırın kalan satırlarla eşleşmeyen bir URL'si var veya giriş dosyasında belirtilen URL beklenen uç nokta URL'si ile eşleşmiyor.

Lütfen tüm istek URL'lerinin aynı olduğundan ve Bunların Azure OpenAI dağıtımınızla ilişkili uç nokta URL'si ile eşleştiğinden emin olun.
model_not_found Giriş dosyasının özelliğinde model belirtilen Azure OpenAI modeli dağıtım adı bulunamadı.

Lütfen bu adın geçerli bir Azure OpenAI modeli dağıtımına işaret olduğundan emin olun.
duplicate_custom_id Bu isteğin özel kimliği, başka bir istekteki özel kimliğin bir kopyasıdır.
empty_batch Özel kimlik parametresinin toplu iş içindeki her istek için benzersiz olduğundan emin olmak için lütfen giriş dosyanızı denetleyin.
model_mismatch Giriş dosyasındaki bu isteğin özelliğinde model belirtilen Azure OpenAI modeli dağıtım adı, dosyanın geri kalanıyla eşleşmiyor.

Toplu işteki tüm isteklerin isteğin özelliğinde aynı AOAI modeli dağıtımına model işaret etmesini sağlayın.
invalid_request Giriş satırının şeması geçersiz veya dağıtım SKU'su geçersiz.

Lütfen giriş dosyanızdaki isteğin özelliklerinin beklenen giriş özellikleriyle eşleştiğinden ve Azure OpenAI dağıtım SKU'sunun toplu API istekleri için olduğundan globalbatch emin olun.

Bilinen sorunlar

  • Azure CLI ile dağıtılan kaynaklar, Azure OpenAI genel toplu işlemiyle birlikte çalışmaz. Bunun nedeni, bu yöntem kullanılarak dağıtılan kaynakların deseni izlemeyen https://your-resource-name.openai.azure.com uç nokta alt etki alanları olması sorunudur. Bu sorunun geçici bir çözümü, dağıtım işleminin bir parçası olarak alt etki alanı kurulumunu düzgün bir şekilde işleyecek diğer yaygın dağıtım yöntemlerinden birini kullanarak yeni bir Azure OpenAI kaynağı dağıtmaktır.

Ayrıca bkz.