Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

reuAC/reCosyVoiceService

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CosyVoice 多进程自动部署服务

基于 CosyVoice2-0.5B 的分布式语音合成服务,提供完善的多进程管理、自动故障恢复和 RESTful API 接口。

如下内容基于 Ai 生成。

系统架构

本系统采用分布式多进程架构,通过 Redis 消息队列实现任务分发和状态管理,主要包含三个核心组件:

1. API 主服务层

  • 基于 FastAPI 的异步 HTTP 服务
  • 负责请求验证、任务分发和结果聚合
  • 进程生命周期管理和健康监控
  • GPU 资源分配和部署计划计算

2. 文本分割进程(Splitter)

  • 单进程运行,全局唯一
  • 长文本归一化和智能分句
  • 子任务生成和分发
  • 轻量级前端处理器,显存占用低

3. TTS 合成进程(Worker)

  • 多进程并行运行,绑定到不同 GPU
  • 加载 CosyVoice2 模型执行推理
  • 预加载提示音,支持零样本克隆
  • 自动重试机制和死信队列管理

数据流转

客户端请求
    |
    v
[API 服务]
    | - 验证 API Key
    | - 创建任务 ID
    v
[Redis: SPLITTER_TASK_QUEUE]
    |
    v
[Splitter 进程]
    | - 文本分割
    | - 生成子任务
    v
[Redis: WORKER_TASK_QUEUE]
    |
    v
[Worker 进程池] (GPU-0, GPU-1, ...)
    | - 并行合成
    | - 保存结果
    v
[Redis: 完成通知]
    |
    v
[API 服务]
    | - 音频合并
    | - 返回下载 URL
    v
客户端接收结果

核心特性

高可用性

  • 进程异常自动监测和重启
  • 处理中任务自动恢复到队列
  • 失败重试机制(可配置次数和延迟)
  • 死信队列记录永久失败任务

GPU 智能调度

  • 显存感知部署:根据 GPU 可用显存动态分配进程
  • 均匀分配模式:多进程平均分布到各 GPU
  • 单进程绑定单 GPU,避免资源竞争

分布式任务队列

  • 基于 Redis 的可靠队列机制
  • BRPOPLPUSH 原子操作保证任务不丢失
  • Pub/Sub 实现进程间通信
  • 结果自动过期清理(TTL)

优雅关闭

  • 广播停止信号到所有子进程
  • 等待处理中任务完成
  • 强制终止未响应进程
  • 确保资源正确释放

环境要求

硬件要求

  • NVIDIA GPU(支持 CUDA)
  • 单模型建议显存:5GB+
  • 多进程部署建议:16GB+ 显存

软件依赖

  • Python 3.8+
  • CUDA 11.0+
  • Redis 5.0+

Python 依赖库

fastapi
uvicorn[standard]
pydantic
pydantic-settings
redis
torch
torchaudio
librosa
numpy
hyperpyyaml
pynvml

安装部署

1. 克隆项目

git clone <repository_url>
cd reCosyVoiceService

2. 安装依赖

pip install -r requirements.txt

3. 下载模型文件

将 CosyVoice2-0.5B 预训练模型放置到指定目录:

pretrained_models/CosyVoice2-0.5B/

4. 准备提示音文件

根据配置文件准备音色提示音:

prompts/
├── default_female.wav
├── announcer_male.wav
└── ...

5. 配置 Redis

确保 Redis 服务正常运行:

redis-server

6. 配置环境变量

复制配置模板并编辑:

cp env.example .env

编辑 .env 文件(参考配置说明章节)。

7. 启动服务

python main.py

服务默认运行在 http://0.0.0.0:8000

配置说明

模型与资源配置

# 模型路径
MODEL_PATH="pretrained_models/CosyVoice2-0.5B"

# GPU 显存管理
# 正数:每个模型需要的显存(MB),用于显存感知部署
# -1:均匀分配模式
GPU_MEMORY_PER_MODEL_MB=5000

# 工作进程总数
NUM_MODELS=8

提示音配置

PROMPTS_CONFIG='[
    {
        "name": "announcer_female",
        "path": "prompts/default_female.wav",
        "text": "这是提示音对应的原始文本内容"
    },
    {
        "name": "announcer_male",
        "path": "prompts/announcer_male.wav",
        "text": "提示音文本内容"
    }
]'

Redis 配置

REDIS_HOST="localhost"
REDIS_PORT=6379
REDIS_DB=0
REDIS_PREFIX="cosyvoice:"
RESULT_EXPIRY_SECONDS=3600

工作进程配置

# 失败重试次数
WORKER_RETRY_ATTEMPTS=3

# 重试延迟(秒)
WORKER_RETRY_DELAY_SECONDS=2

API 安全配置

# API 密钥白名单(JSON 数组)
VALID_API_KEYS='["admin", "key1", "key2"]'

目录配置

STATIC_DIR="static/audio"
TEMP_AUDIO_DIR="static/audio/temp_chunks"
TEMP_VOICE_DIR="static/audio/temp_voices"

API 使用说明

端点列表

方法 路由 功能
GET / 服务状态检查
GET /voices 获取可用音色列表
POST /synthesize 合成音频
GET /audio/{filename} 下载合成音频

1. 检查服务状态

curl http://localhost:8000/

响应示例:

{
  "status": "就绪",
  "available_voices": ["announcer_female", "announcer_male"]
}

2. 获取音色列表

curl http://localhost:8000/voices

响应示例:

