SpeechRecognition/test/real/README_故障排查.md

5.1 KiB
Raw Permalink Blame History

端到端测试故障排查指南

⚠️ 测试卡住的常见原因

1. 首次运行下载模型(最常见)

症状CPU 占用不高,测试长时间无响应

原因

  • FunASR 模型首次运行需要下载(约 1-2GB
  • 下载速度取决于网络
  • 下载过程中测试会卡住等待模型加载

解决方案

# 手动预下载模型
python -c "from app.asr.asr_service import ASRService; ASRService()"

或等待 10-30 分钟(取决于网络)


2. 模型加载缓慢

症状CPU 占用低,内存占用逐渐上升

原因

  • ASR 模型很大Paraformer 约 200MB+
  • CPU 加载模型需要时间30 秒 -2 分钟)
  • 首次加载会初始化多个组件

解决方案

  • 耐心等待首次加载
  • 后续测试会快很多(模型已缓存)
  • 使用 GPU 可加速(如果有)

3. 音频/视频文件过大

症状:处理时间超长

原因

  • 长音频处理时间与长度成正比
  • 1 分钟音频 ≈ 10-30 秒处理时间CPU
  • 视频需要先提取音频

解决方案

# 在 test_config.yaml 中使用较小的测试文件
test_files:
  primary_video: "input/short.AVI"  # 使用短文件

4. pytest-timeout 未安装

症状:测试卡住后不会自动超时

解决方案

pip install pytest-timeout

🔍 快速诊断命令

检查测试环境

python test/real/check_e2e.py

运行最简单的测试(不卡)

# 只运行文件验证测试(立即完成)
pytest test/real/test_real_e2e.py::TestVideoFileValidation -v

# 只运行错误处理测试(不依赖 ASR
pytest test/real/test_real_e2e.py::TestErrorHandling -v

运行单个 ASR 测试(带详细输出)

# -s 显示 print 输出,便于观察进度
pytest test/real/test_real_e2e.py::TestASRRecognition::test_recognize_audio_file -v -s --timeout=600

查看模型缓存

# 检查模型是否已下载
dir app\asr /s /b | findstr ".pt"

🚀 推荐的测试流程

第一步:预下载模型(重要!)

# 在运行测试前,先手动加载一次模型
python -c "from app.asr.asr_service import ASRService; s = ASRService(); print('模型加载完成')"

第二步:运行快速验证测试

# 验证测试环境正常
pytest test/real/test_real_e2e.py::TestVideoFileValidation -v
pytest test/real/test_real_e2e.py::TestAudioFileValidation -v
pytest test/real/test_real_e2e.py::TestErrorHandling -v

第三步:运行单个 ASR 测试

# 使用短音频文件测试
pytest test/real/test_real_e2e.py::TestASRRecognition::test_recognize_audio_file -v -s

第四步:运行完整测试

# 所有端到端测试
pytest test/real/ -v -s --timeout=600

📊 预期处理时间参考

测试类型 文件大小 CPU 时间 GPU 时间
文件验证 - <1 秒 <1 秒
错误处理 - <1 秒 <1 秒
ASR 识别(短音频) 10MB 30-60 秒 10-20 秒
ASR 识别(长音频) 50MB 2-5 分钟 30-60 秒
视频转码 100MB 1-3 分钟 30-60 秒

💡 优化建议

1. 使用更小的测试文件

# test_config.yaml
test_files:
  primary_video: "input/short.AVI"  # 使用短文件

2. 跳过慢速测试

# 只运行快速测试
pytest test/real/ -v -m "not slow"

3. 并行测试(如果多个文件)

pip install pytest-xdist
pytest test/real/ -v -n 4  # 4 个进程并行

4. 使用 GPU如果有

# 在 asr_service.py 中
service = ASRService(device='cuda')

🆘 仍然卡住怎么办?

方法 1查看堆栈跟踪

Ctrl+C 中断测试,查看卡在哪里

方法 2增加超时时间

pytest test/real/ -v --timeout=1200  # 20 分钟超时

方法 3使用更短的测试文件

# 修改 test_config.yaml
primary_video: "input/short.AVI"

方法 4检查日志

# 查看详细输出
pytest test/real/ -v -s 2>&1 | tee test.log

正常测试的标志

  1. 首次运行

    • 模型下载10-30 分钟(网络依赖)
    • 模型加载30 秒 -2 分钟
    • 后续运行:快 10 倍
  2. 处理过程

    • CPU 占用50-100%(正常推理)
    • 内存占用2-4GB模型加载
    • 磁盘 IO中等读写临时文件
  3. 完成标志

    • 看到 标记
    • 显示处理时间
    • 生成结果文件

📝 测试输出示例

test/real/test_real_e2e.py::TestASRRecognition::test_recognize_audio_file

使用测试音频VID_20251031_132320_019_mono.wav (5.23 MB)

开始测试音频识别VID_20251031_132320_019_mono.wav
音频识别耗时45.32 秒
✓ 音频识别成功task_id: abc123...

PASSED [100%]

🔗 相关文档