批量推理支持一次性提交大量请求并异步执行,完成后统一下载结果。您可以在控制台直接操作,也可以通过 API 调用。接口与 OpenAI Batch API 兼容,可直接用官方 SDK 调用。
功能概述
批量推理适用于以下场景:
-
评测:批量提交测试用例,评估模型性能。
-
数据标注:批量处理待标注数据,生成标注结果。
-
离线生成:批量生成内容,如文章、代码等。
-
回归验证:批量验证模型更新后的输出质量。
接口与 OpenAI Batch API 兼容,支持以下三种接口路径:
-
/v1/chat/completions -
/v1/responses -
/v1/completions
前置条件
使用批量推理功能前,需要完成以下配置:
-
配置 Redis:批量处理依赖 Redis 存储任务状态。需为工作站配置可达的 Redis 实例,否则批量处理功能不可用。
-
配置 OSS 存储:批量处理的输入与结果文件存放在 OSS。在控制台批量推理页面点击配置 OSS 存储按钮,配置OSS路径后即可开始创建任务。
输入文件格式(JSONL)
无论通过控制台还是 API 调用,输入文件均需使用 JSONL 格式(每行一个 JSON 对象)。
格式要求
-
每行是一个独立的 JSON 对象(一个请求),不要写成 JSON 数组。
-
最多 50000 行,单文件不超过 200MB。
字段说明
|
字段 |
必填 |
说明 |
|
|
是 |
请求的唯一标识,会原样写回到对应结果行,用于关联请求与响应。 |
|
|
是 |
固定为 "POST"。 |
|
|
是 |
调用的接口路径,支持 /v1/chat/completions、/v1/responses、/v1/completions。 |
|
|
是 |
该请求的完整请求体,格式与直接调用对应接口时一致(含 model、messages 等)。 |
示例输入(每行一个请求)
{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "qwen-plus", "messages": [{"role": "user", "content": "你好"}]}}
{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "qwen-plus", "messages": [{"role": "user", "content": "今天天气怎么样"}]}}
{"custom_id": "request-3", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "qwen-plus", "messages": [{"role": "user", "content": "帮我写一首诗"}]}}
通过控制台操作
在控制台批量推理页面,您可以直接完成上传文件、创建任务、查看状态和下载结果的全部操作。
上传输入文件
-
在批量推理页面,切换到文件页签。
-
点击上传文件按钮,选择本地 JSONL 文件上传。
-
上传完成后,可以对文件进行预览、下载、新建任务或删除操作。
创建任务
-
在批量推理页面,切换到任务页签。
-
点击新建任务按钮,选择已上传的文件,或点击上传新文件直接上传 JSONL 文件。
-
在接口下拉框中选择要调用的接口路径,支持
/v1/chat/completions、/v1/responses、/v1/completions。 -
(可选)在备注中输入任务备注信息,如用途、模型名等。
-
(可选)在并发线程数(分片数)中填写分片数。
-
留空则按默认每片约 1000 条请求自动切分(分片数 = 总请求数 ÷ 1000,向上取整)。
-
填写则将任务切成指定的分片数,每个分片由一个线程处理,即本任务最多可并行的线程数。系统按「总请求数 ÷ 分片数」均分到各片(最后一片为余数)。该参数仅影响本任务。
-
-
点击创建按钮,任务创建成功后会出现在任务列表中。
查看结果
任务状态变为已完成后,可以查看或预览结果:
-
在任务页签中,点击任务操作列的下载结果按钮直接下载。
-
切换到文件页签,找到任务产出的输出文件(状态为成功)可以预览或下载结果。
通过 API 调用
如果您需要通过代码自动化执行批量推理,可以使用与 OpenAI Batch API 兼容的接口。
核心流程分为四步:上传输入文件 → 创建任务 → 轮询状态 → 下载结果。
curl / Shell 示例
# 0. 准备:把 API Key 放进环境变量; 调用地址请单击工作站右上角的调用信息查看
export LLM_GATEWAY_API_KEY="<YOUR-API-KEY>"
BASE="<YOUR-BASE-URL>"
# 1. 上传输入文件(JSONL),purpose 固定为 batch
curl -X POST "$BASE/v1/files" \
-H "Authorization: Bearer $LLM_GATEWAY_API_KEY" \
-F "purpose=batch" \
-F "file=@batch_input.jsonl"
# → {"id": "batch_input_xxx", ...} 记下这个 id
# 2. 用该文件创建批处理任务
# num_shards 可选:把任务切成几个分片(=最多可并行处理本任务的线程数),
# 系统按"总请求数 ÷ 分片数"均分(最后一片为余数);
# 不填则按默认每片行数切分(默认每片 1000 条)
curl -X POST "$BASE/v1/batches" \
-H "Authorization: Bearer $LLM_GATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input_file_id": "batch_input_xxx",
"endpoint": "/v1/chat/completions",
"completion_window": "24h",
"num_shards": 2
}'
# → {"id": "batch_xxx", "status": "pending", ...}
# 3. 轮询任务状态(validating → in_progress → completed)
curl "$BASE/v1/batches/batch_xxx" \
-H "Authorization: Bearer $LLM_GATEWAY_API_KEY"
# 4. 完成后用 output_file_id 下载结果
curl "$BASE/v1/files/<output_file_id>/content" \
-H "Authorization: Bearer $LLM_GATEWAY_API_KEY" -o output.jsonl
# (可选)取消进行中的任务
curl -X POST "$BASE/v1/batches/batch_xxx/cancel" \
-H "Authorization: Bearer $LLM_GATEWAY_API_KEY"
Python (OpenAI SDK) 示例
# 接口与 OpenAI Batch API 兼容,可直接用官方 openai SDK
# pip install openai
import time
from openai import OpenAI
client = OpenAI(
base_url="<YOUR-BASE-URL>/v1",
api_key="<YOUR-API-KEY>",
)
# 1. 上传输入文件
inp = client.files.create(
file=open("batch_input.jsonl", "rb"),
purpose="batch",
)
# 2. 创建批处理任务
# num_shards 可选:分片数(=最多可并行的线程数),按"总请求数 ÷ 分片数"均分;
# 它是扩展参数,用 extra_body 透传(不填则按默认每片行数切分,默认每片 1000 条)
batch = client.batches.create(
input_file_id=inp.id,
endpoint="/v1/chat/completions",
completion_window="24h",
extra_body={"num_shards": 2},
)
# 3. 轮询直到结束
terminal = {"completed", "failed", "expired", "cancelled"}
while batch.status not in terminal:
time.sleep(10)
batch = client.batches.retrieve(batch.id)
print(batch.status, batch.request_counts)
# 4. 下载结果与错误
if batch.output_file_id:
print(client.files.content(batch.output_file_id).text)
if batch.error_file_id:
print(client.files.content(batch.error_file_id).text)
注意事项
-
endpoint 与 url:需使用受支持的接口:/v1/chat/completions、/v1/responses、/v1/completions。
-
completion_window:目前固定为 "24h";任务超过 24 小时未完成会自动过期。
-
num_shards:可选,将任务拆分为指定分片数(即本任务最大可并行的线程数),系统按「总请求数 ÷ 分片数」均分;留空则按默认每片行数自动切分(默认每片约 1000 条,可由部署方调整)。实际并行还受全局并发线程数与后端实例数限制。
-
输入文件限制:最多 50000 行、不超过 200MB;失败的请求会写入单独的错误文件。
-
鉴权:使用 Bearer API Key;在控制台页面操作时会自动复用当前登录身份,任务执行时使用对应 API Key 回调网关。