可用于测试深度学习算子在不同框架间的精度差异,自动挖掘易触发精度问题的测试样本。支持多种生成策略,包含42种变异操作,可构造benchmark并计算误差指标,适合实验和二次开发。【此简介由AI生成】
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 30 天前 | ||
| 9 个月前 | ||
| 5 个月前 | ||
| 9 个月前 | ||
| 9 个月前 | ||
| 5 个月前 |
DGOP
DGOP 是一个面向深度学习算子的差异测试实验项目。它的核心目标很直接:
给定同一份输入张量,分别在 TensorFlow、PyTorch、MNN 上执行同一个算子,
再比较输出差异,尽量自动挖到更容易触发精度问题的测试样本。
项目里保留了多种生成策略(加权采样、Q-learning、邻域扩展、Predoo、GA 对比代码), 整体风格偏研究原型,适合继续做实验和二次开发。
项目在做什么
主要流程可以概括为四步:
- 随机生成
float16可表示范围内的种子张量。 - 对种子张量应用 42 种变异操作(字节级、噪声、比例扰动等)。
- 调用三套框架实现同一算子,构造 benchmark 并计算误差指标。
- 把更容易触发精度问题的样本保存下来,用于后续分类、修复和统计分析。
目录说明
src/ 下和实验主流程相关的模块:
generator_utils.py: 种子生成、按索引执行变异方法。mutations.py: 42 种变异算子的具体实现。evaluator.py: 判断是否触发精度问题(支持MRE/MARE)。impl/: 三个框架的算子调用封装(tf.py、pytorch.py、mnn.py)。weighted_matrix/main_new.py: 基于权重的采样生成方法。qlearning/main.py: 基于 Q-learning 的采样生成方法。neighbor/main.py: 邻域扩展策略。classification/和repair/: 问题分类与修复实验。
辅助和历史实验代码:
predoo/: Predoo 思路相关脚本(含阈值分析、可视化)。ga/: 遗传算法对比实现(历史实验代码为主)。plots/、time/: 绘图、计时、统计相关脚本。
运行环境
推荐环境:
- Python 3.8 - 3.10
- numpy
- tensorflow
- torch
- MNN
- matplotlib
- scikit-learn
- openpyxl
如果你想先做最小化验证,numpy + tensorflow + torch + MNN 这几项是核心。
快速开始
在 dgop 根目录执行,先把项目路径加入 PYTHONPATH:
cd dgop
export PYTHONPATH=.
Windows PowerShell:
cd dgop
$env:PYTHONPATH = "."
然后可以先跑一段最小示例,确认核心流程通了:
from src.generator_utils import get_random_seed_tensor, exec_method_by_index
from src.evaluator import has_precision_problem_occurred
shape = (1, 3, 14, 14)
operator = "relu"
seed = get_random_seed_tensor(shape)
mutated = exec_method_by_index(seed, 0)
if isinstance(mutated, str):
print("mutation failed")
else:
res = has_precision_problem_occurred(mutated, operator, pattern="MRE", b=1e-4)
print("tf/torch/mnn:", res)
常用脚本入口
下面这些脚本是现在最常用的入口:
src/weighted_matrix/main_new.pysrc/qlearning/main.pysrc/predoo/generate.pysrc/classification/classification.py
这几个入口普遍通过 sys.argv 读参数,且默认会把数据写到 ./data/...。
建议先在小规模算子(如 relu、sigmoid)和小张量形状上试跑,确认路径和依赖都正常后再放大。
使用注意事项
- 项目是研究代码,部分脚本带有硬编码(如 GPU 环境变量、固定循环时长)。
- 个别历史脚本存在参数解析不够健壮的情况,正式批量实验前建议先手工检查。
- 默认输出目录依赖相对路径,最好从
dgop根目录启动。