HLO--XLA

HLO:
high level optimizer 高级优化器

XLA:
XLA(Accelerated Linear Algebra)-加速线性代数,Google推出的高性能机器学习领域编译器(编译型推理引擎),它可以在不更改源代码的条件下加速Tensorflow模型 提高TensorFlow的计算性能

计算图分为要计算的数据和算子 算子中要进行element-wise计算 把多个元素进行重复的element-wise计算融合为一个
将算子融合可减少申请算子间的中间结果所占的内存 也减少了加载消耗时间

XLA对性能的提升主要来源于将多个连续的element-wise算子融合为一个算子

XLA的输入语言是"HLO IR"。XLA将HLO描述的计算图(计算流程)编译为针对各种特定后端的机器指令。

XLA对输入的HLO计算图进行与目标设备无关的优化,如CSE,算子融合,运行时内存分配分析。输出为优化后的HLO计算图 HLO IR。
然后,将HLO计算图发送到后端(Backend),后端结合特定的硬件属性对HLO计算图进行进一步的HLO级优化,例如将某些操作或其组合进行模式匹配从而优化计算库调用。
最后,后端将HLO IR转化为LLVM IR,LLVM再进行低级优化并生成机器码。

HLO instructions are the atomic unit of the high-level compiler’s IR.

HloInstructions live inside of an HloComputation, which is analogous to a
function in other programming languages(类似于其他编程语言的函数). Nodes have no total order within
their computation. Instead, they have a partial ordering determined by their
data and control dependencies.

HLO does not have basic blocks or explicit “branch” instructions. Instead,
certain HloInstructions – namely, kWhile, kConditional, and kCall – encode
control flow. For example, the kConditional HLO executes one of two possible
computations, depending on the runtime value of a predicate.

HLO is pure (mostly). It has no concept of mutable state. Instead, data
values are produced by one HLO and flow into consumers across dependency
edges.

算子融合:
https://zhuanlan.zhihu.com/p/209029514?utm_source=qq
https://www.cnblogs.com/wujianming-110117/p/14992989.html
https://blog.youkuaiyun.com/Zzzzzcccnn/article/details/106614091
https://blog.youkuaiyun.com/Artyze/article/details/108796250

在这里插入图片描述

HLO:
high level optimizer 高级优化器

XLA:
XLA(Accelerated Linear Algebra)-加速线性代数,Google推出的高性能机器学习领域编译器(编译型推理引擎),它可以在不更改源代码的条件下加速Tensorflow模型 提高TensorFlow的计算性能

计算图分为要计算的数据和算子 算子中要进行element-wise计算 把多个元素进行重复的element-wise计算融合为一个
将算子融合可减少申请算子间的中间结果所占的内存 也减少了加载消耗时间

XLA对性能的提升主要来源于将多个连续的element-wise算子融合为一个算子

XLA的输入语言是"HLO IR"。XLA将HLO描述的计算图(计算流程)编译为针对各种特定后端的机器指令。

XLA对输入的HLO计算图进行与目标设备无关的优化,如CSE,算子融合,运行时内存分配分析。输出为优化后的HLO计算图 HLO IR。
然后,将HLO计算图发送到后端(Backend),后端结合特定的硬件属性对HLO计算图进行进一步的HLO级优化,例如将某些操作或其组合进行模式匹配从而优化计算库调用。
最后,后端将HLO IR转化为LLVM IR,LLVM再进行低级优化并生成机器码。

HLO IR可以分如下图所示的成三个层次,HloModule, HloComputation和HloInstruction。

HloModule:

一个编译单元,相当于一个完整的可执行程序,所以有入口函数,也就是 entry_computation, 有且仅有一个。输入可以是多个参数,但输出只有一个(root instruction的值),如果要返回多个值,需要把多个值构造成一个元组(tuple)返回。一个module可以包含多个computation,除了entry_computation,其他的都是"nested",,也就是被调用。ENTRY ----------------> 程序入口,ROOT--------------> 程序输出 一个HloModule可以包含很多个HloComputation

HloComputation

是HLO IR中间层的表示,相当于程序中的一个函数。一个HloModule只能有一个entry_conputation,其他的computation是被entry_computation调用的。我们可以把entry_computation类比作main函数。每个HloComputation可以包含多个HloInstruction.

HloInstruction

是HLO IR最底层的表示,顾名思义,相当于程序中的一条指令 可理解为op。每个HloComputation只能有一个root_instruction。root_instruction的output就是该computation的output。computation的input用parameter表示。HloInstruction也可以调用HloComputation。

HLO规定一个instruction必须只生成一个output。但是在实际中的,很多时候我们需要输出多个output。对于这种情况,我们需要将多个output打包成一个Tuple。如此,一个tuple类型的output中可以包含多个sub-output,也就是nested的。HLO中用Shape来表示nested output。从Shape中的tuple_shapes_ field是一个vector。

一个HloInstruction可包含多个算子

operation_semantics

https://www.tensorflow.org/xla/operation_semantics(英文打开)

单个算子没法运行 要重新组件成module(加ENTRY ----------------> 程序入口,ROOT--------------> 程序输出 等)才能运行

区别model和module

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值