Zum Hauptinhalt springen

[BETA]LiteLLM Verwaltete Dateien mit Batches

Info

Dies ist eine kostenlose LiteLLM Enterprise-Funktion.

Verfügbar über das Paket litellm[proxy] oder jedes litellm Docker-Image.

FeatureBeschreibungKommentare
Proxy
SDKErfordert eine Postgres-DB zum Speichern von Datei-IDs
Verfügbar für alle Batch-Anbieter

Übersicht

Verwenden Sie dies, um

  • Loadbalancing über mehrere Azure Batch-Bereitstellungen
  • Batch-Modellzugriff nach Schlüssel/Benutzer/Team steuern (wie bei Chat Completion-Modellen)

(Proxy Admin) Verwendung

So gewähren Sie Entwicklern Zugriff auf Ihre Batch-Modelle.

1. config.yaml einrichten

  • Geben Sie mode: batch für jedes Modell an: Ermöglicht Entwicklern, zu wissen, dass dies ein Batch-Modell ist.
litellm_config.yaml
model_list:
- model_name: "gpt-4o-batch"
litellm_params:
model: azure/gpt-4o-mini-general-deployment
api_base: os.environ/AZURE_API_BASE
api_key: os.environ/AZURE_API_KEY
model_info:
mode: batch # 👈 SPECIFY MODE AS BATCH, to tell user this is a batch model
- model_name: "gpt-4o-batch"
litellm_params:
model: azure/gpt-4o-mini-special-deployment
api_base: os.environ/AZURE_API_BASE_2
api_key: os.environ/AZURE_API_KEY_2
model_info:
mode: batch # 👈 SPECIFY MODE AS BATCH, to tell user this is a batch model

2. Virtuellen Schlüssel erstellen

create_virtual_key.sh
curl -L -X POST 'https://{PROXY_BASE_URL}/key/generate' \
-H 'Authorization: Bearer ${PROXY_API_KEY}' \
-H 'Content-Type: application/json' \
-d '{"models": ["gpt-4o-batch"]}'

Sie können den virtuellen Schlüssel jetzt verwenden, um auf die Batch-Modelle zuzugreifen (siehe Entwickler-Workflow).

(Entwickler) Verwendung

So erstellen Sie eine LiteLLM-verwaltete Datei und führen Batch-CRUD-Operationen mit der Datei aus.

1. request.jsonl erstellen

  • Verfügbare Modelle über /model_group/info prüfen
  • Alle Modelle mit mode: batch anzeigen
  • model in .jsonl auf das Modell aus /model_group/info setzen
request.jsonl
{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-4o-batch", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 1000}}
{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-4o-batch", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 1000}}

Erwartung

  • LiteLLM übersetzt dies in den Azure-bereitstellungsspezifischen Wert (z. B. gpt-4o-mini-general-deployment)

2. Datei hochladen

Geben Sie target_model_names: "<model-name>" an, um LiteLLM-verwaltete Dateien und Anforderungsvalidierung zu aktivieren.

model-name sollte mit dem model-name in der request.jsonl übereinstimmen

create_batch.py
from openai import OpenAI

client = OpenAI(
base_url="http://0.0.0.0:4000",
api_key="sk-1234",
)

# Upload file
batch_input_file = client.files.create(
file=open("./request.jsonl", "rb"), # {"model": "gpt-4o-batch"} <-> {"model": "gpt-4o-mini-special-deployment"}
purpose="batch",
extra_body={"target_model_names": "gpt-4o-batch"}
)
print(batch_input_file)

Wo wird die Datei geschrieben?:

Alle gpt-4o-batch-Bereitstellungen (gpt-4o-mini-general-deployment, gpt-4o-mini-special-deployment) werden beschrieben. Dies ermöglicht das Loadbalancing über alle gpt-4o-batch-Bereitstellungen in Schritt 3.

3. Batch erstellen + abrufen

create_batch.py
...
# Create batch
batch = client.batches.create(
input_file_id=batch_input_file.id,
endpoint="/v1/chat/completions",
completion_window="24h",
metadata={"description": "Test batch job"},
)
print(batch)

# Retrieve batch

batch_response = client.batches.retrieve(
batch_id
)
status = batch_response.status

4. Batch-Inhalt abrufen

create_batch.py
...

file_id = batch_response.output_file_id

file_response = client.files.content(file_id)
print(file_response.text)

5. Batches auflisten

create_batch.py
...

client.batches.list(limit=10, extra_body={"target_model_names": "gpt-4o-batch"})

[Kommt bald]Batch abbrechen

create_batch.py
...

client.batches.cancel(batch_id)

End-to-End Beispiel

create_batch.py
import json
from pathlib import Path
from openai import OpenAI

"""
litellm yaml:

model_list:
- model_name: gpt-4o-batch
litellm_params:
model: azure/gpt-4o-my-special-deployment
api_key: ..
api_base: ..

---
request.jsonl:
{
{
...,
"body":{"model": "gpt-4o-batch", ...}}
}
}
"""

client = OpenAI(
base_url="http://0.0.0.0:4000",
api_key="sk-1234",
)

# Upload file
batch_input_file = client.files.create(
file=open("./request.jsonl", "rb"),
purpose="batch",
extra_body={"target_model_names": "gpt-4o-batch"}
)
print(batch_input_file)


# Create batch
batch = client.batches.create( # UPDATE BATCH ID TO FILE ID
input_file_id=batch_input_file.id,
endpoint="/v1/chat/completions",
completion_window="24h",
metadata={"description": "Test batch job"},
)
print(batch)
batch_id = batch.id

# Retrieve batch

batch_response = client.batches.retrieve( # LOG VIRTUAL MODEL NAME
batch_id
)
status = batch_response.status

print(f"status: {status}, output_file_id: {batch_response.output_file_id}")

# Download file
output_file_id = batch_response.output_file_id
print(f"output_file_id: {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")

with open(
Path.cwd().parent / "unified_batch_output.json", "w"
) as output_file:
for raw_response in raw_responses:
json.dump(json.loads(raw_response), output_file)
output_file.write("\n")
## List Batch

list_batch_response = client.batches.list( # LOG VIRTUAL MODEL NAME
extra_query={"target_model_names": "gpt-4o-batch"}
)

## Cancel Batch

batch_response = client.batches.cancel( # LOG VIRTUAL MODEL NAME
batch_id
)
status = batch_response.status

print(f"status: {status}")

FAQ

Wo werden meine Dateien geschrieben?

Wenn target_model_names angegeben ist, wird die Datei in alle Bereitstellungen geschrieben, die mit target_model_names übereinstimmen.

Keine zusätzliche Infrastruktur erforderlich.