[DASFAA' 20] TensorFlow 缺陷的实证研究
论文标题:An Empirical Study on Bugs inside TensorFlow
中文长摘要:
1、研究背景(context):近年来,深度学习一直是研究热点,研究人员利用深度学习技术解决了图分类、计算机视觉、语音识别、自然语言处理和软件分析。具体来说,在数据库研究界,深度学习技术和数据库技术在各个方面相互促进。一方面,深度学习技术用于处理各种数据库问题(例如,使用深度强化学习模型并调整数据库配置)。另一方面,数据库技术用于改进深度学习系统(例如,优化神经网络)。而程序员在开发深度学习相关应用时,一般是使用一些深度学习框架,其中TensorFlow 是最受欢迎的,最近的一项研究表明,GitHub 的 36,000 多个应用程序都是基于 TensorFlow 构建的,深度学习框架中的一个错误可能会导致许多应用程序中的错误。
2、目的(Objective):为了更好地理解深度学习程序的错误,研究人员对这些错误进行了实证研究,之前的研究人员仅分析了 TensorFlow 客户端(调用 TensorFlow 的 API 的程序)的问题,没有研究探索过流行的深度学习库中的错误。尽管 TensorFlow 中的错误影响了成千上万的客户,但关于这些错误的许多问题仍然缺乏理解。因此在本文中,作者首次进行了实证研究来分析典型深度学习库(即 TensorFlow)中的错误。
3、方法(Method):作者提出了两个问题:(1)TensorFlow 中出现 bug 的症状(Symptom,例如Function Error和崩溃)和根因(Root Cause,例如逻辑错误和维度不匹配)是什么?(2)这些bug在TensorFlow里位于哪些位置?然后针对这两个问题对bug进行研究。
首先作者通过筛选,从github上获取了本文实验的数据集,最后总共选择了 300 个错误修复来进行后续分析。然后从数据集中分析提取信息,主要是从框架组件、bug症状以及根本原因入手进行分析。
4、结果(Result & Findings):
(1).与症状相比,根因更具决定性,因为有几个根因主导了症状(依据是关联规则分析中的lift系数)。
(2).TensorFlow 的症状和原因更像是一个普通的软件系统(例如 Mozilla),而不是机器学习系统(例如 Lucene)。
(3).对于 TensorFlow 错误的症状,构建失败与不一致、配置和引用的类型错误有关,而警告式错误与不一致、处理和类型混淆有关。对于 TensorFlow 错误的根本原因,维度不匹配导致功能错误,而类型混淆与功能错误、崩溃和警告式错误相关。
(4).在 TensorFlow 中,主要 bug 出现在深度学习算法及其接口中,不同平台编译、部署和安装 TensorFlow 的 bug 占比较小。
(5).崩溃和构建失败是常见的症状,不一致是组件之间常见的根本原因。对于那些最容易出错的组件,发现内核包含许多语义错误,而 API 包含与张量计算相关的根本原因,例如维度不匹配和类型混淆。在库、工具等相关组件中,构建失败现象比较普遍,大部分的bug都是由于不一致造成的。
5、结论(Conclusions):尽管研究人员已经进行了实证研究以了解深度学习框架的错误,但这些研究集中在其客户端的错误,框架内部错误的性质在很大程度上仍然未知。为了加深对此类 bug 的理解,本文作者分析了 TensorFlow 内部的 202 个 bug。研究结果表明:(1)其根本原因比其症状更具决定性; (2) 传统软件中的 bug 与 TensorFlow 有很多共同的特点; (3) 不适当的数据格式(维度和类型)在 API 实现中很容易出现错误并且很常见,而不一致的错误在其他支持组件中很常见。