400-123-4567
公司动态 行业新闻
浅谈深度学习中的IR(一):概念篇
浏览量:    所属栏目:【行业新闻】    时间:2024-04-15

IR这个词经常在深度学习框架中出现。IR全称Intermediate Representation,中文翻译成中间表示。中间表示四个字拆开来都能看懂,合起来到底是个什么意思呢?实际上很多优秀的文章已经剖析、探讨过这个话题了,但是这里我想用另一种不带技术专业术语的方式来谈谈我对深度学习中的IR理解。也许有些理解也不够到位,甚至会有偏差。

先看一下wiki里的定义:

“An Intermediate representation (IR) is the data structure or code used internally by a compiler or virtual machine to represent source code. An IR is designed to be conducive for further processing, such as optimization and translation. A "good" IR must be?accurate?– capable of representing the source code without loss of information – and?independent?of any particular source or target language. An IR may take one of several forms: an in-memory data structure, or a special tuple- or stack-based code readable by the program. In the latter case it is also called an intermediate language.” ?- Wikipedia

在编译器或虚拟机内部来代表源代码的表示,可能是数据结构也可能是代码,因此形式可以是不定的。深度学习框架中的IR概念也是启发自编译器。有些框架用protocol协议来定义,有些就直接使用C++ native的形式定义。在深度学习框架里IR想表示的是计算过程。需要注意的是:

  1. IR结构也有多种,在深度学习里是Graph-based IR,这是由于深度学习框架的特定结构导致的。基本上深度学习框架都是由一张DAG计算图来展现,因此基于图的IR基本就能够满足需求了。
  1. IR可以有多级,也就是所谓的multi-stage。下文也会提到。一般展现给用户的是Graph级别的IR。

说了半天,对于没有背景知识的人来说还是很抽象,听不懂啊。还是不知道IR具体是什么东西,也不知道到底含括哪些定义范围。那就用通俗点的语言来翻译一下。

IR就是一种语言。语言用于表达想法,IR用来表示执行过程的描述。各个框架想象成是世界上不同的国家。我们都知道每个国家都有自己的官方语言,所以每个框架基本上也都有自己的一套语言,这个语言就是IR。这个时候说的IR是图级别的,算是高级语言。有高级(high-level)就会有低级(low-level),这个会在后面讲到。这里的高级、低级并非我们生活中所说的意思,不代表低级就是不好的意思。可以将高级理解为通用性强,易被理解。越往下则越抽象,学习成本越高。「高级与低级是相对的,需要结合具体的使用场景来看。」

大家有了各自语言之后发现由于听不懂互相之间的语言导致不能直接交流沟通。那这个时间就需要有人来翻译一下,这个翻译工作谁来做?就是我们经常说的转换工具。这个工具就专门干这个事情,把别的框架定义的语言翻译到自己定义的语言体系中。翻译过程中可能会遇到其他语言中的有些词语在自己的语言里没有直接对应的词汇,那么就需要进行意译而不是直接翻译。回到转换工具里就是需要做合理化,换个类型来表示不支持的类型得出正确计算结果就可以。

这么看来转换工具作为交流的桥梁是个很重要的工具啊。但是有个问题又出现了,这世界上有很多种语言啊,总不可能一个个都翻译过来吧,工作量剧增。且可能随着新语言的不断涌现,需要不断的新增。这个时候就有人提出我们来搞一个统一通用的语言吧,大家都对接到我这来,我来给你们做统一的翻译,大家都能听懂我的话就行了,比如ONNX(Open Neural Network Exchange)。这就跟英语是国际上通用语言是一个道理啊。虽然不懂各自的语言,但是我们可以英语交流。「有部分框架是直接使用onnx来作为自己的表示,没有重新去设计一套语言。」所以大部分的框架的转化工具会把支持ONNX作为首选,支持了onnx基本上大部分其他框架只要是onnx支持的都能翻译过来。

转换工具完成了语言间的转接,而图优化器是针对本土语言的。那它需要优化什么呢?回想一下做总结报告写文档的时候,往往第一版写出来都是不太让人满意的。要么内容冗余,要么有些段落意图不明显没有提炼出重点。作者可能真的是尽力了,即使再修改几个版本整体看来还是不太精简优雅。这个时候我们就可以求助专业人士来润色一下。这个时候图优化器就登场了,对于传进来的计算描述,有些地方该简化的地方简化,冗余部分该删除删除。经过它的一顿操作,你就获得了专家认为目前最好的输出。但是说到底这个图优化器还是基于模版来实现的,可能是个伪专家。优化手段都是有固定模板的,只要匹配上自己定义的pattern就做相对应的修改。这样的做法可能会导致两个情况(这句是废话):1. 结果挺不错的, 2: 局部看起来不错,通篇整体看乱七八糟。这好比什么呢?做个不是那么恰当的比喻:你把自己写好的文档发给在x宝上找的文章修改店家。实际上也不是真的人工帮你修改,店家直接上传到不知道谁开发的一个模版替换系统点了下上传、润色、保存三个按钮。然后也不管保存出来的是个什么就直接给你发货了。最终结果就跟开盲盒一样,不知道里面是惊喜还是惊吓。

