页面树结构

2017-11-09 ApacheCN 开源组织,第二期邀请成员活动,一起走的更远 : http://www.apachecn.org/member/209.html


MachineLearning 优酷地址 : http://i.youku.com/apachecn

转至元数据结尾
转至元数据起始
注意:XLA是实验性的,被认为是alpha。大多数用例在性能(速度或内存使用量减少)方面都不会有所改善。我们早期发布了XLA,因此开源社区可以为其开发做出贡献,并为硬件加速器的集成创建路径。

XLA(加速线性代数)是线性代数的领域专用编译器,用于优化TensorFlow计算。结果是服务器和移动平台上的速度,内存使用率和可移植性的改进。最初,大多数用户不会从XLA看到很大的好处,但欢迎使用XLA通过即时(JIT)编译提前(AOT)编译进行实验。特别鼓励面向新硬件加速器的开发人员试用XLA。

XLA框架是实验性的,并在积极的开发中。特别是,虽然现有操作的语义不太可能会发生变化,但预计会增加更多的操作来覆盖重要的用例。该团队欢迎社区通过GitHub提供关于缺少功能和社区贡献的反馈。

 

为什么我们建立XLA?

我们有几个目标,XLA与TensorFlow合作:

  • 提高执行速度 编译子图以减少短期Ops的执行时间,以消除TensorFlow运行时的开销,融合流水线操作以减少内存开销,并专门针对已知的张量形状以允许更积极的恒定传播。

  • 提高内存使用率 分析和调度内存使用,原则上消除了许多中间存储缓冲区。

  • 减少对自定义操作的依赖。通过改善自动融合的低级操作的性能,以匹配手动融合的自定义操作的性能,消除对许多自定义操作的需要。

  • 减少移动足迹。消除TensorFlow运行时间,提前编制子图并发出可以直接链接到另一个应用程序的对象/头文件对。结果可以将移动推理的足迹减少几个数量级。

  • 提高便携性。为新颖的硬件编写一个新的后端,相对容易,在这一点上,很大一部分TensorFlow程序将在该硬件上未经修改地运行。这与将新的硬件专用于单个单片机的方法形成对比,这需要将TensorFlow程序重写以利用这些操作。

 

XLA如何工作?

XLA的输入语言称为“HLO IR”,或者只是HLO(高级优化器)。HLO的语义在“ 操作语义”页面上有描述。将HLO视为编译器IR最为方便。

XLA采用HLO中定义的图形(“计算”),并将其编译成各种架构的机器指令。XLA是模块化的,因为它可以轻松地插入另一个后端来定位一些新颖的硬件架构。用于x64和ARM64的CPU后端以及NVIDIA GPU后端都在TensorFlow源代码树中。

下图显示了XLA中的编译过程:

XLA带有几个与目标无关的优化和分析,例如CSE,独立于目标的操作融合以及用于为计算分配运行时内存的缓冲区分析。

在独立于目标的步骤之后,XLA将HLO计算发送到后台。后端可以执行进一步的HLO级别分析和优化,这次是针对具体的信息和需要考虑的。例如,XLA GPU后端可以执行专门用于GPU编程模型的操作融合,并确定如何将计算分成流。在这个阶段,后端还可以将某些操作或其组合进行模式匹配以优化库调用。

下一步是针对特定于目标的代码生成。XLA中包含的CPU和GPU后端使用LLVM进行低级IR,优化和代码生成。这些后端以有效的方式发出代表XLA HLO计算所需的LLVM IR,然后调用LLVM从该LLVM IR发出本机代码。

GPU后端目前通过LLVM NVPTX后端支持NVIDIA GPU; CPU后端支持多个CPU ISA。

 

支持的平台

XLA目前支持x86-64和NVIDIA GPU上的JIT编译 ; 和 用于x86-64和ARM的AOT编译

 

  • 无标签