facebook 的Glow基础构架

 

开发人员可以使用传统的深度学习框架例如pytorch,caffe, tensorflow 创建NN模型。但是,支持新的体系结构及操作符是不可扩展的,因为添加新的运算符需要在每个支持的体系结构上实现,并且添加新体系结构需要为其实现所有运算符。

Glow 旨在使用神经网络计算图,优化它,并以更可扩展的方式为各种后端生成代码。 这包括在有效针对特定后端之前的独立于目标的优化和分析。

开放式神经网络交换(ONNX)是迈向开放式生态系统的第一步,使 AI 开发人员能够随着项目发展而选择正确的工具。 ONNX 为 AI 模型提供了一个开源格式。 它定义了一个可扩展的计算图模型,以及内置运算符和标准数据类型的定义。 最初专注于推理(评估)所需的功能。

Caffe2,PyTorch,Microsoft Cognitive Toolkit,Apache MXNet 和其他工具正在开发 ONNX 支持。 实现不同框架之间的互操作性并简化从研究到生产的路径将增加 AI 社区的创新速度。 

 

推理引擎的速度 CPU vs Glow

 

How Glow works

Glow 使硬件开发人员和研究人员的生态系统能够专注于构建可由深度学习框架(如 PyTorch)支持的下一代硬件加速器。 它接受来自常见深度学习框架的计算图,并为机器学习加速器生成高度优化的代码。

硬件加速器专门用于解决机器学习执行的任务。 它们通常包含大量执行单元,片上存储器组和特定于应用程序的电路,使 ML 工作负载的执行非常高效。 为了在专用硬件上执行机器学习程序,编译器用于协调不同的部分并使它们协同工作。 PyTorch 等机器学习框架依赖于编译器来实现加速硬件的有效使用。


Glow 旨在针对各种硬件加速器。编译器的硬件无关部分专注于与特定硬件模型无关的数学相关优化。除了与目标无关的优化之外,Glow 还包含许多可配置为支持多个硬件目标的实用程序和构建块。例如,编译器的内存分配器用于为各种硬件加速器生成有效代码,每个硬件加速器具有不同的内存配置。这些功能包括强大的线性代数优化器,广泛的测试套件,用于测试硬件加速器精度的基于 CPU 的参考实现,以及内存分配器,指令调度器等。

使用 Glow 可以减少将产品推向市场所需的时间。依靠现有的优化和功能可缩短开发时间,而广泛的测试套件可提高硬件提供商对编译器准确性及其与 PyTorch 规范的一致性的信心。

 

Glow 是一个可重定向的编译器,支持许多不同的后端。这意味着编译器的前几个阶段与目标无关,但随着您越来越接近指令选择,IR 变得更具针对性。这种设计并不是 Glow 独有的。许多编译器和虚拟机使用类似的技术来逐步规范化,优化程序并将程序降低到指令流中。 IR 的前两个级别在所有编译目标之间共享。编译器后端可以实现其他级别的中间表示。

 

Summary: The Lifetime of a Glow Instruction

本节总结了glow指令如何从开始编译的pipeline,到中间表示IR 的不同级别以及后端。 这是编译过程的high-level概述:
1. 图形通过图形加载器(从 ONNX 或 Caffe2 格式)加载,或通过 C ++ 接口构建。
2. 如果需要,图是可区分的。
3. 图是已优化的。
4. 线性代数节点降低发生。
5. 进行额外的优化,目标独立且目标特定。
6. 将图调为线性序列的节点,以最小化内存使用。
7. IRGen 将低级图转换为指令。
8. 执行low-level IR 优化。
9. 执行特定于后端的优化和代码生成。


 

你可能感兴趣的:(深度学习)