越来越多地用于优化深度神经网络(DNN)模型,以满足性能,资源利用和其他要求,越来越多地使用深入学习(DL)编译器(例如TVM和Tensorrt)。这些编译器中的错误可以产生优化的模型,其语义与原始模型不同,并产生不正确的结果,影响了下流应用程序的正确性。但是,由于其复杂性,在这些编译器中找到错误是具有挑战性的。在这项工作中,我们提出了一种新的模糊测试方法,用于在深入学习编译器中查找错误。我们的核心方法使用(i)轻重量操作员规范来生成多样化但有效的DNN模型,使我们能够行使编译器的大部分转换逻辑; (ii)基于梯度的搜索过程,用于查找模型输入,该过程避免在模型执行过程中避免任何浮点异常值,从而减少了错过错误或错误警报的机会; (iii)差异测试以识别错误。我们在NNSmith中实施了这种方法,该方法在过去的七个月中为TVM,Tensorrt,OnxRuntime和Pytorch发现了65个新错误。在这52个已得到证实,项目维护者已确定了44个。
translated by 谷歌翻译
最近的深度学习(DL)应用主要建立在DL库的顶部。这些库的质量保证对于可靠的DL应用程序的可靠部署至关重要。因此,提出了一些技术来通过生成DL模型作为测试输入来测试DL库。然后,这些技术将这些DL模型馈送到DL库进行推断,以便行使与DL模型执行相关的DL库模块。但是,这些技术的测试有效性受生成的DL模型的多样性的限制。我们的研究发现,这些技术最多可以覆盖层对的11.7%(即,在两个层API之间调用序列)和层参数的55.8%(例如,在Conv2d中的“ Padding”)。结果,我们发现现有技术可能会错过特定层对和参数引起的许多错误。鉴于现有DL库测试技术的局限性,我们建议备忘录通过探索层类型,层对和层参数来有效地生成不同的DL模型。备忘录:(1)设计一种初始模型还原技术,以提高测试效率而不损害模型多样性; (2)为定制的Markov链蒙特卡洛(MCMC)算法设计一组突变操作员,以探索新的层类型,层对和层参数。我们在七个流行的DL库上评估了备忘录,其中包括四个用于模型执行(Tensorflow,Pytorch和MXNET和ONNX)和三个用于模型转换的备忘录(KERAS-MXNET,TF2ONNX,ONNX2PYTORCH)。评估结果表明,备忘录的表现优于最近的作品,覆盖了10.3%的层对,多15.3%的层参数和2.3%的库分支。此外,备忘录在最新版本的DL库中检测到29个新错误,其中17个由DL库开发人员确认,其中5个已确认的错误已修复。
translated by 谷歌翻译
现代深度学习框架提供嵌入在Python中的必要的急切执行编程接口,以提供生产的开发体验。但是,深度学习从业者有时需要捕获和转换程序结构以进行性能优化,可视化,分析和硬件集成。我们研究了深度学习中使用的程序捕获和转型的不同设计。通过设计典型的深度学习用例而不是长尾部,可以为程序捕获和转换创建更简单的框架。我们在Torch.fx中应用了这一原理,是一个完全在Python写入的Pytorch的程序捕获和转换库,并通过ML从业者进行高开发人员生产力优化。我们存在案例研究,展示了Torch.fx如何实现先前在Pytorch生态系统中无法访问的工作流程。
translated by 谷歌翻译
深度学习的快速进步正在导致一系列快速变化的模型,对计算的需求急剧增长。但是,随着框架将性能优化专门针对流行网络的模式,它们隐含地限制了推动研究进展的新颖和多样化的模型。我们通过定义灵活和用户可定制的管道来优化基于数据运动最小化的任意深神经网络的培训来赋予深度学习研究人员的能力。管道始于Pytorch或ONNX中的标准网络,并通过逐步降低转换计算。我们定义了四个级别的通用转换级别,从局部操作员优化到全球数据运动减少。这些在以数据为中心的图形中间表示上运行,该表示在各个级别的抽象级别表达计算和数据移动,包括扩展基本运算符,例如其基础计算的卷积。设计的核心是管道的互动性和内省性质。每个部分都可以通过Python API扩展,并且可以使用GUI进行交互调整。我们在十个不同的网络上展示了竞争性能或加速性,交互式优化发现了高效网络中的新机会。
translated by 谷歌翻译
深度神经网络(DNN)已成为移动设备上许多主要应用的核心推动因素。为实现高精度,DNN模型越来越深,数百甚至数千个操作层,导致高记忆和推理的计算要求。操作员融合(或内核/层融合)是许多最先进的DNN执行框架中的关键优化,例如Tensorflow,TVM和MNN。然而,这些框架通常根据某些模式采用融合方法,这些模式过于限制,以涵盖运营商和层连接的多样性。另一方面,基于多面体的循环融合技术,在没有运营商级信息的情况下对计算的低级视图工作,并且也可能错过潜在的融合机会。为了解决这一挑战,本文提出了一种名为DNNFusion的新颖和广泛的环路融合框架。这项工作的基本思想是在DNN的操作员视图下工作,但通过开发个人运营商及其组合的分类来扩展融合机会。此外,DNNFusion包括1)基于新的基于数学 - 性能的图形重写框架,以降低评估成本,并促进后续操作员融合,2)一种集成的融合计划,利用高级分析和精确的轻量级分析,以及3 )融合代码生成期间的附加优化。在15个DNN模型中广泛评估DNNFusion,具有各种任务,模型尺寸和图层计数。评估结果表明,DNNFusion最高达到8.8倍的融合机会,优于具有9.3倍的最先进的DNN执行框架。记忆要求减少和加速可以在移动设备上执行许多目标模型,甚至可以使它们成为实时应用程序的一部分。
translated by 谷歌翻译
对深度学习的有效部署的强烈需求(DL)应用促使丰富的DL生态系统的快速发展。为了跟上其快速进步,对于DL框架来说至关重要,以有效地将各种优化的库和运行时作为其后端集成,并通过正确使用它们来生成最快的可执行文件。但是,当前的DL框架需要重大的手动努力来整合多样化的后果,并且通常无法提供高性能。在本文中,我们提出了一个用于集成DL后端的自动框架的拼贴画。拼贴提供后端注册界面,允许用户精确指定各个后端的功能。通过利用可用后端的规范,拼贴搜索给定工作负载和执行环境的优化后端放置。我们的评估表明,拼贴画在没有手动干预的情况下将多个后端集成在一起,并且分别在两个不同的NVIDIA GPU和英特尔CPU上以1.21倍,1.39倍,1.40倍的现有框架。
translated by 谷歌翻译
我们提出了一个自动静态分析仪Pytea,可检测Pytorch码中的张量误差。张量误差在深度神经网络代码中是至关重要的;一旦在训练阶段中间发生张量形状不匹配,就会丢失大部分训练成本和中间结果。鉴于输入Pytorch源,Pytea静态跟踪每个可能的执行路径,收集路径的张量操作序列所需的张量形状约束,并决定如果约束是不匹配的(因此发生形状误差)。 Pytea的可扩展性和精确铰链对现实世界的Pytorch应用的特点:Pytea保守修剪后的执行路径数很少爆炸,循环简单,以通过我们的符号抽象来限制。我们测试了Pytea在官方Pytorch存储库中的项目中,以及在StackOverflow中发现的一些张计错误代码。 Pytea在几秒钟内成功地检测这些代码中的张量形状误差。
translated by 谷歌翻译
在过去十年中,已经开发出新的深度学习(DL)算法,工作负载和硬件来解决各种问题。尽管工作量和硬件生态系统的进步,DL系统的编程方法是停滞不前的。 DL工作负载从DL库中的高度优化,特定于平台和不灵活的内核,或者在新颖的操作员的情况下,通过具有强大性能的DL框架基元建立参考实现。这项工作介绍了Tensor加工基元(TPP),一个编程抽象,用于高效的DL工作负载的高效,便携式实现。 TPPS定义了一组紧凑而多才多艺的2D张镜操作员(或虚拟张量ISA),随后可以用作构建块,以在高维张量上构建复杂的运算符。 TPP规范是平台 - 不可行的,因此通过TPPS表示的代码是便携式的,而TPP实现是高度优化的,并且特定于平台。我们展示了我们使用独立内核和端到端DL&HPC工作负载完全通过TPPS表达的方法的效力和生存性,这在多个平台上优于最先进的实现。
translated by 谷歌翻译
回答集编程(ASP)已成为一种流行的和相当复杂的声明问题解决方法。这是由于其具有吸引力的地址解决方案的工作流程,这是可以轻松解决问题解决的方法,即使对于计算机科学外的守护者而言。与此不同,底层技术的高度复杂性使得ASP专家越来越难以将想法付诸实践。有关解决此问题,本教程旨在使用户能够构建自己的基于ASP的系统。更确切地说,我们展示了ASP系统Clingo如何用于扩展ASP和实现定制的专用系统。为此,我们提出了两个替代方案。我们从传统的AI技术开始,并展示元编程如何用于扩展ASP。这是一种相当轻的方法,依赖于Clingo的reation特征来使用ASP本身表达新功能。与此不同,本教程的主要部分使用传统的编程(在Python中)来通过其应用程序编程接口操纵Clingo。这种方法允许改变和控制ASP的整个模型 - 地面解决工作流程。 COMENT of Clingo的新应用程序课程使我们能够通过自定义类似于Clingo中的进程来绘制Clingo的基础架构。例如,我们可能会互动到程序的抽象语法树,控制各种形式的多射击求解,并为外国推论设置理论传播者。另一种横截面结构,跨越元以及应用程序编程是Clingo的中间格式,即指定底层接地器和求解器之间的界面。我们通过示例和几个非琐碎的案例研究说明了本教程的前述概念和技术。
translated by 谷歌翻译
There is an increasing need to bring machine learning to a wide diversity of hardware devices. Current frameworks rely on vendor-specific operator libraries and optimize for a narrow range of server-class GPUs. Deploying workloads to new platforms -such as mobile phones, embedded devices, and accelerators (e.g., FPGAs, ASICs) -requires significant manual effort. We propose TVM, a compiler that exposes graph-level and operator-level optimizations to provide performance portability to deep learning workloads across diverse hardware back-ends. TVM solves optimization challenges specific to deep learning, such as high-level operator fusion, mapping to arbitrary hardware primitives, and memory latency hiding. It also automates optimization of low-level programs to hardware characteristics by employing a novel, learning-based cost modeling method for rapid exploration of code optimizations. Experimental results show that TVM delivers performance across hardware back-ends that are competitive with state-ofthe-art, hand-tuned libraries for low-power CPU, mobile GPU, and server-class GPUs. We also demonstrate TVM's ability to target new accelerator back-ends, such as the FPGA-based generic deep learning accelerator.The system is open sourced and in production use inside several major companies.
translated by 谷歌翻译
深度神经网络(DNN)模型和数据集的快速增长大小引起了各种分布策略,如数据,张量模型,管道并行和其混合组合。这些策略中的每一个都提供自己的权衡,并在不同的模型和硬件拓扑上展示最佳性能。选择给定设置的最佳策略集是具有挑战性的,因为搜索空间组合增长,并且在群集上调试和测试昂贵。在这项工作中,我们提出了DISTIR,对于分布式DNN计算,这是针对有效分析而定制的分布式DNN计算的表达中间表示,例如模拟。这使得能够自动识别顶级执行策略,而无需在物理硬件上执行。与事先工作不同,Distir自然可以表达许多分发策略,包括管道并行性,具有任意时间表。我们对MLP培训和GPT-2推理模型的评估演示了DISTIR及其模拟器启用快速网格在跨越1000多种配置的复杂分配空间上搜索,以某些制度的数量级递减优化时间。
translated by 谷歌翻译
深度学习方法的最新突破引发了人们对基于学习的错误探测器的兴趣。与传统的静态分析工具相比,这些错误检测器是直接从数据中学到的,因此更容易创建。另一方面,它们很难训练,需要大量数据,而这些数据不容易获得。在本文中,我们提出了一种称为Meta Bug检测的新方法,该方法比现有基于学习的错误探测器具有三个至关重要的优势:Bug-Type通用(即,能够捕获在培训期间完全没有观察到的错误类型),可以自我解释(即能够在没有任何外部可解释方法的情况下解释其自身的预测)和样本有效(即,比标准错误检测器所需的培训数据要少得多)。我们的广泛评估表明,我们的元错误检测器(MBD)有效地捕获了各种错误,包括NULL指针解除,阵列索引外部漏洞,文件句柄泄漏甚至是并发程序中的数据竞赛;在此过程中,MBD还大大优于几个值得注意的基线,包括Facebook推断,一种著名的静态分析工具和FICS,即最新的异常检测方法。
translated by 谷歌翻译
一般矩阵乘法或GEMM内核在高性能计算和机器学习中占据中心位置。最近的NVIDIA GPU包括Gemm加速器,如Nvidia的张量核心。他们的剥削受到双语言问题的阻碍:它需要低级编程,这意味着低程序员的工作效率或使用只提供有限组件集的库。由于建立的组件方面的REPRASING算法经常引入开销,因此图书馆缺乏灵活性限制了探索新算法的自由。因此,使用GEMMS的研究人员无法立即享受编程生产力,高性能和研究灵活性。在本文中,我们解决了这个问题。我们在科学朱莉娅编程语言中展示了三组抽象和接口来编程宝石。界面和抽象共同设计用于研究人员的需求和朱莉娅的特征,以实现足够的担忧和灵活性的充分分离,以便在不支付性能价格的情况下轻松地扩展基本宝石。将我们的Gemms与最先进的图书馆Cublas和Cutlass进行比较,我们证明我们的性能在图书馆的相同球场中,并且在某些情况下甚至超过它,而无需在CUDA C ++中编写单行代码或者组装,而不面临灵活限制。
translated by 谷歌翻译
ALPA通过生成统一数据,操作员和管道并行性的执行计划来自动对大型深度学习(DL)模型的模型平行训练。现有的模型并行训练系统要求用户手动创建并行化计划,或者自动从有限的模型并行性配置中生成一个计划。它们不足以在分布式计算设备上扩展复杂的DL模型。 ALPA通过将并行性视为两个层次级别来分配大型DL模型的训练:操作员和操作员并行性。基于它,ALPA构建了一个新的分层空间,用于大规模的模型并行执行计划。 ALPA设计了许多汇编,以在每个并行性级别自动得出有效的并行执行计划。 ALPA实现了有效的运行时,以在分布式计算设备上协调两级并行执行。我们的评估表明,ALPA生成的并行化计划,即使在其设计的型号上,也可以匹配或超过手动模型并联训练系统。与专业系统不同,ALPA还推广到具有异质体系结构和模型的模型,而没有手动设计的计划。 ALPA的源代码可在https://github.com/alpa-projects/alpa上公开获得
translated by 谷歌翻译
Deep learning (DL) systems are increasingly deployed in safety-and security-critical domains including self-driving cars and malware detection, where the correctness and predictability of a system's behavior for corner case inputs are of great importance. Existing DL testing depends heavily on manually labeled data and therefore often fails to expose erroneous behaviors for rare inputs.We design, implement, and evaluate DeepXplore, the first whitebox framework for systematically testing real-world DL systems. First, we introduce neuron coverage for systematically measuring the parts of a DL system exercised by test inputs. Next, we leverage multiple DL systems with similar functionality as cross-referencing oracles to avoid manual checking. Finally, we demonstrate how finding inputs for DL systems that both trigger many differential behaviors and achieve high neuron coverage can be represented as a joint optimization problem and solved efficiently using gradientbased search techniques.DeepXplore efficiently finds thousands of incorrect corner case behaviors (e.g., self-driving cars crashing into guard rails and malware masquerading as benign software) in stateof-the-art DL models with thousands of neurons trained on five popular datasets including ImageNet and Udacity selfdriving challenge data. For all tested DL models, on average, DeepXplore generated one test input demonstrating incorrect behavior within one second while running only on a commodity laptop. We further show that the test inputs generated by DeepXplore can also be used to retrain the corresponding DL model to improve the model's accuracy by up to 3%.
translated by 谷歌翻译
由于它们在现实世界中的广泛采用,提高深神经网络(DNN)的运行时性能至关重要。现有的优化DNN的张量代数表达的方法仅考虑由固定的预定义运算符表示的表达式,在一般表达式之间缺少可能的优化机会。我们提出了Ollie,这是第一个基于衍生的张量程序优化器。 Ollie通过利用一般张量代数表达式之间的转换来优化张量程序,从而实现了一个更大的表达搜索空间,其中包括由先前工作作为特殊情况支持的搜索空间。 Ollie使用基于混合衍生的优化器,该优化器有效地结合了探索性和指导性推导,以快速发现高度优化的表达式。对七个DNN的评估表明,Ollie可以在A100 GPU上胜过2.73 $ \ times $(平均为1.46美元$ \ times $),在V100上最多可超过2.68 $ \ times $(1.51 $ \ times $) GPU分别。
translated by 谷歌翻译
深度神经网络(DNN)用于各种应用中。但是,与任何软件应用程序一样,基于DNN的应用程序受到错误的影响。以前的工作观察到DNN错误修复模式与传统错误修复模式不同。此外,由于具有多种选项来修复它们,因此由于具有多种选项的错误错误,那些错误模型是非微不足道的。为了支持开发人员在定位和修复错误中,我们提出DeepDiagnosis,一种定位故障的新型调试方法,报告错误症状,并提出了DNN程序的修复。在第一阶段,我们的技术监视培训模型,定期检查八种类型的错误条件。然后,在问题的情况下,它报告包含足够信息的消息来对模型执行可操作的维修。在评估中,我们通过GitHub和Stack Overflow彻底检查444型号-53现实世界,并由Autotrainer策划391。与UMLUAT和Deeplocalize相比,DeepDiagnosis提供卓越的准确性。我们的技术比Autotrainer更快,用于故障定位。结果表明,我们的方法可以支持其他类型的模型,而最先进的人才能够处理分类。我们的技术能够在培训期间报告在训练期间不明显作为数值错误的错误。此外,它可以提供用于修复的可操作的见解,而Deeplocalize只能在训练期间报告导致数值误差的故障。与其他方法相比,DeepDiagnosis表现出故障检测,错误本地化和症状的最佳能力。
translated by 谷歌翻译
人工智能(AI)对计算的巨大需求正在推动对AI的硬件和软件系统的无与伦比的投资。这导致了专用硬件设备数量的爆炸,现在由主要的云供应商提供。通过通过基于张量的界面隐藏低级复杂性,张量计算运行时间(TCR)(例如Pytorch)允许数据科学家有效利用新硬件提供的令人兴奋的功能。在本文中,我们探讨了数据库管理系统如何在AI空间中乘坐创新浪潮。我们设计,构建和评估张量查询处理器(TQP):TQP将SQL查询转换为张量程序,并在TCR上执行它们。 TQP能够通过在张量例程中实现与关系运算符的新颖算法来运行完整的TPC-H基准。同时,TQP可以支持各种硬件,而仅需要通常的开发工作。实验表明,与专用CPU和仅GPU的系统相比,TQP可以将查询执行时间提高到10美元$ \ times $。最后,TQP可以加速查询ML预测和SQL端到端,并在CPU基线上输送高达9 $ \ times $速度。
translated by 谷歌翻译
Deep learning frameworks have often focused on either usability or speed, but not both. PyTorch is a machine learning library that shows that these two goals are in fact compatible: it provides an imperative and Pythonic programming style that supports code as a model, makes debugging easy and is consistent with other popular scientific computing libraries, while remaining efficient and supporting hardware accelerators such as GPUs. In this paper, we detail the principles that drove the implementation of PyTorch and how they are reflected in its architecture. We emphasize that every aspect of PyTorch is a regular Python program under the full control of its user. We also explain how the careful and pragmatic implementation of the key components of its runtime enables them to work together to achieve compelling performance. We demonstrate the efficiency of individual subsystems, as well as the overall speed of PyTorch on several common benchmarks.
translated by 谷歌翻译
在各个领域采用深度学习(DL)的行业和学术界都有日益增长的需求,以解决现实世界的问题。深度加强学习(DRL)是DL在加固学习领域(RL)的应用。与任何软件系统一样,由于其程序中的故障,DRL应用程序可能会失败。在本文中,我们介绍了第一次尝试在DRL程序中分类故障。我们手动分析了使用众所周知的DRL框架(Openai健身房,多巴胺,Keras-RL,TensoRForce)和开发人员/用户报告的错误开发的DRL程序的761个文物(来自Stack Overflow帖子和GitHub问题)。我们通过几轮讨论标记和分类为已识别的故障。使用与19名开发人员/研究人员的在线调查验证了产生的分类法。为了允许在DRL程序中自动检测故障,我们已经确定了DRL程序的元模型,并开发了DRLINTER,一种利用静态分析和图形转换的基于模型的故障检测方法。 DRLINTINT的执行流程在于解析DRL程序,以生成符合我们元模型的模型,并在模型上应用检测规则以识别故障出现。使用15种合成DRLPRAGIONS评估DRLINTER的有效性,其中我们在分析的分析伪影中观察到的故障。结果表明,Drlinter可以在所有合成错误程序中成功检测故障。
translated by 谷歌翻译