feat: 调度器+并发管线+GPU优化+日志分级+前端修复
- scheduler: ffmpeg 异步线程 + GPU 串行调度 + 模型复用(2N→2 次加载) - pipeline: 阶段拆分(extract/asr/translate),中间数据存 Task 字段 - translate_service: 长度排序批处理,padding 浪费减少 91% - model_manager: ASR/翻译不共驻,BatchedInferencePipeline 批量解码 - 日志分级: INFO=任务流转里程碑,DEBUG=进度详情;默认 INFO - 前端: 日志最新在上+滚动感知+退避轮询;24h 时间;上传中状态显示 - /health: 返回完整 Whisper/NLLB 配置 - upload_service: 单事务 complete + 扩展名白名单 - task_router: 合并 UploadSession 虚拟任务到列表 - Dockerfile: CPU/GPU 独立构建链,deps 缓存稳定 - prefetch_models: 安装时预下载模型权重
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
# audio2text 运行时配置。复制为 config.yaml 后填值。所有路径相对容器内 /app。
|
||||
# CPU dev / GPU prod 仅靠 device + model + compute_type 三项切换,代码不变。
|
||||
# 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 映射到宿主)
|
||||
@@ -10,9 +14,9 @@ storage:
|
||||
upload_dir: /data/uploads # 上传视频落盘根目录
|
||||
work_dir: /data/.work # 分片会话暂存 + 中间音频
|
||||
output_dir: /data/outputs # 生成的 SRT 字幕输出
|
||||
chunk_bytes: 1048576 # 1 MiB 流式分片
|
||||
chunk_bytes: 1048576 # 1 MiB 服务端流式读缓冲(前端分片大小由前端定)
|
||||
chunk_session_ttl_seconds: 300 # 被放弃会话的存活秒数(后台 reaper 据此清理)
|
||||
cache_retention_days: 7 # 任务产物保留天数,超期清理(字幕/中间音频/保留的原始视频+DB记录)
|
||||
cache_retention_days: 7 # 任务产物保留天数,超期清理(0=禁用)
|
||||
cache_cleanup_interval_hours: 24 # 定时清理间隔(启动时跑一次,之后循环)
|
||||
|
||||
processing:
|
||||
@@ -20,36 +24,40 @@ processing:
|
||||
keep_audio: false # 完成后是否保留中间 wav(默认删,只留字幕)
|
||||
|
||||
asr:
|
||||
# CPU dev:tiny.en + int8(Whisper 同系列最小,英文专用)
|
||||
# GPU prod:large-v3-turbo + float16,3090 上几 GB 视频几分钟出字幕
|
||||
model: tiny.en
|
||||
device: cpu # cpu | cuda
|
||||
compute_type: int8 # cpu: int8;gpu: float16
|
||||
language: en # 仅英语
|
||||
word_timestamps: true # 词级时间戳:让断句精确而非纯匀速估算
|
||||
vad_filter: true # 过滤静音段,提升质量与速度
|
||||
# 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: 16(BatchedInferencePipeline 批量解码音频块)
|
||||
|
||||
translation:
|
||||
model: facebook/nllb-200-distilled-1.3B
|
||||
device: cpu # cpu | cuda
|
||||
src_lang: eng_Latn # NLLB 语言码:英语
|
||||
tgt_lang: zho_Hans # NLLB 语言码:简体中文
|
||||
batch_size: 16 # 不与 ASR 共驻:翻译时显存独占,可用大 batch
|
||||
max_length: 256 # 单条翻译最大 token
|
||||
# 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 字符
|
||||
|
||||
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 页面内存缓冲条数
|
||||
level: info # debug | info | warning | error(控制台最低级别)
|
||||
buffer_size: 2000 # /logs 页面内存缓冲条数
|
||||
|
||||
docs:
|
||||
enabled: true
|
||||
username: admin
|
||||
password: "CHANGE_ME" # /docs Basic Auth,明文(root 持有,常量时间比较)
|
||||
password: "CHANGE_ME" # 部署前务必修改;留空则禁用 /docs
|
||||
realm: "audio2text docs"
|
||||
|
||||
Reference in New Issue
Block a user