faster-whisper 的 GPU 利用率呈尖刺波(峰=批量解码满载,谷=CPU 提取 Mel 特征 + 处理结果时 GPU 空闲),平均利用率低。瓶颈不在算力而在 CPU/GPU 未重叠。 - batch_size 16→32:拉长单次 GPU 解码时间,相对掩盖 CPU 特征提取间隙, 尖刺变宽变平,平均利用率上升。turbo FP16 仅 ~1.6GB,3090 24G 充裕。 - beam_size 5→2:turbo 模型鲁棒,候选数 5→2 大幅减少解码步数,让 GPU 峰更密、间隙更短。保留 1 个候选做歧义发音保险,质量损失小。 - beam_size 从硬编码提到 config 可调,CPU/CPU 模板/GPU/示例 四份配置对齐 - /health 增加 asr_beam_size,模型加载日志同步输出 batch+beam word_timestamps 保留 True:segmenter 强依赖词级时间戳做精确断句, 关闭会触发匀速估算退化路径,得不偿失。
65 lines
3.7 KiB
YAML
65 lines
3.7 KiB
YAML
# audio2text 运行时配置模板。
|
||
# 复制为 config.yaml 后填值。所有路径相对容器内 /app。
|
||
#
|
||
# CPU dev / GPU prod 仅靠 asr + translation 两段的 device/model/compute_type/batch_size 切换。
|
||
# 下方注释标注了 CPU(开发)与 GPU(生产)的推荐值对照。
|
||
# 完整对照:CPU 用 ./setup.sh(默认),GPU 用 AUDIO2TEXT_VARIANT=gpu ./setup.sh。
|
||
|
||
server:
|
||
host: 0.0.0.0 # 容器内对外监听(由 docker -p 映射到宿主)
|
||
port: 8000
|
||
workers: 1 # ML 推理为重,固定单 worker 避免显存重复占用
|
||
|
||
storage:
|
||
upload_dir: /data/uploads # 上传视频落盘根目录
|
||
work_dir: /data/.work # 分片会话暂存 + 中间音频
|
||
output_dir: /data/outputs # 生成的 SRT 字幕输出
|
||
chunk_bytes: 1048576 # 1 MiB 服务端流式读缓冲(前端分片大小由前端定)
|
||
chunk_session_ttl_seconds: 300 # 被放弃会话的存活秒数(后台 reaper 据此清理)
|
||
cache_retention_days: 7 # 任务产物保留天数,超期清理(0=禁用)
|
||
cache_cleanup_interval_hours: 24 # 定时清理间隔(启动时跑一次,之后循环)
|
||
|
||
processing:
|
||
delete_original_after_extract: true # 提取音频成功后删除原始视频,省空间
|
||
keep_audio: false # 完成后是否保留中间 wav(默认删,只留字幕)
|
||
|
||
asr:
|
||
# CPU dev:tiny.en + int8(Whisper 同系列最小,英文专用,~39M)
|
||
# GPU prod:large-v3-turbo + float16(8x 速度,质量接近 large-v3,~3GB 显存)
|
||
model: tiny.en # CPU: tiny.en | GPU: large-v3-turbo
|
||
device: cpu # cpu | cuda
|
||
compute_type: int8 # CPU: int8 | GPU: float16
|
||
language: en # 仅英语
|
||
word_timestamps: true # 词级时间戳:让断句精确而非纯匀速估算
|
||
vad_filter: true # 过滤静音段,提升质量与速度
|
||
batch_size: 8 # CPU: 8 | GPU: 32(BatchedInferencePipeline 批量解码音频块,拉长单次 GPU 解码掩盖 CPU 特征提取间隙)
|
||
beam_size: 5 # CPU: 5(默认)| GPU: 2(turbo 鲁棒可降,候选数↓解码步数↓,加速明显质量损失小)
|
||
|
||
translation:
|
||
# CPU dev:Helsinki-NLP/opus-mt-en-zh(~300MB,2GB 内存可跑)
|
||
# GPU prod:facebook/nllb-200-distilled-1.3B(质量最好,~2.5GB 显存)
|
||
# 注意:model 与 device 必须配套——GPU 模型配 CPU device 会 OOM,反之浪费硬件。
|
||
model: Helsinki-NLP/opus-mt-en-zh # CPU: opus-mt-en-zh | GPU: facebook/nllb-200-distilled-1.3B
|
||
device: cpu # cpu | cuda
|
||
src_lang: eng_Latn # NLLB 语言码:英语
|
||
tgt_lang: zho_Hans # NLLB 语言码:简体中文
|
||
batch_size: 8 # CPU: 8 | GPU: 32(不共驻时显存独占可用大 batch)
|
||
max_length: 256 # 单条翻译最大 token
|
||
sort_by_length: true # 按长度排序后分批,减少 padding 浪费(GPU 收益大)
|
||
|
||
segmentation:
|
||
max_words_per_line: 14 # 单行最多词数,超出按逗号拆
|
||
max_duration_seconds: 7.0 # 单条字幕最长 7 秒
|
||
min_duration_seconds: 1.0 # 单条字幕最短 1 秒(太短则合并)
|
||
max_chars_per_line: 42 # SRT 规范:每行 ≤42 字符
|
||
|
||
logging:
|
||
level: info # debug | info | warning | error(控制台最低级别)
|
||
buffer_size: 2000 # /logs 页面内存缓冲条数
|
||
|
||
docs:
|
||
enabled: true
|
||
username: admin
|
||
password: "CHANGE_ME" # 部署前务必修改;留空则禁用 /docs
|
||
realm: "audio2text docs"
|