dgop:基于深度学习框架的算子差异测试实验项目

可用于测试深度学习算子在不同框架间的精度差异,自动挖掘易触发精度问题的测试样本。支持多种生成策略,包含42种变异操作,可构造benchmark并计算误差指标,适合实验和二次开发。【此简介由AI生成】

分支4Tags0
文件最后提交记录最后更新时间
30 天前
9 个月前
5 个月前
9 个月前
9 个月前
5 个月前

DGOP

DGOP 是一个面向深度学习算子的差异测试实验项目。它的核心目标很直接: 给定同一份输入张量,分别在 TensorFlowPyTorchMNN 上执行同一个算子, 再比较输出差异,尽量自动挖到更容易触发精度问题的测试样本。

项目里保留了多种生成策略(加权采样、Q-learning、邻域扩展、Predoo、GA 对比代码), 整体风格偏研究原型,适合继续做实验和二次开发。

项目在做什么

主要流程可以概括为四步:

  1. 随机生成 float16 可表示范围内的种子张量。
  2. 对种子张量应用 42 种变异操作(字节级、噪声、比例扰动等)。
  3. 调用三套框架实现同一算子,构造 benchmark 并计算误差指标。
  4. 把更容易触发精度问题的样本保存下来,用于后续分类、修复和统计分析。

目录说明

src/ 下和实验主流程相关的模块:

  • generator_utils.py: 种子生成、按索引执行变异方法。
  • mutations.py: 42 种变异算子的具体实现。
  • evaluator.py: 判断是否触发精度问题(支持 MRE/MARE)。
  • impl/: 三个框架的算子调用封装(tf.pypytorch.pymnn.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.py
  • src/qlearning/main.py
  • src/predoo/generate.py
  • src/classification/classification.py

这几个入口普遍通过 sys.argv 读参数,且默认会把数据写到 ./data/...。 建议先在小规模算子(如 relusigmoid)和小张量形状上试跑,确认路径和依赖都正常后再放大。

使用注意事项

  • 项目是研究代码,部分脚本带有硬编码(如 GPU 环境变量、固定循环时长)。
  • 个别历史脚本存在参数解析不够健壮的情况,正式批量实验前建议先手工检查。
  • 默认输出目录依赖相对路径,最好从 dgop 根目录启动。

项目介绍

可用于测试深度学习算子在不同框架间的精度差异,自动挖掘易触发精度问题的测试样本。支持多种生成策略,包含42种变异操作,可构造benchmark并计算误差指标,适合实验和二次开发。【此简介由AI生成】

定制我的领域