# 实现计划: FP16 性能评估 Benchmark 框架 ## 概述 本实现计划将设计文档中的架构转化为可执行的编码任务。采用增量开发方式,每个任务都建立在前一个任务的基础上,确保代码始终可运行。使用 Python 作为实现语言,配合 TensorRT Python API、pynvml、OpenCV 等库。 ## 任务 - [x] 1. 项目结构和基础配置 - [x] 1.1 创建项目目录结构和核心模块文件 - 创建 `benchmark/` 目录结构 - 创建 `__init__.py`、`config.py`、`utils.py` 等基础文件 - 创建 `requirements.txt` 依赖文件 - _需求: 9.1, 9.4_ - [x] 1.2 实现配置数据模型和 YAML 解析 - 实现 `BenchmarkConfig` 数据类 - 实现 YAML 配置文件加载和验证 - 实现默认配置生成 - _需求: 9.1, 9.3, 9.4_ - [x] 1.3 实现命令行参数解析 - 使用 argparse 实现命令行接口 - 实现参数覆盖配置文件逻辑 - 实现 --help 帮助信息 - _需求: 9.2, 9.5_ - [ ]* 1.4 编写配置验证属性测试 - **Property 13: 配置参数验证** - **验证: 需求 9.6** - [x] 2. TensorRT Engine 构建模块 - [x] 2.1 实现 TRTEngineBuilder 类 - 实现 YOLOv11n 模型到 ONNX 的导出 - 实现 ONNX 到 TensorRT FP16 Engine 的转换 - 支持动态 Batch Size (1-16) 和多分辨率 (320, 480) - _需求: 1.1, 1.3, 1.5_ - [x] 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 构建模块正常工作 - 确保所有测试通过,如有问题请询问用户。 - [x] 4. TensorRT 推理引擎模块 - [x] 4.1 实现 TRTInferenceEngine 类 - 实现 Engine 加载和上下文创建 - 实现多 CUDA Stream 管理 - 实现 GPU 内存分配和绑定 - _需求: 1.4, 3.3, 3.4_ - [x] 4.2 实现异步推理接口 - 实现 `infer_async()` 方法 - 实现 `get_results()` 方法 - 实现 Stream 同步逻辑 - _需求: 3.3, 3.5_ - [ ]* 4.3 编写多 Stream 并行属性测试 - **Property 6: 多 CUDA Stream 并行加速** - **验证: 需求 3.5** - [x] 5. 视频解码模块 - [x] 5.1 实现 DecodeThread 类 - 实现 RTSP 流解码线程 - 实现本地视频文件解码 - 实现合成图像源生成 - _需求: 2.1, 2.5, 10.1, 10.2_ - [x] 5.2 实现帧队列管理 - 实现可配置长度的帧队列 - 实现队列满时的丢帧策略 - 实现解码统计信息采集 - _需求: 2.2, 2.3, 2.4_ - [x] 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. 检查点 - 确保解码模块正常工作 - 确保所有测试通过,如有问题请询问用户。 - [x] 7. Batch 组装和 GPU 预处理模块 - [x] 7.1 实现 GPUPreprocessor 类 - 实现 GPU 加速的 resize 操作 - 实现 BGR 到 RGB 转换和归一化 - 实现批量预处理接口 - _需求: 3.6_ - [x] 7.2 实现 BatchAssembler 类 - 实现从多队列取帧逻辑 - 实现 Batch 组装和填充 - 实现帧丢失统计 - _需求: 3.1, 3.2_ - [ ]* 7.3 编写 Batch 组装属性测试 - **Property 5: Batch 组装大小正确性** - **验证: 需求 3.1** - [x] 8. 指标采集模块 - [x] 8.1 实现 GPU 指标采集器 - 使用 pynvml 采集 GPU 利用率 - 采集显存占用和带宽利用率 - 实现采样间隔配置 - _需求: 5.1, 5.2, 5.3, 5.4, 5.5_ - [x] 8.2 实现性能指标采集器 - 实现延迟记录和统计 - 实现吞吐量计算 - 实现帧丢失率计算 - _需求: 6.1, 6.2, 6.3, 6.4, 6.5, 6.6_ - [x] 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. 检查点 - 确保指标采集模块正常工作 - 确保所有测试通过,如有问题请询问用户。 - [x] 10. Benchmark 主控程序 - [x] 10.1 实现 BenchmarkRunner 类 - 实现组件初始化和协调 - 实现单次测试执行流程 - 实现预热和稳定期处理 - _需求: 4.5_ - [x] 10.2 实现批量测试模式 - 实现参数组合生成 - 实现测试矩阵遍历 - 实现进度显示和中断处理 - _需求: 4.1, 4.2, 4.3, 4.4, 4.6_ - [x] 10.3 实现 GPU 饱和检测 - 实现饱和判定逻辑 - 实现饱和点标注 - 实现饱和原因记录 - _需求: 7.3_ - [ ]* 10.4 编写测试参数组合属性测试 - **Property 7: 测试参数组合完整性** - **验证: 需求 4.6** - [ ]* 10.5 编写 GPU 饱和标注属性测试 - **Property 12: GPU 饱和标注正确性** - **验证: 需求 7.3** - [x] 11. 结果输出和报告生成模块 - [x] 11.1 实现结果数据模型 - 实现 `TestResult` 数据类 - 实现结果序列化方法 - _需求: 7.1, 7.2_ - [x] 11.2 实现 JSON 和 CSV 导出 - 实现 JSON 格式输出 - 实现 CSV 格式输出 - 实现文件命名和目录管理 - _需求: 7.1, 7.2_ - [x] 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** - [x] 12. 集成和主入口 - [x] 12.1 实现主入口脚本 - 创建 `main.py` 入口文件 - 整合所有模块 - 实现完整的 Benchmark 流程 - _需求: 4.5, 9.2_ - [x] 12.2 实现混合视频源支持 - 实现 RTSP 和模拟源混合配置 - 实现源类型自动检测 - _需求: 10.4, 10.6_ - [ ]* 12.3 编写端到端集成测试 - 测试单摄像头完整流程 - 测试多摄像头并发场景 - 测试结果输出完整性 - [ ] 13. 最终检查点 - 确保所有测试通过 - 确保所有测试通过,如有问题请询问用户。 ## 注意事项 - 标记为 `*` 的任务为可选任务,可跳过以加快 MVP 开发 - 每个任务都引用了具体的需求编号以确保可追溯性 - 检查点任务用于确保增量验证 - 属性测试验证通用正确性属性 - 单元测试验证具体示例和边界情况