JinrikiHelper / CONCURRENCY_CONFIG.md
TNOT's picture
feat: independent queue concurrency limits for make/whisper/mfa/export tasks
ad25f3a

A newer version of the Gradio SDK is available: 6.12.0

Upgrade

并发队列配置指南

概述

云端部署支持 4 个独立的任务队列,分别控制不同模块的并发数。针对 2核 CPU、16GB 内存 的配置,提供了合理的默认值。

任务队列架构

队列名称 关键词 资源消耗 默认值 环境变量 说明
制作 make 6-10GB 1 JINRIKI_MAX_MAKE_JOBS VAD切片 → Whisper转录 → MFA对齐 → 打包
识别 whisper 3-5GB 0(不限) JINRIKI_MAX_WHISPER_JOBS 单独的语音识别任务(可选)
对齐 mfa 2-4GB 1 JINRIKI_MAX_MFA_JOBS 单独的 MFA 对齐任务
导出 export 1-2GB 2 JINRIKI_MAX_EXPORT_JOBS 音源导出(I/O密集)

默认配置(2核 CPU)

# 推荐配置(平衡吞吐和稳定性)
export JINRIKI_MAX_MAKE_JOBS=1        # 综合任务:1个
export JINRIKI_MAX_WHISPER_JOBS=0     # 识别任务:不限制(仅供高级用户)
export JINRIKI_MAX_MFA_JOBS=1         # 对齐任务:1个
export JINRIKI_MAX_EXPORT_JOBS=2      # 导出任务:2个(I/O密集,可以并发)
export JINRIKI_MAX_JOB_SECONDS=1800   # 单任务超时:30分钟

为什么是这样的配置?

队列 资源考量 建议
make 包含 Whisper + MFA,CPU+GPU 密集 限制为 1:避免内存溢出,16GB 无法同时运行 2 个
whisper 单独的语音识别,仅当不用 make **默认不限制(0)**:非主流程,不配置
mfa MFA 自动利用 2 核 CPU(num_jobs=2 限制为 1:避免与 make 中的 MFA 冲突
export I/O 密集,内存占用少(仅 1-2GB) 限制为 2:可与其他任务并行

调整方案

方案 A:重视吞吐(高风险)

export JINRIKI_MAX_MAKE_JOBS=2        # 可能导致内存溢出
export JINRIKI_MAX_MFA_JOBS=1
export JINRIKI_MAX_EXPORT_JOBS=3

⚠️ 风险:需要严格的内存监控,推荐仅在 16GB 内存充足且无其他应用时使用

方案 B:稳定性优先(低风险)

export JINRIKI_MAX_MAKE_JOBS=1        # 同上
export JINRIKI_MAX_MFA_JOBS=1
export JINRIKI_MAX_EXPORT_JOBS=1      # 所有队列均串行

优势:最稳定,适合生产环境

方案 C:仅导出加速

export JINRIKI_MAX_MAKE_JOBS=1
export JINRIKI_MAX_MFA_JOBS=1
export JINRIKI_MAX_EXPORT_JOBS=4      # 导出可以更多并发

用场景:已制作的音源包仅需反复导出不同格式

部署方式

1. Modelscope 魔塔创空间

方式A:环境变量(推荐)

在创空间的「启动命令」中设置:

export JINRIKI_MAX_MAKE_JOBS=1 && \
export JINRIKI_MAX_MFA_JOBS=1 && \
export JINRIKI_MAX_EXPORT_JOBS=2 && \
python app.py

方式B:配置文件

创建 .env 文件:

JINRIKI_MAX_MAKE_JOBS=1
JINRIKI_MAX_MFA_JOBS=1
JINRIKI_MAX_EXPORT_JOBS=2
JINRIKI_MAX_JOB_SECONDS=1800

2. HuggingFace Spaces

同样支持在 Space 的 Secrets 中设置环境变量

3. 本地开发

# Windows PowerShell
$env:JINRIKI_MAX_MAKE_JOBS=1
$env:JINRIKI_MAX_EXPORT_JOBS=2
python app.py

# Linux/macOS
export JINRIKI_MAX_MAKE_JOBS=1
export JINRIKI_MAX_EXPORT_JOBS=2
python app.py

队列状态监控

在 Web UI 的「关于」页面可以实时查看队列状态:

【任务队列】 制作: 0/1 | 识别: 0/∞ | 对齐: 1/1 | 导出: 2/2
【运行中】 make:abc123 | export:def456 | export:ghi789 ...共3个
  • 表示识别队列不限制(默认配置)
  • 当队列满时,新任务会被拒绝并提示"服务繁忙"

常见问题

Q1: 如何同时支持更多并发?

A: 需要更高的硬件配置。目前针对 2核 CPU 的推荐是单 make 任务 + 多 export 任务。升级至 4核+可考虑:

export JINRIKI_MAX_MAKE_JOBS=2
export JINRIKI_MAX_EXPORT_JOBS=3

Q2: 为什么 JINRIKI_MAX_WHISPER_JOBS=0 不限制?

A: whisper 队列仅用于 make 流程外的单独转录任务,这是高级功能。默认不限制以免阻碍非主流程。生产场景建议改为:

export JINRIKI_MAX_WHISPER_JOBS=1

Q3: 任务超时后会怎样?

A: 超时的任务会被标记为取消,释放队列位置,用户会收到"已超时"的提示。默认 1800 秒(30 分钟)。

Q4: 能否设置某个队列为 0(禁用)?

A: 不推荐。系统最少保持 min=1 的限制以避免完全阻塞。若确实要禁用某个功能,应改代码而非配置文件。

监控与调优

查看当前内存占用

# Linux
free -h
# macOS
vm_stat

# Windows PowerShell
Get-WmiObject Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum

推荐的监控指标

  • 内存使用率: < 80%(预留余量防止 OOM)
  • 任务排队时间: < 300 秒(5 分钟)
  • 任务成功率: ≥ 99%

根据状态调整

现象 原因 调整
内存持续 > 90% 并发过高 降低 MAX_MAKE_JOBS
任务频繁超时 CPU/GPU 资源不足 降低 MAX_EXPORT_JOBS
队列堆积 > 10 硬件不足以支撑 等待配置升级或降低并发

参考资源

  • MFA 对齐并发:支持自动检测 num_jobs (2核 = 2 并发)
  • Whisper 转录:单线程(不支持内部并发)
  • 音源导出:纯 I/O 密集,可使用线程池(当前实现为单线程)

最后更新: 2026.03.22 | 默认配置: 2核 CPU + 16GB 内存 + Modelscope 魔塔