Spaces:
Running
Running
A newer version of the Gradio SDK is available: 6.12.0
并发队列配置指南
概述
云端部署支持 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 魔塔