Skip to content

fqscfqj/glm_asr_to_openaiapi

Repository files navigation

GLM-ASR Docker API 服务(兼容 OpenAI Whisper API)

本仓库已新增一个可 Docker 部署的转录 API 服务,接口兼容 OpenAI Whisper 的 POST /v1/audio/transcriptions

功能说明

运行环境:需要 NVIDIA GPU + CUDA,Docker 部署仅支持 CUDA(NVIDIA Container Toolkit 必须可用)。

  • Whisper API 兼容:支持 multipart/form-data 上传音频文件(字段 file),并要求 model 字段存在(但本服务不依赖该字段)。
  • 可自定义 API Key:通过环境变量 API_KEY 设置,使用 Authorization: Bearer <API_KEY> 访问。
  • 懒加载模型:首次请求才加载模型权重。
  • 空闲超时自动释放显存:超过 IDLE_UNLOAD_SECONDS 未调用会自动卸载模型并尝试释放 CUDA 显存。
  • 字幕输出:支持 response_format=json/text/srt/vtt/verbose_json 输出,verbose_json 结构与 OpenAI Whisper 对齐(segments 为粗时间戳)。
    • 说明:当前字幕时间戳为“按 chunk 的粗时间戳”(默认 30 秒一段),不提供逐词对齐。
  • 语言参数(纯语言码)language 仅支持纯语言码(小写 2-3 位字母,如 zh/en/yue)。
    • 不传 language:不提示语言,让模型自行推断。
    • 不支持:国家码(如 CN/US)或 locale(如 zh-CN)。

快速开始(docker compose)

  1. 构建并启动:
export API_KEY=your_key
docker compose up -d --build
  1. 健康检查:
curl -fsS http://127.0.0.1:9092/health
  1. 发起转录请求(JSON):
curl -X POST http://127.0.0.1:9092/v1/audio/transcriptions \
  -H "Authorization: Bearer ${API_KEY}" \
  -F "file=@test/OSR_us_000_0059_8k.wav" \
  -F "model=glmasr" \
  -F "language=en" \
  -F "response_format=json"

说明:当你传入 `language` 时,JSON 响应会回显该字段(例如 `{"text":"...","language":"en"}`)。
  1. 输出字幕(SRT / VTT / verbose_json):
curl -X POST http://127.0.0.1:9092/v1/audio/transcriptions \
  -H "Authorization: Bearer ${API_KEY}" \
  -F "file=@test/OSR_us_000_0059_8k.wav" \
  -F "model=glmasr" \
  -F "response_format=srt" > out.srt

curl -X POST http://127.0.0.1:9092/v1/audio/transcriptions \
  -H "Authorization: Bearer ${API_KEY}" \
  -F "file=@test/OSR_us_000_0059_8k.wav" \
  -F "model=glmasr" \
  -F "response_format=verbose_json" > out.json
  1. 翻译(与 OpenAI /v1/audio/translations 同名接口,返回格式同上):
curl -X POST http://127.0.0.1:9092/v1/audio/translations \
  -H "Authorization: Bearer ${API_KEY}" \
  -F "file=@test/OSR_us_000_0059_8k.wav" \
  -F "model=glmasr" \
  -F "response_format=json"

环境变量

  • API_KEY:不设置则不鉴权(便于本地调试)。
  • MODEL_DIR:模型目录,默认 ./model(包含 config.json / model.safetensors / tokenizer.json)。
  • DEVICEcuda / auto(默认 cuda,Docker 环境仅支持 CUDA)。
  • DTYPEbfloat16 / float16 / float32 / auto(默认 auto)。
  • IDLE_UNLOAD_SECONDS:空闲多少秒后卸载模型(默认 600)。
  • CHUNK_SECONDS:分段时长(默认 0 表示不分段,长音频可设为 30 获得粗粒度时间戳)。
  • MAX_NEW_TOKENS:每段音频最大生成 token(默认 256)。
  • MAX_CONCURRENCY:并发限制(默认 1,GPU 建议保持 1)。
  • ATTN_IMPL:当 flash_attention_2 缺失导致加载失败时,可设置为 sdpaeager

一键测试脚本

仓库提供了测试脚本:

chmod +x test/test_api.sh
API_KEY=your_key ./test/test_api.sh

如果你当前环境无法访问 Docker daemon(例如没有 /var/run/docker.sock 权限),可以用本地虚拟环境启动服务并测试:

chmod +x tools/run_local_test.sh
./tools/run_local_test.sh

GPU 注意事项

  • 如果你使用多 worker(例如 uvicorn --workers 2),每个 worker 会各自加载一份模型,显存会成倍占用。
  • Docker 部署仅支持 CUDA:需要宿主机已正确安装 NVIDIA Container Toolkit,并确保容器可访问 GPU(可在 docker-compose 中按需启用 gpus: all)。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages