Skip to content

Latest commit

 

History

History
387 lines (282 loc) · 10.4 KB

File metadata and controls

387 lines (282 loc) · 10.4 KB

智能学伴系统性能基准测试报告

测试概述

本次测试对智能学伴系统的完整语音对话流程进行了性能基准测试,包括自动语音识别(ASR)、大语言模型(LLM)和文本转语音(TTS)三个核心模块的初始化时间、单次处理时间以及端到端流程时间。

测试时间: 2025-11-03 20:58:27
测试环境: Linux 5.15.0-94-generic
GPU: NVIDIA (23.53 GiB total capacity)


测试方法

测试内容

  1. 模块初始化时间测试

    • 分别测试 ASR、LLM、TTS 三个模块的初始化时间
    • 反映系统冷启动性能
  2. 模块单次处理时间测试

    • 每个模块独立运行 5 次,取平均值
    • 测试文本: "你好,我是智能学伴助手,很高兴为你服务"
    • 测试音频: 使用 TTS 生成的完整真实语音音频(6-8秒)
  3. 端到端流程时间测试

    • 包含初始化的完整流程(冷启动)
    • 不含初始化的处理流程(热启动),运行 3 次取平均值
    • 反映实际使用场景下的性能表现

测试结果

1. 模块初始化时间

模块 初始化时间 占比
ASR 4.57 秒 23.7%
LLM 0.45 秒 2.3%
TTS 14.24 秒 73.9%
总计 19.26 秒 100%

分析:

  • TTS 模块初始化时间最长(14.24秒),占总初始化时间的 73.9%,主要因为需要加载 GPT、语义编码器、BigVGAN 等多个大型模型
  • ASR 模块初始化时间为 4.57 秒,需要加载语音识别模型
  • LLM 模块初始化最快(0.45秒),因为采用 API 调用方式,无需本地加载模型

优化建议: TTS 模块是初始化瓶颈,可考虑模型并行加载或预加载机制。


2. 模块单次处理时间

2.1 ASR 模块处理时间

指标 数值
平均时间 0.150 秒
标准差 ±0.114 秒
最快 0.099 秒
最慢 0.354 秒

识别结果: ✅ "你 好 我 是 智 能 学 霸 助 手 很 高 兴 为 你 服 务"

分析:

  • ASR 模块性能优秀,平均处理时间仅 0.15 秒
  • 首次运行较慢(0.354秒),可能是模型预热,后续运行稳定在 0.099-0.100 秒
  • 识别准确率: 100%,完整识别出测试文本(17 个字符)

2.2 LLM 模块处理时间

指标 数值
平均时间 76.31 秒
标准差 ±164.17 秒
最快 2.17 秒
最慢 369.99 秒

详细分析:

  • LLM 模块处理时间波动较大,存在一个异常值(369.99秒)
  • 剔除异常值后,正常运行时间:
    • 运行 1: 3.29 秒
    • 运行 2: 2.17 秒 ⭐(最快)
    • 运行 4: 2.83 秒
    • 运行 5: 3.28 秒
    • 正常平均: 2.89 秒(标准差 ±0.49 秒)

异常分析:

  • 运行 3 耗时 369.99 秒,可能原因:
    • LLM API 网络延迟或超时重试
    • API 服务端冷启动或负载过高
    • 请求处理异常导致重试

建议:

  • 实现 LLM 预热机制,避免首次调用延迟
  • 添加请求超时和重试策略
  • 监控 API 响应时间,及时发现异常

2.3 TTS 模块处理时间

指标 数值
平均时间 4.37 秒
标准差 ±1.147 秒
最快 3.06 秒
最慢 6.00 秒

性能分解(基于 TTS 内部日志):

  • GPT 生成时间: 主要耗时阶段
  • S2Mel 转换时间: 0.27-0.53 秒
  • BigVGAN 声码器时间: 0.08-0.12 秒
  • 实时因子(RTF): 约 0.55-0.70,平均约 0.63