["announcer_female", "announcer_male", "meta1"]

3. 合成音频(使用预设音色)

curl -X POST http://localhost:8000/synthesize \
  -H "Content-Type: application/json" \
  -d '{
    "apikey": "admin",
    "target": "这是需要合成的文本内容",
    "voice": "announcer_female"
  }'

响应示例:

{
  "download_url": "http://localhost:8000/audio/550e8400-e29b-41d4-a716-446655440000.wav",
  "processing_time_seconds": 5.42,
  "num_chunks": 3
}

4. 合成音频(使用即时克隆)

curl -X POST http://localhost:8000/synthesize \
  -H "Content-Type: application/json" \
  -d '{
    "apikey": "admin",
    "target": "这是需要合成的文本内容",
    "voice_url": "https://example.com/sample_audio.wav",
    "voice_prompt_text": "这是示例音频的原始文本内容"
  }'

请求参数说明

参数 类型 必需 说明
apikey string API 密钥
target string 待合成的目标文本
voice string 条件必需 预设音色名称(与 voice_url 二选一)
voice_url string 条件必需 外部音频 URL(与 voice 二选一)
voice_prompt_text string 条件必需 voice_url 对应的文本(使用 voice_url 时必需)

错误响应

状态码 说明
400 参数验证失败或音色不存在
401 API 密钥无效
500 服务内部错误
503 服务未就绪
504 任务处理超时(600秒)

运维监控

日志查看

服务日志输出格式:

[时间戳] [日志级别] [模块名] [进程ID] 日志内容

关键日志:

  • 进程启动:Starting Splitter... / Starting Worker-GPU{id}-{idx}...
  • 进程重启:Restarting Worker-GPU{id}-{idx} after unexpected exit
  • 任务恢复:Recovered N pending tasks from processing queue
  • 任务失败:Task failed after X attempts, moving to dead letter queue

Redis 队列监控

查看队列长度

# 待分割任务
redis-cli LLEN cosyvoice:splitter_tasks

# 待合成任务
redis-cli LLEN cosyvoice:worker_tasks

# 死信队列
redis-cli LLEN cosyvoice:dead_letter_queue

查看处理中任务

# 列出所有处理队列
redis-cli KEYS "cosyvoice:processing:*"

# 查看特定处理队列长度
redis-cli LLEN cosyvoice:processing:worker-0

查看死信任务

# 获取最新失败任务
redis-cli LINDEX cosyvoice:dead_letter_queue 0

# 查看所有失败任务
redis-cli LRANGE cosyvoice:dead_letter_queue 0 -1

GPU 监控

# 实时监控 GPU 使用情况
nvidia-smi -l 1

# 查看显存占用
nvidia-smi --query-gpu=index,name,memory.used,memory.total --format=csv

性能调优建议

GPU 部署策略

  • 多卡均衡:设置 GPU_MEMORY_PER_MODEL_MB=-1
  • 显存优化:设置 GPU_MEMORY_PER_MODEL_MB 为实际模型显存需求
  • 进程数量:NUM_MODELS 设置为 GPU 总显存/单模型显存

并发配置

  • 增加 NUM_MODELS 提高并发能力
  • 调整 WORKER_RETRY_ATTEMPTS 平衡容错性和响应速度
  • 增加 RESULT_EXPIRY_SECONDS 避免频繁清理缓存

任务超时

API 请求默认超时 600 秒,适用于长文本合成。如需调整,修改 api/main.pysynthesize_audio 函数的超时参数。

故障排查

服务启动失败

检查项:

  1. Redis 连接是否正常
  2. 模型文件路径是否正确
  3. 提示音文件是否存在
  4. GPU 是否可用(nvidia-smi
  5. CUDA 环境变量是否正确

合成失败

检查项:

  1. 查看死信队列:redis-cli LRANGE cosyvoice:dead_letter_queue 0 -1
  2. 检查 Worker 进程日志
  3. 验证提示音文件格式和内容
  4. 确认 GPU 显存充足

进程频繁重启

可能原因:

  1. GPU 显存不足,OOM
  2. 模型加载失败
  3. Redis 连接不稳定
  4. 系统资源耗尽

技术栈

Web 框架

  • FastAPI:高性能异步 Web 框架
  • Uvicorn:ASGI 服务器
  • Pydantic:数据验证和配置管理

消息队列

  • Redis:任务队列和状态存储
  • Pub/Sub:进程间通信

深度学习

  • PyTorch:神经网络推理引擎
  • CosyVoice2-0.5B:语音合成模型
  • torchaudio:音频张量处理

音频处理

  • librosa:音频分析和处理
  • 采样率:22050 Hz
  • 格式:WAV(PCM 16-bit)

进程管理

  • multiprocessing:Python 多进程
  • pynvml:NVIDIA GPU 监控

其他

  • hyperpyyaml:YAML 配置解析
  • numpy:数值计算

架构优势

  1. 高吞吐量:多进程并行合成,充分利用多卡 GPU
  2. 容错性强:进程自动重启、任务自动恢复、失败重试机制
  3. 可扩展性:支持动态调整进程数量,水平扩展能力强
  4. 低延迟:异步处理、提示音预加载、结果缓存
  5. 运维友好:详细日志、Redis 监控、优雅关闭

License

请遵循 CosyVoice 官方项目的开源协议。

联系方式

如有问题或建议,请提交 Issue 或 Pull Request。

About

A text-to-speech service built with CosyVoice2, with multi-node concurrency capabilities.

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.