TitanFuzz 论文
深度学习库(TensorFlow 和 Pytorch)中的 bug 对下游任务系统是重要的,保障安全性和有效性。在深度学习(DL)库的模糊测试领域,直接生成满足输入语言(例如 Python )语法/语义和张量计算的DL API 输入/形状约束的深度学习程序具有挑战性。此外,深度学习 API 可能包含复杂的输入条件约束,难以在没有人工干预的情况下生成符合条件的输入用例。TitanFuzz 是首个直接利用大语言模型(LLM)生成测试程序来模糊测试DL库的方法。
API 级模糊测试:仅针对孤立 API 进行测试,无法暴露由 API 调用链引发的缺陷;模糊级模糊测试:缺乏多样化 API 序列,如 Muffin 需要手动注释考虑的深度学习 API 的输入/输出限制,并使用额外的 reshaping 操作保证有效连接,以及无法生成任意代码。

- log 函数应该为负数产生 NaN,CPU 调用 matrix_exp 时应该包含 NaN 值,但 GPU 调用时不输出任何 NaN 值。
- Bug:在 CPU 上计算时分正负号,导致分别出现正无穷和负无穷。正常:在 GPU 上计算时不分正负号,1/0 为正无穷。
| 传统 | LLM-based | |
|---|---|---|
| 基于规则/随机变异 | 基于分布概率生成 | 规则->统计建模 |
| 结构化输入 | 基于语义理解 | 语法->语义 |
| 人工设计策略 | Prompt | |
| 显式定义张量/类型约束 | 隐式学习 API 约束 | 标注->推理 |
| 单 API | 任意组合 | 代码覆盖率 |
LLM 为差分测试提供语义合理、适配不同后端的测试输入。

- 提供 step-by-step 的 prompt engineering,调用 codex 生成直接借用目标 API 的代码片段。
- 使用进化模糊算法,生成新的代码。
- 差分测试,在不同后端上执行,识别潜在错误。

Prompt 中包含了目标库和目标 API 定义(爬虫从官方文档爬取)并设计了分布指令,按照 Task 的顺序执行。原始种子程序从 Codex 中采样得到。

通过 Codex 生成初始种子,用 InCoder 去预测 mask 的代码片段以保持语义的连贯性,其中代码片段通过 Multi-Armed Bandit(MAB) 算法动态学习操作符优先级策略,并用 < s p a n > <span>


1431

被折叠的 条评论
为什么被折叠?



