[论文解读] A Metaprogramming and Autotuning Framework for Deploying Deep Learning Applications
本文提出 Boda,一个元编程与自动调优框架,可在多种硬件平台上实现可移植的高性能 GPU 代码生成,用于深度学习运算。通过结合基于 C++ 的元编程与自动调优,该框架在 NVIDIA GPU 上实现了与厂商库性能相当的性能,并能以极少的手动工作量高效移植至高通和 AMD GPU。
In recent years, deep neural networks (DNNs), have yielded strong results on a wide range of applications. Graphics Processing Units (GPUs) have been one key enabling factor leading to the current popularity of DNNs. However, despite increasing hardware flexibility and software programming toolchain maturity, high efficiency GPU programming remains difficult: it suffers from high complexity, low productivity, and low portability. GPU vendors such as NVIDIA have spent enormous effort to write special-purpose DNN libraries. However, on other hardware targets, especially mobile GPUs, such vendor libraries are not generally available. Thus, the development of portable, open, high-performance, energy-efficient GPU code for DNN operations would enable broader deployment of DNN-based algorithms. Toward this end, this work presents a framework to enable productive, high-efficiency GPU programming for DNN computations across hardware platforms and programming models. In particular, the framework provides specific support for metaprogramming, autotuning, and DNN-tailored data types. Using our framework, we explore implementing DNN operations on three different hardware targets: NVIDIA, AMD, and Qualcomm GPUs. On NVIDIA GPUs, we show both portability between OpenCL and CUDA as well competitive performance compared to the vendor library. On Qualcomm GPUs, we show that our framework enables productive development of target-specific optimizations, and achieves reasonable absolute performance. Finally, On AMD GPUs, we show initial results that indicate our framework can yield reasonable performance on a new platform with minimal effort.
研究动机与目标
- 解决为深度学习运算手写优化 GPU 内核所面临的高复杂度与低可移植性问题。
- 减少在新型或非厂商支持的硬件平台上部署高性能 DNN 内核所需的技术工程工作量。
- 实现跨编程模型(CUDA 与 OpenCL)和硬件目标(NVIDIA、AMD、高通 GPU)的性能可移植性。
- 提供一个高效、可扩展的框架,支持 DNN 特定内核的元编程与自动调优。
- 证明自动调优与元编程可在无厂商特定库的情况下,为移动设备和新兴 GPU 平台实现具有竞争力的性能。
提出的方法
- 该框架采用基于 C++ 字符串模板的元编程方法,从高层 DNN 计算图生成优化的 C 级 GPU 内核。
- 它抽象了 CUDA 与 OpenCL 之间的底层差异,实现了编程模型间的语法与语义兼容性。
- 该框架支持静态循环展开与代码生成,通过模拟实际内核代码的元代码结构实现。
- 它集成了自动调优,用于探索并选择跨硬件平台的最优内核配置(例如:分块大小、数据类型)。
- 它支持对生成代码的性能分析与调试,为优化提供指导。
- 该框架可复用某一平台(如 NVIDIA)上已调优的内核作为新平台(如高通、AMD)调优的起点。
实验结果
研究问题
- RQ1元编程框架是否能在 NVIDIA GPU 上实现与 cuDNN 等厂商优化库相当的性能?
- RQ2在保持最小改动的前提下,同一高层 DNN 内核规范在不同 GPU 编程模型(CUDA 与 OpenCL)之间可移植的程度如何?
- RQ3自动调优在实现向新型硬件平台(如移动 GPU(高通)和新兴架构(AMD))快速性能可移植性方面有多高效?
- RQ4该框架是否能减少为非厂商支持硬件生成高效 GPU 内核所需的研发工作量?
- RQ5元编程在简化高度优化的 DNN 内核生成与调试方面起到什么作用?
主要发现
- 在 NVIDIA GPU 上,该框架在使用 CUDA 和 OpenCL 时均实现了与 cuDNN 相当的性能,证明了其在性能与编程模型可移植性方面的有效性。
- 在高通移动 GPU 上,该框架使一名此前无目标平台开发经验的开发者仅用数周的兼职时间便实现了合理性能。
- 在 AMD GPU 上,对已有代码进行自动调优后,仅通过极少的手动调优便生成了功能完整且性能合理的基线,验证了该框架作为平台特定优化基础的有效性。
- 使用 C++ 模板进行代码生成的元编程方法,相比 Perl 生成的汇编等低层替代方案,展现出更高的可维护性与可调试性。
- 该框架能够跨平台复用已调优的配置,显著降低了将 DNN 内核移植到新硬件的总体工程成本。
- 结果表明,该框架可作为高性能推理的可行、开源且无厂商依赖的替代方案,替代专有 DNN 库。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。