MLIR:新建一个Dialect(一)

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 7 期,在对 MLIR 有了基本认识后,总览所有的重要概念。编辑自MLIR:Glossary.

转载请注明出处!

MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalgtosaaffine 这些 Dialect。各种不同的 Dialect 使不同类型的优化或转换得以完成。

本文开始介绍如何新建一个 Dialect。 更多 DefiningDialects

Read more

MLIR:LLVM总览

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 6 期,在对 MLIR 有了基本认识后,总览所有的重要概念。编辑自MLIR:Glossary.

转载请注明出处!

本文介绍 MLIR 项目的父项目—— LLVM 项目。

由来

LLVM 的名字最初由 Low Level Virtual Machine (底层虚拟机)而来,但现在已然成为一个模块化、可重用的编译工具集合。(所以它现在完全是独立出道,不再作为缩写被解释。)

LLVM 项目最初由伊利诺伊大学的 Chris Lattner 主持,该作者也是 MLIR 项目的主导者。它最初的目标是提供一种现代的、基于SSA的编译策略,它能够支持任意编程语言的静态和动态编译。

Read more

MLIR:重要术语、概念

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 5 期,在对 MLIR 有了基本认识后,总览所有的重要概念。编辑自MLIR:Glossary.

本文是 MLIR 相关术语、概念的总览。按首字母序。

转载请注明出处!

Read more

MLIR:Getting-started-2

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 5 期,接上期,使用 Polygeist 完成一个 C 代码的 MLIR 编译执行流程。

接上周文,现在我们已经有了几个重要的 MLIR 工具:

  • mlir-opt
    • MLIR 机器无关优化
  • mlir-translate
    • 不同 MLIR 间转换
  • llc
    • LLVM 编译器
  • clang/clang++
    • LLVM C/C++前端
  • cgeist
    • MLIR C/C++前端
Read more

科技:PyTorch,学起来

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

科技:PyTorch,学起来

当地时间 9 月 12 日,Linux 基金会在其官网宣布,PyTorch 已经转入 Linux 基金会。

深度学习领域,或是 AI 领域,有两大软件框架:Google 的 TensorFlow 和 Meta(Facebook) 的 PyTorch。

现在应该改称 Linux 基金会的 PyTorch 啦!

Read more

MLIR:Getting_started

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 4 期,介绍 MLIR 的安装。

MLIR 目前已经是 LLVM 项目的一部分,所以编译安装过程类似于 LLVM 其他项目的过程。

Read more

MLIR:EBNF,扩展巴科斯范式

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 3 期,介绍编译器基础概念 EBNF。

参考 Wiki:Extended Backus–Naur form

Read more

MLIR:静态单赋值,SSA

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为 MLIR 系列第 2 期,介绍基础概念 SSA。

Read more

MLIR:概览

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。

本文起,将结合工作经验对 MLIR 进行讲解。本文为开篇,内容来自Chris Lattner’s Homepage

Read more

AI:为什么是TPU?

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

接前回,本文补上What makes TPUs fine-tuned for deep learning? | Google Cloud Blog中的最后一部分和开头后组成全文。

由谷歌从零开始设计的张量处理单元 (TPU) 是一种定制的 ASIC 芯片。它用于负载机器学习工作,并已为谷歌的几个主要产品助力:翻译、照片、搜索助手和邮箱。借助 Cloud TPU,在 Google Cloud 上,所有开发人员和数据科学家在使用前沿的机器学习模型时也可以利用到 TPU 可扩展且易于使用的优势。在最新一期的年度会议 Google Next ‘18 上,我们宣布 Cloud TPU v2 已面向包括免费试用帐户在内的所有用户全面推出,同时发布了 Cloud TPU v3 alpha 版。

神经网络是如何工作的?

让我们看看机器学习需要什么样的计算,特别是神经网络。

例如,假设我们使用单层神经网络来识别手写数字的图像,如下图所示:

single layer neural network for recognizing

如果图像是 28 x 28 灰度像素的网格,则可以将其转换为具有 784 个值(维度)的矢量。识别数字“8”的神经元将这些值和参数值相乘(上面的红线)。

这些参数作为“过滤器”从数据中提取特征,从而体现图像和数字“8”的形状的相似性,其过程如图:

filter animation

这个就是神经网络对数据分类的最基本解释:将数据和它们各自的参数相乘(上面有颜色的点),然后将它们全部相加(右侧得到的点)。如果得到的分数最高,就意味着找到了输入数据与其对应参数之间的最佳匹配,也就很可能是正确答案。

简而言之,神经网络需要数据和参数之间的大量乘法和加法。我们经常将这些乘法和加法组织成矩阵乘法,就是你在高中代数中遇到过的那些。

所以问题就变成了如何以更少的功耗尽可能快地执行大型矩阵乘法。

CPU 是如何工作的?

什么是冯诺依曼瓶颈?CPU为什么不适宜做深度学习中的运算?

CPU 是基于冯诺依曼架构的通用处理器。这也就是说 CPU 与软件和内存一起工作。

CPU 的最大益处是它的灵活性。凭借其冯诺依曼架构,你可以在上百万种场景下加载任何类型的软件。你可以使用 CPU 在 PC 中进行文字处理、控制火箭发动机、执行银行交易或使用神经网络对图像进行分类。

但也就是由于 CPU 的灵活,硬件设备只有到它从软件中读到下一条指令的时候,它才知道自己要做什么。 CPU 必须在单次计算中将结果存储在 CPU 内的内存中(也就是所谓的寄存器或 L1 缓存)。这种内存访问是 CPU 架构的缺点,被称为冯诺依曼瓶颈。尽管大规模的神经网络计算意味着接下来的步骤是完全可预测的,但每个 CPU 的算术逻辑单元 (ALU),控制乘法器和加法器的组件)依序执行,每一次都访问内存。这限制了总吞吐量,并将增加能耗。

GPU 是如何工作的?

为了获得比 CPU 更高的吞吐量,GPU 使用了一个简单的策略:何不在一个处理器中配上几千个 ALU?当下的 GPU 通常在单个处理器中配备了 2,500–5,000 个 ALU,这就意味着可以同时执行几千个乘法和加法运算。

这种 GPU 架构适用于具有大规模并行性的应用程序,例如神经网络中的矩阵乘法。实际上,在深度学习的典型训练工作负载上,GPU 的吞吐量比 CPU 高出一个数量级。这也就是此时,GPU 是深度学习中最流行的处理器架构的原因。

但是,GPU 仍然是一个“通用”处理器,因为需要它支持各种各样的应用程序。这又回到了我们的基础问题——冯·诺依曼瓶颈。对于几千个 ALU 中的每一次计算,GPU 都需要访问寄存器或共享内存来读取和存储中间计算结果。由于 GPU 在其数千个 ALU 上更多的时候执行的是并行计算,因此它也相应地花费了更多的能耗来访问内存,同时复杂的布线也增大了 GPU 的面积。

TPU 是如何工作的?

当谷歌设计 TPU 时,他们做了一个 DSA(特定领域的架构)。也就是说,我们把它设计成了一个专门用于神经网络工作的矩阵处理器,而没有设计一个通用的处理器。TPU 不能运行文字处理软件、不能控制火箭引擎、也不能执行银行交易,但它可以以惊人的速度处理神经网络的大量乘法和加法运算,而消耗的功率和占用的访存却小得多。

Read more