vllm-omni 基准测试:SeedTTS 测试数据集下载与预处理实战指南
【免费下载链接】vllm-omniA framework for efficient model inference with omni-modality models项目地址: https://gitcode.com/GitHub_Trending/vl/vllm-omni
导读
本文是 vllm-omni 仓库中 download_process_data_seedtts.md 的完整展开版。它讲解如何从 Google Drive 下载 SeedTTS 评测数据集、解压并整理出meta.lst元数据文件,再通过仓库自带的extract_tts_prompts.py提取出供 TTS 基准测试使用的 prompt 列表。读完本文,你将掌握:完整的 SeedTTS 数据集准备流程、meta.lst各字段格式的精确定义、仓库内多种自带数据变体的适用场景,以及准备后的数据如何接入vllm bench serve --omni的seed-tts/seed-tts-text/seed-tts-design三条 TTS 基准测试链路。
一、为什么需要准备 SeedTTS 数据集
vllm-omni 的 TTS 通用基准测试(benchmarks/tts/bench_tts.py与vllm bench serve --omni)支持 Qwen3-TTS(Base / CustomVoice / VoiceDesign)、VoxCPM2 等模型的性能与质量评测。其中voice_clone任务(Qwen3-TTS-Base、VoxCPM2)使用seed-tts数据集,即来自 BytedanceSpeech seed-tts-eval 评测集的全量语料(约 1.2 GB,包含meta.lst与prompt-wavs参考音频);default_voice与voice_design任务则直接使用仓库内自带的小型文本变体。
完整语料并不随仓库分发,需要先按本文流程下载、解压、整理,然后把它作为--dataset-path指向的本地根目录传入基准工具(详见 benchmarks/tts/README.md 的数据集表格与说明)。
二、前置条件
- Python 3.8+:运行
extract_tts_prompts.py及后续基准脚本所需; gdown:用于从 Google Drive 下载数据集压缩包(本文第三步会安装);- 可访问 Google Drive:数据集托管在 Google Drive 上;
- 仓库中的基准脚本:即
benchmarks/build_dataset/extract_tts_prompts.py,克隆仓库后即可使用。
三、分步操作指南
1. 进入数据集构建目录
cd benchmarks/build_dataset该目录位于仓库根目录下,同时存放着extract_tts_prompts.py与多个自带数据子目录(seed_tts_smoke/、seed_tts_design/、ttsd_smoke/、sound_effect_smoke/),结构可查看 benchmarks/build_dataset。
2. 安装依赖
pip install gdowngdown是 Google Drive 文件下载工具,支持通过文件 ID 直接拉取公开文件。
3. 下载 SeedTTS 测试数据集
gdown 1GlSjVfSHkW3-leKKBlfrjuuTGqQ_xaLP该命令会下载seedtts_testset.tar压缩包(内含seedtts_testset/目录)。文件 ID1GlSjVfSHkW3-leKKBlfrjuuTGqQ_xaLP对应的是用于 TTS 基准测试的评测集归档,与benchmarks/tts/README.md中seed-tts(4 字段 meta.lst + WAV 参考音频,约 1.2 GB)这一数据集项一致。
4. 解压数据集
tar -xf seedtts_testset.tar解压后应得到形如seedtts_testset/<locale>/meta.lst与seedtts_testset/<locale>/prompt-wavs/的目录结构。其中<locale>即语言子目录(如en)。从源码看,数据集加载器正是按{root}/{locale}/meta.lst与{root}/{locale}/prompt-wavs/的布局来定位文件(见 vllm_omni/benchmarks/data_modules/seed_tts_dataset.py 的resolve_seed_tts_root与 seed_tts_dataset.py 的load_data),因此请保持解压后的目录结构不被改动。
5. 准备元数据文件
将英文元数据文件复制到工作目录:
cp seedtts_testset/en/meta.lst meta.lstmeta.lst是数据集的“索引文件”,每行描述一条测试样本。基准测试会读取该文件并据此构造请求(详见第五节字段格式)。若需要使用中文评测集,可类似地复制seedtts_testset/zh/meta.lst,并在后续基准命令中通过--seed-tts-locale zh指定。
6. 提取 Prompt 列表
# 提取前 100 条 prompt(调整 -n 可提取不同数量) python extract_tts_prompts.py -i meta.lst -o top100.txt -n 100该脚本读取meta.lst,从每行的**第二个字段(prompt 文本)**中提取内容,输出为每行一条 prompt 的纯文本文件。脚本实现在 extract_tts_prompts.py 中,核心逻辑如下:
- 逐行读取输入文件,跳过空行;
- 以
|分割,取索引为 1 的字段(parts[1])作为 prompt; - 处理到第
num_lines行即停止; - 将结果逐行写入输出文件,并打印统计信息
Extracted {n} prompts from first {m} lines与输出路径。
命令行参数:
| 参数 | 说明 | 默认值 | 是否必填 |
|---|---|---|---|
-i, --input | 输入meta.lst文件路径 | meta.lst | 否 |
-o, --output | 输出 prompt 文件路径 | prompts.txt | 否 |
-n, --num-lines | 需要提取的 prompt 条数(从文件开头计数) | — | 是 |
此外脚本在入口处会校验输入文件是否存在,不存在时打印Error: Input file '...' not found并直接返回(见 extract_tts_prompts.py),因此请务必先完成第 5 步。
7. 清理临时文件(可选)
rm -rf seedtts_testset rm seedtts_testset.tar rm meta.lst评测集归档与解压目录体积较大(约 1.2 GB 级别),在提取出 prompt 列表后可删除以释放磁盘空间。若后续还需要运行voice_clone基准(需要参考音频),则应保留seedtts_testset/与meta.lst,因为基准测试会读取其中的 WAV 文件构造ref_audio请求体。
四、一键快速开始(All-in-One)
以下命令串起“下载 → 解压 → 整理 → 提取 → 清理”全流程:
# 完整设置并准备基准输入 cd benchmarks/build_dataset pip install gdown gdown 1GlSjVfSHkW3-leKKBlfrjuuTGqQ_xaLP tar -xf seedtts_testset.tar cp seedtts_testset/en/meta.lst meta.lst python extract_tts_prompts.py -i meta.lst -o top100.txt -n 100 rm -rf seedtts_testset seedtts_testset.tar meta.lst执行完成后,benchmarks/build_dataset/top100.txt即为可直接供下游脚本消费的 100 条 prompt 文件。
五、meta.lst 格式深度解析
理解meta.lst的字段格式是正确准备与使用数据集的根本。从 vllm_omni/benchmarks/data_modules/seed_tts_dataset.py 的模块文档与_parse_meta_line实现(seed_tts_dataset.py)可以确认,seed-tts-eval 风格的 4 字段格式为:
utt_id|prompt_transcript|prompt_wav_relative_path|text_to_synthesize| 字段 | 含义 |
|---|---|
utt_id | 样本唯一标识(如smoke001、vd001) |
prompt_transcript | 参考音频对应的文本转写(voice clone 的ref_text) |
prompt_wav_relative_path | 参考音频相对{root}/{locale}/的路径(voice clone 的ref_audio) |
text_to_synthesize | 需要模型合成的目标文本(即请求中的 prompt) |
解析器的行为细节同样值得注意:
- 空行与以
#开头的注释行会被直接跳过(seed_tts_dataset.py); - 字段数少于 4 的行会被判定为畸形并跳过,同时打印
Skipping malformed meta.lst line警告; - 目标文本为空的样本会被过滤(seed_tts_dataset.py);
- 加载后可选的洗牌由
random_seed(默认 0)控制,关闭洗牌可用disable_shuffle(seed_tts_dataset.py)。
仓库自带数据与全量数据集遵循同一格式家族,可作为快速上手或 CI 冒烟测试的替代输入(详见下一节)。
六、仓库自带的多种数据集变体
benchmarks/build_dataset/目录下随仓库分发了几组轻量级meta.lst,无需下载即可用于冒烟测试或功能验证:
| 变体 | 路径 | 格式 | 用途 |
|---|---|---|---|
seed_tts_smoke | seed_tts_smoke/en/meta.lst | 4 字段,仅文本(音频列留空),30 条 | Qwen3-TTS-CustomVoicedefault_voice冒烟(--dataset-name seed-tts-text) |
seed_tts_design | seed_tts_design/en/meta.lst | 5 字段,目标文本 + 自然语言音色描述,30 条 | Qwen3-TTS-VoiceDesignvoice_design(--dataset-name seed-tts-design) |
ttsd_smoke | ttsd_smoke/en/meta.lst | 多说话人对话形式,[S1]/[S2]轮次标记 | TTS 对话(turn)场景冒烟 |
sound_effect_smoke | sound_effect_smoke/en/meta.lst | 音效描述 + 时长(秒) | 音效生成类模型冒烟 |
其中seed_tts_design的 5 字段格式是在 4 字段基础上追加音色设计描述(instructions),用于VoiceDesign任务的零样本音色指令合成。相关解析与校验逻辑可参考测试 tests/benchmarks/test_seed_tts_dataset_variants.py:字段数不足 5 的行会被过滤,缺少描述的行会被拒绝。
七、与 vllm bench serve 的衔接
准备完成的数据集最终要接入 TTS 基准测试。以voice_clone任务为例,完整命令(见 benchmarks/tts/README.md):
vllm bench serve --omni \ --host 127.0.0.1 --port 8000 \ --model Qwen/Qwen3-TTS-12Hz-1.7B-Base \ --backend openai-audio-speech \ --endpoint /v1/audio/speech \ --dataset-name seed-tts \ --dataset-path /path/to/seed-tts-eval \ --seed-tts-locale en \ --num-prompts 20 --num-warmups 2 \ --extra-body '{"task_type":"Base"}' \ --max-concurrency 1 --request-rate inf \ --percentile-metrics ttft,e2el,audio_rtf,audio_ttfp,audio_duration,audio_underrun \ --save-result --result-dir ./results关键衔接点:
--dataset-path指向本文解压出的seedtts_testset目录(源码中resolve_seed_tts_root会按{root}/{locale}/meta.lst布局解析,见 seed_tts_dataset.py);--dataset-name seed-tts对应 4 字段 + WAV 的全量格式;若使用seed_tts_smoke这种纯文本变体,则改用--dataset-name seed-tts-text;--seed-tts-locale en选择语言子目录(en或zh);- 默认情况下参考音频会以
data:audio/wav;base64,...内联进请求体,因此服务端无需--allowed-local-media-path;如需减小请求体,可改用file://形式并给服务端配置媒体路径白名单(seed_tts_dataset.py)。
仓库数据集对应关系总结(摘自 benchmarks/tts/README.md):
| 数据集 | 是否随仓库分发 | 格式 | 来源 |
|---|---|---|---|
seed-tts-design | ✅ | 5 字段 meta.lst | 仓库内 seed_tts_design/en/meta.lst |
seed_tts_smoke | ✅ | 4 字段 meta.lst(仅文本) | 仓库内 seed_tts_smoke/en/meta.lst |
seed-tts | ❌ | 4 字段 meta.lst + WAV | 本文流程下载的 Google Drive 归档(约 1.2 GB) |
seed-tts-text | ❌ | 4 字段 meta.lst(忽略 WAV 列) | 与seed-tts同一归档 |
八、常见问题与注意事项
gdown下载失败或网络不可达:数据集托管在 Google Drive,需要可访问的下载环境;下载完成后可先ls seedtts_testset/确认目录结构完整再继续解压后的步骤。FileNotFoundError: Seed-TTS meta not found:通常是--dataset-path指向的根目录下缺少{locale}/meta.lst,或解压后目录结构被改动,请对照第五节的布局检查。- 提取数量与基准规模匹配:
extract_tts_prompts.py的-n决定提取条数,基准命令的--num-prompts决定实际发送的请求数,两者可按需配合(如先提取 200 条,基准时只跑 20 条用于快速验证,200 条用于质量评估)。 - 清理时机:仅需文本 prompt 时可在提取后删除归档与解压目录;但
voice_clone(seed-tts)与 WER/SIM/UTMOS 质量评估需要参考 WAV 与转写,务必在完成这些基准后再清理。 - 语音克隆任务的模型限制:
-CustomVoice检查点不携带speaker_encoder权重,voice_clone 请求会在模型运行时抛出ValueError,因此 voice_clone 必须使用-Base检查点(见 benchmarks/tts/README.md)。
九、参考与延伸
- 数据集准备流程:本指南对应的仓库原文 download_process_data_seedtts.md
- Prompt 提取脚本实现:extract_tts_prompts.py
- TTS 通用基准测试总览与数据集映射:benchmarks/tts/README.md
- 数据集加载器(meta.lst 解析、locale 布局、内联音频):vllm_omni/benchmarks/data_modules/seed_tts_dataset.py
- 质量评估协议(WER/SIM/UTMOS):vllm_omni/benchmarks/data_modules/seed_tts_eval.py
- 数据集变体行为测试:tests/benchmarks/test_seed_tts_dataset_variants.py
完成数据准备后,即可将--dataset-path指向解压出的seedtts_testset目录,配合vllm bench serve --omni运行端到端的 TTS 吞吐、延迟与音质基准测试。
【免费下载链接】vllm-omniA framework for efficient model inference with omni-modality models项目地址: https://gitcode.com/GitHub_Trending/vl/vllm-omni
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考