May the Feedback Be with You! Unlocking the Power of Feedback-Driven Deep Learning Framework Fuzzing via LLMs

🥹轶事(anecdote)

谨以此标题,致敬我最喜欢的科幻电影系列——星球大战(Star Wars)在2027年即将迎来50周年纪念日。标题中的第一个句子来源于星战中的一句经典台词“May the force be with you(愿原力与你同在)”。有趣的是,标题中的第一个单词对我来说还有一语双关的含义:这既代表我的生日🎂是五月份也是我最喜欢的乐队五月天🥕(Mayday)

🔭研究主题(research topic)

如何利用大语言模型🤖(LLM)增强模糊测试🛡️(Fuzzing),来为深度学习(DL)框架找bug🐞?

🧐关键问题(key question)

模糊测试(Fuzzing)经历三十多年的发展已经成为了一项成熟的软件测试技术。最近,将大语言模型引入模糊测试产生了令人兴奋的效果🤩,成为了一个有前景的方向。可是,尽管现代模糊测试的大厦🏙️已经建成,但是在它的上空中仍然漂浮着一朵乌云⛅️:我们真的充分利用了模糊循环中的反馈信息了吗,尤其是语义丰富的那些?

💡核心见解(core insight)

我们观察到,在整个模糊活动中,程序的执行会生成多样的反馈(覆盖信息,异常日志等),这其中包含了丰富的语义信息(自然语言or编程语言)。而大语言模型具备从语义上分析这些反馈信息的能力,生成一段分析摘要,从而更精确地引导下一轮迭代的测试生成。

🛠️方法设计(approach design)

我们设计了FUEL,它包含以下几个核心组件:

  1. 🤖生成模型与分析模型协同我们首次探索了在模糊测试中,利用LLM从语义上分析反馈信息的潜力🎆。分析模型agent分析每一次迭代中程序的执行反馈,用于引导生成模型agent生成高质量测试用例,循环往复直至模糊预算耗尽。
  2. 🔍️反馈感知的模拟退火算法:为了解决测试多样性的限制,我们融合了三种反馈信号作为价值函数并设计了一个反馈感知的模拟退火🔥(Feedback-aware Simulated Annealing)算法。通过将RAG任务重新建模为一个组合优化问题,来为生成LLM选择每一轮迭代中最高价值的算子,其优化目标是最大化价值函数。
  3. ❤️‍🩹程序自修复策略:为了解决测试有效性的限制,我们首次将程序自修复的思想引入到了DL框架测试中,分析模型会自动判断无效测试用例并打上一个patch来执行自动修复🪄。

⚙️工件实现(artifact implementation)

FUEL当前是一个针对DL框架的通用模糊器,并且具备极强的可扩展性。包含以下几个方面:

  • 🔮更强大的语言模型:在当前,FUEL装载了DeepSeek-V3和Qwen-coder-2.5。在未来,FUEL拥有与LLM同步进化🦋的能力,使用更加强大的LLM会进一步激发FUEL的性能。
  • 🔄更丰富的反馈类型:FUEL在反馈类型方面当前只考虑异常日志和代码覆盖。在未来,可以定制化更多的反馈类型🌟(例如:执行时间,内存使用,缓存复用等)来检测bug。也可以通过这种方式,迁移到其他更加复杂且大型的软件系统中。
  • 💫更多样的数据采样策略:我们目前只选取了DL框架中的核心算子作为算子集并使用了模拟退火算法来启发式搜索🎯。在未来,可以考虑扩充算子集并改用其他启发式搜索算法来进一步探索FUEL在测试多样性方面的潜力。

🤠真实世界影响力(real-world impact)

我始终相信,在真实软件系统上找到的真实的bug是评估一个软件测试技术是否真实有效的唯一标准。在过去的七个月里,FUEL为两个流行的深度学习框架(PyTorch和TensorFlow)找到了一共104个新的bug🐛,其中93个已经被开发者确认🥰,47个已经被修复🥳,5个被确认为安全漏洞🚨(分配了CVE编号,持续更新ing),14个被标记为高优先级🙀,1个被标记为最高优先级😱。5个bug修复将被正式记录为PyTorch 2.7和2.8发行版更新日志📓中的一部分与大家见面。