|
|
||
|---|---|---|
| .. | ||
| netrans_api | ||
| netrans_cli | ||
| regression | ||
| system_test | ||
| README.md | ||
| conftest.py | ||
| quick_test.sh | ||
| run_tests.py | ||
| run_tests.sh | ||
README.md
Netrans 测试
测试环境: Ubuntu 20.04+, Python 3.10 (conda netrans)
目录结构
test/
├── conftest.py
├── run_tests.py # 主测试运行器
├── run_tests.sh / quick_test.sh # 快捷脚本
├── data/ # 共享测试数据
│ ├── models/
│ └── datasets/
├── netrans_api/ # Python API 测试
│ ├── unit/ # 单元测试
│ │ ├── test_base.py # 公共基类
│ │ ├── test_core_functions.py # 核心流程: load/quantize/export
│ │ ├── test_error_handling.py # 错误处理、边界条件、并发
│ │ ├── test_all_quantization_types.py # ~30 种量化类型逐类测试
│ │ ├── test_new_features_v6334.py # v6.33.4 新特性
│ │ ├── test_multicore.py # 多核集成 + CLI
│ │ ├── test_multicore_env.py # 多核环境变量纯单测
│ │ ├── test_measure.py # measure 计算量统计
│ │ ├── test_check_opset.py # ONNX opset 检查
│ │ ├── test_defensive.py # 防御性编程
│ │ ├── test_quantize_types.py # QuantizerType 枚举
│ │ ├── run_quantization_tests.py # 全量化类型测试运行器
│ │ └── test_performance.py # 性能基准
│ └── integration/ # 集成测试
│ ├── test_onnx_conversion.py
│ ├── test_caffe_conversion.py
│ ├── test_darknet_conversion.py
│ ├── test_tensorflow_conversion.py
│ ├── test_pytorch_conversion.py
│ ├── test_quantize_hybrid.py
│ ├── test_integration.py # 跨框架全流程、兼容性矩阵
│ ├── test_e2e_baseline.py # 端到端基线 + 可复现性
│ ├── integration_test.sh # 集成测试脚本
│ ├── quantize_hybrid/ # 混合量化测试
│ └── (NBG vs acuity 比对测试)
├── regression/ # 回归测试(按版本+日期命名)
└── netrans_cli/ # CLI 示例测试
运行测试
# 基础测试(核心功能)
python test/run_tests.py --level basic
# 完整测试
python test/run_tests.py --level all
# 全量化类型测试
python test/netrans_api/unit/run_quantization_tests.py
# 单个测试文件
python -m pytest test/netrans_api/unit/test_defensive.py -v
# 集成测试
bash test/netrans_api/integration/integration_test.sh
# Makefile 入口
make test-unit # 单元测试
make test-int # 集成测试
make test # 全部
覆盖场景
模型导入
- ONNX / TensorFlow / Darknet / Caffe 四框架加载
- mean/std 单值广播、列表广播、默认值
- channel_mean_value.txt 生成与格式验证
- 路径不存在、空目录、模型文件缺失
量化
- 常用类型:asymu8, symi8, symi16, fp16, dfpi16
- 全部约 30 种量化类型(含混合精度、float8 变体)
- KL散度(algorithm=1)、移动平均(2)、auto(3) 三种算法
- 无效量化类型拒绝、产物完整性验证
混合精度量化
- 基础 hybrid + dfpi16,platform=78e/8016
- dump / inference / export 全流程
- cust_qnt_layers 配置校验
前后处理
- FP16 支持 preprocess / postprocess
- symi16 预处理限制(抛 ValueError)、dfpi16 替代方案
- 连续不同量化类型间参数清理
- dataset 路径 fallback(无效/缺失/空文件)
模型导出
- pnna 平台导出、float32 浮点导出
- symi16 导出(preprocess=False)
- 前后处理集成导出、NBG 产物完整性
调试工具
- ONNX opset 版本检查(范围 7-17、边界值)
- measure FLOPs / 参数量统计(单元测试 + 集成测试验证真实模型)
- dump / inference(待补充)
NBG 一致性验证(netrans vs acuity,API + CLI 双路径)
所有 NBG 比对测试均:
- 在隔离 subprocess 中各自运行 netrans 和 acuity 原生命令
- 比较生成的 NBG 文件字节级一致性
- 同时覆盖 Python API 路径和 CLI 命令路径
| 测试文件 | 场景 | 模型 | 量化类型 |
|---|---|---|---|
| test_nbg_grayscale_vs_acuity | 灰度图输入 | caffe/lenet | float32, asymu8, fp16, symi8 |
| test_nbg_rgb_vs_acuity | 三通道输入 | onnx/yolov5s | float32, asymu8, fp16, symi8 |
| test_nbg_all_qtypes_vs_acuity | 全部量化类型 | onnx/yolov5s | ~22 种(QuantizerType.get_options()) |
| test_nbg_prepost_vs_acuity | 嵌入前后处理 | onnx/yolov5s | asymu8, symi8, dfpi16, fp16 |
| test_nbg_platform_vs_acuity | pnna vs pnna2 | onnx/yolov5s | asymu8, symi8, dfpi16, fp16 |
| test_nbg_multicore_vs_acuity | 多核 (2core/4core) | onnx/yolov5s | asymu8, symi8, dfpi16, fp16 |
错误处理
- 未 load 直接操作 → RuntimeError
- 无效路径、损坏模型、mean/std 异常值
- dataset.txt fallback 机制
防御性编程 (v6.33.5)
- sys.exit(1) → 异常抛出(FileNotFoundError / NetransError)
- _check_file_exists() 文件存在性前置校验
- YAML 空内容检测
- get_modelfile_name 确定性优先级 + 多模型检测
- os.system("mkdir") → os.makedirs(exist_ok=True)
性能
- 量化时间对比、算法对比、迭代次数影响
- 压缩比、吞吐量、内存剖析
多核
- 1core/2core/3core/4core 环境变量设置
- 无效配置拒绝
待补充
- dump 功能测试
- inference 推理验证测试
- pnna2 多核实际导出测试
- CLI 端到端测试
- hybrid 量化 NBG vs acuity 比对
- pnna2 多核实际导出测试
- CLI 端到端测试