7.3 KiB
7.3 KiB
实现计划: FP16 性能评估 Benchmark 框架
概述
本实现计划将设计文档中的架构转化为可执行的编码任务。采用增量开发方式,每个任务都建立在前一个任务的基础上,确保代码始终可运行。使用 Python 作为实现语言,配合 TensorRT Python API、pynvml、OpenCV 等库。
任务
-
1. 项目结构和基础配置
- 1.1 创建项目目录结构和核心模块文件
- 创建
benchmark/目录结构 - 创建
__init__.py、config.py、utils.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
- 1.1 创建项目目录结构和核心模块文件
-
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
- 2.1 实现 TRTEngineBuilder 类
-
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
- 4.1 实现 TRTInferenceEngine 类
-
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
- 5.1 实现 DecodeThread 类
-
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
- 7.1 实现 GPUPreprocessor 类
-
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
- 8.1 实现 GPU 指标采集器
-
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
- 10.1 实现 BenchmarkRunner 类
-
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
- 11.1 实现结果数据模型
-
12. 集成和主入口
- 12.1 实现主入口脚本
- 创建
main.py入口文件 - 整合所有模块
- 实现完整的 Benchmark 流程
- 需求: 4.5, 9.2
- 创建
- 12.2 实现混合视频源支持
- 实现 RTSP 和模拟源混合配置
- 实现源类型自动检测
- 需求: 10.4, 10.6
- * 12.3 编写端到端集成测试
- 测试单摄像头完整流程
- 测试多摄像头并发场景
- 测试结果输出完整性
- 12.1 实现主入口脚本
-
13. 最终检查点 - 确保所有测试通过
- 确保所有测试通过,如有问题请询问用户。
注意事项
- 标记为
*的任务为可选任务,可跳过以加快 MVP 开发 - 每个任务都引用了具体的需求编号以确保可追溯性
- 检查点任务用于确保增量验证
- 属性测试验证通用正确性属性
- 单元测试验证具体示例和边界情况