Files
2026-01-20 10:54:30 +08:00

7.3 KiB
Raw Permalink Blame History

实现计划: FP16 性能评估 Benchmark 框架

概述

本实现计划将设计文档中的架构转化为可执行的编码任务。采用增量开发方式,每个任务都建立在前一个任务的基础上,确保代码始终可运行。使用 Python 作为实现语言,配合 TensorRT Python API、pynvml、OpenCV 等库。

任务

  • 1. 项目结构和基础配置

    • 1.1 创建项目目录结构和核心模块文件
      • 创建 benchmark/ 目录结构
      • 创建 __init__.pyconfig.pyutils.py 等基础文件
      • 创建 requirements.txt 依赖文件
      • 需求: 9.1, 9.4
    • 1.2 实现配置数据模型和 YAML 解析
      • 实现 BenchmarkConfig 数据类
      • 实现 YAML 配置文件加载和验证
      • 实现默认配置生成
      • 需求: 9.1, 9.3, 9.4
    • 1.3 实现命令行参数解析
      • 使用 argparse 实现命令行接口
      • 实现参数覆盖配置文件逻辑
      • 实现 --help 帮助信息
      • 需求: 9.2, 9.5
    • * 1.4 编写配置验证属性测试
      • Property 13: 配置参数验证
      • 验证: 需求 9.6
  • 2. TensorRT Engine 构建模块

    • 2.1 实现 TRTEngineBuilder 类
      • 实现 YOLOv11n 模型到 ONNX 的导出
      • 实现 ONNX 到 TensorRT FP16 Engine 的转换
      • 支持动态 Batch Size (1-16) 和多分辨率 (320, 480)
      • 需求: 1.1, 1.3, 1.5
    • 2.2 实现 Engine 缓存和元数据管理
      • 实现 EngineMetadata 数据类
      • 实现 Engine 文件哈希校验
      • 实现缓存命中判断逻辑
      • 需求: 1.2, 1.6
    • * 2.3 编写 Engine 构建属性测试
      • Property 1: TensorRT Engine 构建往返一致性
      • 验证: 需求 1.1
    • * 2.4 编写动态 Batch Size 属性测试
      • Property 2: 动态 Batch Size 推理正确性
      • 验证: 需求 1.3
  • 3. 检查点 - 确保 Engine 构建模块正常工作

    • 确保所有测试通过,如有问题请询问用户。
  • 4. TensorRT 推理引擎模块

    • 4.1 实现 TRTInferenceEngine 类
      • 实现 Engine 加载和上下文创建
      • 实现多 CUDA Stream 管理
      • 实现 GPU 内存分配和绑定
      • 需求: 1.4, 3.3, 3.4
    • 4.2 实现异步推理接口
      • 实现 infer_async() 方法
      • 实现 get_results() 方法
      • 实现 Stream 同步逻辑
      • 需求: 3.3, 3.5
    • * 4.3 编写多 Stream 并行属性测试
      • Property 6: 多 CUDA Stream 并行加速
      • 验证: 需求 3.5
  • 5. 视频解码模块

    • 5.1 实现 DecodeThread 类
      • 实现 RTSP 流解码线程
      • 实现本地视频文件解码
      • 实现合成图像源生成
      • 需求: 2.1, 2.5, 10.1, 10.2
    • 5.2 实现帧队列管理
      • 实现可配置长度的帧队列
      • 实现队列满时的丢帧策略
      • 实现解码统计信息采集
      • 需求: 2.2, 2.3, 2.4
    • 5.3 实现错误恢复和重连逻辑
      • 实现 RTSP 断连检测
      • 实现自动重连机制
      • 实现视频循环播放
      • 需求: 2.6, 10.5
    • * 5.4 编写解码线程属性测试
      • Property 3: 解码线程数量不变性
      • Property 4: 帧队列数据流完整性
      • 验证: 需求 2.1, 2.2, 2.4
    • * 5.5 编写模拟源帧率属性测试
      • Property 14: 模拟源帧率控制精度
      • 验证: 需求 10.3
  • 6. 检查点 - 确保解码模块正常工作

    • 确保所有测试通过,如有问题请询问用户。
  • 7. Batch 组装和 GPU 预处理模块

    • 7.1 实现 GPUPreprocessor 类
      • 实现 GPU 加速的 resize 操作
      • 实现 BGR 到 RGB 转换和归一化
      • 实现批量预处理接口
      • 需求: 3.6
    • 7.2 实现 BatchAssembler 类
      • 实现从多队列取帧逻辑
      • 实现 Batch 组装和填充
      • 实现帧丢失统计
      • 需求: 3.1, 3.2
    • * 7.3 编写 Batch 组装属性测试
      • Property 5: Batch 组装大小正确性
      • 验证: 需求 3.1
  • 8. 指标采集模块

    • 8.1 实现 GPU 指标采集器
      • 使用 pynvml 采集 GPU 利用率
      • 采集显存占用和带宽利用率
      • 实现采样间隔配置
      • 需求: 5.1, 5.2, 5.3, 5.4, 5.5
    • 8.2 实现性能指标采集器
      • 实现延迟记录和统计
      • 实现吞吐量计算
      • 实现帧丢失率计算
      • 需求: 6.1, 6.2, 6.3, 6.4, 6.5, 6.6
    • 8.3 实现 MetricsCollector 统一接口
      • 整合 GPU 和性能指标
      • 实现统计值计算平均、最大、最小、P95
      • 实现指标导出接口
      • 需求: 5.6
    • * 8.4 编写 GPU 指标属性测试
      • Property 8: GPU 指标采集有效性
      • 验证: 需求 5.1, 5.2, 5.3, 5.4, 5.6
    • * 8.5 编写性能指标属性测试
      • Property 9: 性能指标计算正确性
      • Property 10: 吞吐量计算一致性
      • 验证: 需求 6.1, 6.2, 6.3, 6.4, 6.5
  • 9. 检查点 - 确保指标采集模块正常工作

    • 确保所有测试通过,如有问题请询问用户。
  • 10. Benchmark 主控程序

    • 10.1 实现 BenchmarkRunner 类
      • 实现组件初始化和协调
      • 实现单次测试执行流程
      • 实现预热和稳定期处理
      • 需求: 4.5
    • 10.2 实现批量测试模式
      • 实现参数组合生成
      • 实现测试矩阵遍历
      • 实现进度显示和中断处理
      • 需求: 4.1, 4.2, 4.3, 4.4, 4.6
    • 10.3 实现 GPU 饱和检测
      • 实现饱和判定逻辑
      • 实现饱和点标注
      • 实现饱和原因记录
      • 需求: 7.3
    • * 10.4 编写测试参数组合属性测试
      • Property 7: 测试参数组合完整性
      • 验证: 需求 4.6
    • * 10.5 编写 GPU 饱和标注属性测试
      • Property 12: GPU 饱和标注正确性
      • 验证: 需求 7.3
  • 11. 结果输出和报告生成模块

    • 11.1 实现结果数据模型
      • 实现 TestResult 数据类
      • 实现结果序列化方法
      • 需求: 7.1, 7.2
    • 11.2 实现 JSON 和 CSV 导出
      • 实现 JSON 格式输出
      • 实现 CSV 格式输出
      • 实现文件命名和目录管理
      • 需求: 7.1, 7.2
    • 11.3 实现 Markdown 报告生成
      • 实现性能对比表格生成
      • 实现 GPU 饱和临界点分析
      • 实现参数选型建议生成
      • 需求: 7.4, 7.5, 7.6, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6
    • * 11.4 编写结果序列化属性测试
      • Property 11: 结果序列化往返一致性
      • 验证: 需求 7.1
  • 12. 集成和主入口

    • 12.1 实现主入口脚本
      • 创建 main.py 入口文件
      • 整合所有模块
      • 实现完整的 Benchmark 流程
      • 需求: 4.5, 9.2
    • 12.2 实现混合视频源支持
      • 实现 RTSP 和模拟源混合配置
      • 实现源类型自动检测
      • 需求: 10.4, 10.6
    • * 12.3 编写端到端集成测试
      • 测试单摄像头完整流程
      • 测试多摄像头并发场景
      • 测试结果输出完整性
  • 13. 最终检查点 - 确保所有测试通过

    • 确保所有测试通过,如有问题请询问用户。

注意事项

  • 标记为 * 的任务为可选任务,可跳过以加快 MVP 开发
  • 每个任务都引用了具体的需求编号以确保可追溯性
  • 检查点任务用于确保增量验证
  • 属性测试验证通用正确性属性
  • 单元测试验证具体示例和边界情况