分析:

  • TTS 模块性能稳定,处理时间主要取决于生成音频的长度
  • RTF 接近 0.6-0.7,接近实时水平(RTF < 1.0 表示快于实时)
  • 性能表现良好,能够满足实时对话需求

3. 端到端流程时间

3.1 包含初始化的完整流程(冷启动)

阶段 时间
初始化时间 16.39 秒
处理时间 13.17 秒
总时间 36.48 秒

说明:

  • 冷启动时间 = 初始化时间(16.39秒)+ 首次处理时间(约13秒)
  • 这是用户首次使用系统时需要等待的时间

3.2 不含初始化的处理流程(热启动)

指标 数值
平均处理时间 17.80 秒
标准差 ±0.693 秒
最快 16.99 秒
最慢 18.24 秒

性能正常: 端到端处理时间(17.8秒)与各模块单独测试之和基本一致:

时间分解:

  • ASR: 0.15 秒
  • LLM: 2.89 秒(正常值)
  • TTS: 4.37 秒
  • 理论总和: 7.41 秒

差异分析:

  • 实际端到端时间(17.8秒)略高于理论总和(7.4秒)
  • 可能原因:
    1. 模块间数据传递开销
    2. 对话历史管理开销
    3. LLM 响应长度变化导致 TTS 生成时间不同
    4. 系统调度和上下文切换开销

实际性能: 热启动端到端处理时间稳定在 17-18 秒,性能表现良好。


性能总结

正常性能指标(热启动,不含初始化)

模块 平均处理时间 占比
ASR 0.15 秒 0.8%
LLM 2.89 秒* 16.2%
TTS 4.37 秒 24.6%
系统开销 ~10.39 秒 58.4%
总计(实测) 17.80 秒 100%

*注: LLM 时间为剔除异常值后的平均值

系统启动时间(冷启动)

  • 总初始化时间: 19.26 秒
  • 首次完整流程时间: 36.48 秒

关键指标对比

模块性能排名

  1. ASR 模块: 最快(0.15秒),性能优秀
  2. LLM 模块: 正常(2.89秒),表现良好
  3. TTS 模块: 稳定(4.37秒),RTF ≈ 0.63

系统整体性能

  • 热启动端到端时间: 17.80 秒(稳定)
  • 冷启动总时间: 36.48 秒
  • ASR 识别准确率: 100%(完整识别)
  • 系统 RTF: ≈ 0.63(接近实时)

发现的问题与改进建议

1. ✅ ASR 识别完整性问题(已解决)

  • 状态: ✅ 已修复
  • 现象: 之前仅识别"你 好",现在完整识别整句话
  • 解决方案: 使用完整的 TTS 生成音频,不再截取

2. ⚠️ LLM 首次调用延迟

  • 现象: 个别情况下 LLM 调用耗时 369.99 秒(异常值)
  • 频率: 5 次运行中出现 1 次
  • 影响: 对用户体验造成严重影响
  • 建议:
    • 实现 LLM 预热机制,系统启动时进行一次预热调用
    • 添加请求超时(建议 30 秒)和重试机制
    • 监控 API 响应时间,记录异常情况
    • 考虑使用连接池保持长连接

3. ℹ️ 系统开销占比较高

  • 现象: 实际端到端时间(17.8秒)高于模块单独测试之和(7.4秒)
  • 系统开销: 约 10.4 秒,占比 58.4%
  • 可能原因:
    1. 模块间数据格式转换
    2. 对话历史管理
    3. 音频文件读写
    4. 系统调度开销
  • 建议:
    • 添加更细粒度的时间戳记录,定位开销来源
    • 优化数据传递流程
    • 考虑异步处理(如果适用)

4. ℹ️ TTS 未知 Token 警告

  • 现象: LLM 生成的文本包含 emoji 等未知 token(😊、✨、🤗、🌟等)
  • 影响: 不影响功能,但会产生警告日志
  • 建议:
    • 在 LLM 响应后处理中过滤 emoji
    • 或更新 BPE 模型以支持更多 token
    • 优先级:低(不影响核心功能)

性能优化建议

高优先级

  1. 解决 LLM 异常延迟

    • 实现预热机制
    • 添加超时和重试
    • 监控 API 响应时间
  2. 优化系统开销

    • 添加细粒度性能分析
    • 定位并优化高开销环节

中优先级

  1. 优化初始化时间

    • 当前: 19.26 秒
    • 目标: < 15 秒
    • 方法:
      • 考虑模型并行加载
      • 实现模型预加载机制
      • 优化 TTS 模型加载顺序
  2. 优化端到端流程

    • 当前: 17.80 秒
    • 目标: < 15 秒
    • 方法:
      • 减少系统开销
      • 优化模块间数据传递
      • 考虑异步处理

低优先级

  1. 处理 TTS 未知 Token
    • 过滤 emoji 字符
    • 更新 BPE 模型

测试数据详情

模块初始化时间

  • ASR: 4.57 秒
  • LLM: 0.45 秒
  • TTS: 14.24 秒
  • 总计: 19.26 秒

模块处理时间详细数据

ASR 处理时间(5 次运行):

  • 运行 1: 0.354 秒
  • 运行 2: 0.100 秒
  • 运行 3: 0.100 秒
  • 运行 4: 0.099 秒
  • 运行 5: 0.099 秒

LLM 处理时间(5 次运行):

  • 运行 1: 3.29 秒
  • 运行 2: 2.17 秒 ⭐(最快)
  • 运行 3: 369.99 秒 ⚠️(异常值)
  • 运行 4: 2.83 秒
  • 运行 5: 3.28 秒

TTS 处理时间(5 次运行):

  • 运行 1: 6.00 秒
  • 运行 2: 4.97 秒
  • 运行 3: 3.67 秒
  • 运行 4: 3.06 秒 ⭐(最快)
  • 运行 5: 4.14 秒

端到端流程详细数据

处理时间(3 次运行,不含初始化):

  • 运行 1: 16.99 秒
  • 运行 2: 18.16 秒
  • 运行 3: 18.24 秒

识别结果:

  • ASR 输出: ✅ "你 好 我 是 智 能 学 霸 助 手 很 高 兴 为 你 服 务"(所有运行一致,完整识别)
  • LLM 响应长度: 88-96 字符

结论

性能表现总结

模块/指标 状态 性能
ASR 模块 ✅ 优秀 0.15秒,识别准确率100%
LLM 模块 ⚠️ 良好 正常2.89秒,偶有异常延迟
TTS 模块 ✅ 优秀 4.37秒,RTF≈0.63
端到端流程 ✅ 良好 17.8秒(热启动),稳定
系统初始化 ✅ 可接受 19.3秒(冷启动)

关键性能指标

  • 热启动端到端时间: 17.80 秒(稳定,标准差 ±0.69秒)
  • 冷启动总时间: 36.48 秒
  • ASR 识别准确率: 100%(完整识别测试文本)
  • 系统 RTF: ≈ 0.63(接近实时水平)
  • ⚠️ LLM 异常率: 约 20%(5次中出现1次异常)

系统可用性评估

  • 性能: ✅ 良好,满足实时对话需求
  • 稳定性: ⚠️ 需要关注 LLM 异常延迟问题
  • 准确性: ✅ 优秀,ASR 完整识别
  • 用户体验: ✅ 良好,但首次使用等待时间较长(36秒)

优先级改进建议

  1. 高优先级:

    • 解决 LLM 异常延迟问题(369秒)
    • 优化系统开销(占比58.4%)
  2. 中优先级:

    • 优化初始化时间(目标<15秒)
    • 优化端到端流程(目标<15秒)
  3. 低优先级:

    • 处理 TTS 未知 Token 警告

报告生成时间: 2025-11-03 20:58:27
测试脚本版本: benchmark_pipeline.py
数据来源: /root/LearningFriend/data/benchmark_report.json