Deep learning (DL) applications, built upon a heterogeneous and complex DL stack (e.g., Nvidia GPU, Linux, CUDA driver, Python runtime, and TensorFlow), are subject to software and hardware dependencies across the DL stack. One challenge in dependency management across the entire engineering lifecycle is posed by the asynchronous and radical evolution and the complex version constraints among dependencies. Developers may introduce dependency bugs (DBs) in selecting, using and maintaining dependencies. However, the characteristics of DBs in DL stack is still under-investigated, hindering practical solutions to dependency management in DL stack. To bridge this gap, this paper presents the first comprehensive study to characterize symptoms, root causes and fix patterns of DBs across the whole DL stack with 446 DBs collected from StackOverflow posts and GitHub issues. For each DB, we first investigate the symptom as well as the lifecycle stage and dependency where the symptom is exposed. Then, we analyze the root cause as well as the lifecycle stage and dependency where the root cause is introduced. Finally, we explore the fix pattern and the knowledge sources that are used to fix it. Our findings from this study shed light on practical implications on dependency management.
翻译:深度学习(DL)应用构建于异构且复杂的深度学习栈(例如Nvidia GPU、Linux、CUDA驱动程序、Python运行时及TensorFlow)之上,这些应用面临跨深度学习栈的软件与硬件依赖问题。依赖项之间的异步激进演化及复杂版本约束,对贯穿整个工程生命周期的依赖管理构成了挑战。开发人员在选择、使用和维护依赖项时可能引入依赖缺陷(DBs)。然而,深度学习栈中依赖缺陷的特性尚未得到充分研究,这阻碍了针对深度学习栈依赖管理的实用解决方案。为填补这一空白,本文首次开展了系统性研究,通过从StackOverflow帖子及GitHub议题中收集的446个依赖缺陷,刻画了跨深度学习栈的缺陷症状、根本原因及修复模式。针对每个依赖缺陷,我们首先探究其暴露时的症状、生命周期阶段及所属依赖层;随后分析引入缺陷的根本原因、生命周期阶段及所属依赖层;最后总结修复模式及修复过程中使用的知识来源。本研究的发现为依赖管理实践提供了重要启示。