语言是用来使用的,在使用过程中伴随着发展,相对应的就需要调整。举个例子,古诗中的一骑红尘妃子笑, 这个到底念什么音?至少在我上学的时候学的是读,但后来被改成了。「这里我们不去探究是出于什么考虑。」那改了之后是不是要昭告所有人,我这边改了啊,以后要这么用。作为权威的汉语字典了就要做出修改,并在出版的时候会标注这是第几个修订版本。那么对于深度学习里面的语言来说也是一样的。也许有些语义不再适用,那么就需要去除。改完之后就得告诉使用者,这个版本做了哪些改动,最后支持了什么,对外展示就是Version x.x。同时新版本需要有兼容性。什么是兼容?还是开头说的例子,那我现在就读一骑(jì)红尘妃子笑行不行?一般不会认为你是错的(避开应试教育考试场景)。那这就是兼容了。兼容是出于目前主流广大使用者考虑,很多人一时接受、转换不过来。但新一代被教育者接受的信号都是后者,慢慢地就没有人会去使用旧时的读法,自然而然也就会被摒弃了。

多级IR的主要目的是把问题拆成多步来解决,那么一个复杂的问题就被拆解成了多个子问题来解决。「当IR从Graph IR逐级lower+优化到后端IR时,就可以认为这是个编译器链路了。所以TVM、MLIR等框架管自己叫深度学习编译器。」multi-stage的设计旨在每个子问题找到最优解。这样的解题思路存在的问题是所有局部的最优解加起来就是全局最优解么?答案是否定的。前一段时间TVM发布的在深度学习编译器新方向探索的文章中就提到了这个问题。

因为经过层层翻译发生了不可逆的部分信息损失,导致层级间存在边界问题。下级只能单向接受上游传来的结果,丢失了全局信息。因此需要层级间的交互交流来保障全局信息。什么意思呢?再举个不是特别合适的例子:

现在有一段法语文字,请翻译成中文。 最直接的方式肯定就是直接从法语翻译到中文,没有中间人传话,尽可能保障不失真。现在用翻译工具并再加一道工序来进行翻译,法语-->英语-->中文(就是玩儿?)。在法语到英语的过程就可能丢失一些语义了,再从英语到汉语得出的结果可能就不是原来想表达的意思了。这个例子不恰当的地方在于这里并没有high-level,low-level的概念,而相同点在于这个翻译器单次只支持2种语言间的转换。也就是从英语到汉语的时候已经不知道原来的法语原文是什么了。

IR是深度学习框架定制的交流规则,大家都通过这个规则来沟通。如果没有这样的规则就无法进行交流。且回顾一下大部分组件,都是在对IR进行操作。IR的地位不言而喻。当某个框架被广泛使用时,也就意味着其所定制的IR被广大群众使用,那么对于它的任意改动都可能造成不小的影响。

当需要新创建一门语言的时候就需要慎重地思考以下几个问题:

  1. 什么是好的IR?

    ?能清楚、简洁地呈现自己所想表达的,达成既有目标就是好的IR。

  1. 如何去设计IR?

    1. 把IR看成语言后,设计IR的问题就已经转换成如何设计一门语言。想要设计好一门语言不是一件容易的事情。

    2. 思考为什么要重新设计一套IR,是为了解决什么问题。

    3. 考虑清楚后明确目标,是为了能被更多的人理解还是想要更细节精准的描述。

      ?通常想表达的东西越多IR就会越复杂(这也是废话文学)。

    4. 了解目前主流语言体系,形成一个大局观。「不太会脱离现有的体系。」

    5. 参考主流语言的设计,并需要思考他们为什么要这么设计,能带给自己的启发是什么。

网站首页 高德娱乐简介 高德注册 高德登录 高德新闻 高德APP下载 高德代理加盟 联系我们

Copyright © 2012-2018 首页-高德娱乐-注册登录站 版权所有
电话:400-123-4567      手机:13800000000
E-mail:admin@youweb.com      联系人:张生
地址:广东省广州市天河区88号

琼ICP备xxxxxxxx号

扫一扫  关注微信

平台注册入口