| 中文 | English |
这个后端由三个核心文件组成:
整体是一个两层结构:
一次前端请求会经过下面这条链路:
backend_api.py 的 POST /generate 发送请求。POST /generate 把 worker payload 发送给一个或多个 worker。backend_worker.py 加载或复用 tokenizer 和模型,然后依次执行:
backend/generated_audio/,并返回文件名和元数据。/job/{job_id} 和 /job/{job_id}/track/{track_idx}/mp3|wav 对前端暴露。run_backend.sh这是本地或容器环境下的启动入口。
它负责:
GPU_IDS 启动一个或多个 worker最重要的启动控制项包括:
--gpus:指定哪些物理 GPU 用来跑 worker--runtime-mode:one_shot 或 keep_loadedAPI_PORTWORKER_BASE_PORTBASE_MASTER_PORTBASE_SEEDMEGATRON_ARGSbackend_api.py这是面向前端的编排层。
它负责:
它本身不执行 GPU 推理。
backend_worker.py这是单卡推理运行时。
它负责:
当前的运行策略是:
在 backend 目录下执行:
cd backend
bash run_backend.sh
默认行为:
0one_shot 模式常见高级示例:
bash run_backend.sh --gpus 0
bash run_backend.sh --gpus 0,1
bash run_backend.sh --gpus 0,1 --runtime-mode keep_loaded
停止所有后端进程:
bash run_backend.sh stop
日志输出在:
backend/logs/api.logbackend/logs/worker_0.logbackend/logs/worker_1.log常用查看方式:
tail -f backend/logs/api.log
tail -f backend/logs/worker_0.log
生成结果会写到:
backend/generated_audio/*.wavbackend/generated_audio/*.mp3backend/generated_audio/*.json每次请求通常会写出:
通过 run_backend.sh 传入 --gpus:
bash run_backend.sh --gpus 0
bash run_backend.sh --gpus 0,1
bash run_backend.sh --gpus 6,7
每个 GPU id 会启动一个 worker,worker 数量会根据你传入的 id 个数自动推导。
通过 run_backend.sh 传入 --runtime-mode:
bash run_backend.sh --runtime-mode one_shot
bash run_backend.sh --runtime-mode keep_loaded
建议:
one_shot:更适合作为单卡或显存更紧张环境下的安全默认模式keep_loaded:更适合高显存 GPU 和重复推理场景编辑 run_backend.sh 里的:
API_PORTWORKER_BASE_PORTBASE_MASTER_PORT编辑 backend_worker.py 里的:
CHECKPOINTS_DIRTOKENIZER_PATHBACKBONE_MODELSSUPERRES_MODELSDECODER_CONFIG_PATHDECODER_CHECKPOINT_PATH通过 /config 对外暴露的模型名目前是通用名称:
default_backbonedefault_superres每个 worker 会暴露:
/health/config/generate/download/{filename}API 通过 /health 判断 worker 当前是 idle、busy 还是 offline。
优先看:
backend/logs/api.logbackend/logs/worker_0.logGET /statusGET /job/{job_id}常见原因:
优先检查:
ffmpeg 错误backend/generated_audio/ 下是否真的生成了文件/download/{filename} 拉到了文件