多级别堆栈不是问题!谷歌开源全新中介码与编译器框架 MLIR

简介: 对优化编译器设计与实现进行全新探索

雷锋网 AI 科技评论按:为了更好解决 TensorFlow 用户在使用不同种类的硬件(GPU、TPU、移动设备)时,由于多级别堆栈而导致的编译器与运行时错误,谷歌近日开源了一个全新的中介码与编译器框架 MLIR。

在过去,若想解决多级别堆栈问题,则需要我们构建新的软硬件堆栈生成器,这也意味着必须为每个新路径重新构建优化与转换传递。

TB1Wy2Idu3tHKVjSZSgXXX4QFXa.png

TensorFlow 能够以多种不同的方式运行,如:

将其发送至调用手写运算内核的 TensorFlow 执行器

将图转化为 XLA 高级优化器 (XLA HLO) 表示,反之,这种表示亦可调用适合 CPU 或 GPU 的 LLVM 编辑器,或者继续使用适合 TPU 的 XLA。(或者将二者结合!)

将图转化为 TensorRT、nGraph 或另一种适合特定硬件指令集的编译器格式

将图转化为 TensorFlow Lite 格式,然后在 TensorFlow Lite 运行时内部执行此图,或者通过 Android 神经网络 API (NNAPI) 或相关技术将其进一步转化,以在 GPU 或 DSP 上运行

谷歌的 MLIR(或称为多级别中介码)是一种表示格式和编译器实用工具库,介于模型表示和低级编译器/执行器(二者皆可生成硬件特定代码)之间,在生产质量组件的支持下,能够对优化编译器设计与实现进行全新探索。据了解,MLIR 深受 LLVM 的影响,并不折不扣地重用其许多优秀理念,比如拥有灵活的类型系统,可在同一编译单元中表示、分析和转换结合多层抽象的图等——这些抽象包括 TensorFlow 运算、嵌套的多面循环区域乃至 LLVM 指令和固定的硬件操作及类型。

MLIR 没有众所周知的固定或内置的操作列表(无 “内联函数”)。方言可完全定义自定义类型,即 MLIR 如何对 LLVM IR 类型系统(拥有一流汇总)、域抽象(对量化类型等经机器学习 (ML) 优化的加速器有着重要意义),乃至未来的 Swift 或 Clang 类型系统(围绕 Swift 或 Clang 声明节点而构建)进行建模。

另外值得一提的是,虽然 MLIR 充当 ML 的编译器,但它同样支持在编译器内部使用机器学习技术。MLIR 的扩展性有助于探索代码降阶策略,并在抽象之间执行逐步降阶。

具体开源链接:

GitHub 代码库

https://github.com/tensorflow/mlir

教程

https://github.com/tensorflow/mlir/blob/master/g3doc/Tutorials/Toy/Ch-1.md

演讲稿

https://drive.google.com/file/d/1hUeAJXcAXwz82RXA5VtO5ZoH8cVQhrOK/view

 

via https://medium.com/tensorflow/mlir-a-new-intermediate-representation-and-compiler-framework-beba999ed18d

雷锋网 AI 科技评论雷锋网(公众号:雷锋网)

目录
相关文章
|
移动开发 JSON JavaScript
华为快应用-怎样写一个全局的变量和方法
华为快应用-怎样写一个全局的变量和方法
122 0
华为快应用-怎样写一个全局的变量和方法
|
机器学习/深度学习 存储 运维
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.3(七)
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.3
|
安全 网络协议 架构师
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.5(一)
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.5
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.5(一)
嵌入式程序调用函数的内部过程和机制
嵌入式程序调用函数的内部过程和机制
嵌入式程序调用函数的内部过程和机制
|
边缘计算 网络虚拟化 数据中心
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.3(三)
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.3
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.3(三)
|
网络协议 数据可视化 安全
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.4(一)
《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.4(一)
|
边缘计算
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.1
《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.1
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.1
|
运维 BI 定位技术
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.5(六)
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.5
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.5(六)
|
安全 测试技术 数据安全/隐私保护
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.6(二)
《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.6
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.6(二)
|
运维 搜索推荐 数据挖掘
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.5(七)
《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.5(七)
带你读《思科软件定义访问 : 实现基于业务意图的园区网络》第二章软件定义访问体系结构2.5(七)