一句话:提出 CRADLE,用跨实现不一致性检查检测深度学习库缺陷,并通过异常传播分析定位故障函数。
深度学习系统可靠性要求高,但测试困难:现有工作主要测试模型而非库实现,核心难点在于难以获知给定输入下库应有的输出。本文利用不同深度学习库对同一算法的多种实现,提出 CRADLE:先做跨实现不一致性检查以检测库中缺陷,再借助异常传播追踪与分析,定位造成不一致的故障函数。作者在 TensorFlow、CNTK、Theano 三个库、11 个数据集(含 ImageNet、MNIST、KGS Go)和 30 个预训练模型上评估,共检测出 12 个缺陷和 104 个唯一不一致,并为全部 104 个不一致都标出了与其成因相关的函数。
Deep learning (DL) systems are widely used in domains including aircraft collision avoidance systems, Alzheimer's disease diagnosis, and autonomous driving cars. Despite the requirement for high reliability, DL systems are difficult to test. Existing DL testing work focuses on testing the DL models, not the implementations (e.g., DL software libraries) of the models. One key challenge of testing DL libraries is the difficulty of knowing the expected output of DL libraries given an input instance. Fortunately, there are multiple implementations of the same DL algorithms in different DL libraries. Thus, we propose CRADLE, a new approach that focuses on finding and localizing bugs in DL software libraries. CRADLE (1) performs cross-implementation inconsistency checking to detect bugs in DL libraries, and (2) leverages anomaly propagation tracking and analysis to localize faulty functions in DL libraries that cause the bugs. We evaluate CRADLE on three libraries (TensorFlow, CNTK, and Theano), 11 datasets (including ImageNet, MNIST, and KGS Go game), and 30 pre-trained models. CRADLE detects 12 bugs and 104 unique inconsistencies, and highlights functions relevant to the causes of inconsistencies for all 104 unique inconsistencies.