返回介绍

XLA 概述

发布于 2025-01-22 23:08:20 字数 1833 浏览 0 评论 0 收藏 0

注意: XLA 是实验性的,仍处于 alpha 版本。大部分用例都看不到性能(提高速度或减少内存使用量)上的提高。我们已经发布了 XLA,这样的话,开源社区就可以为它的开发贡献力量了,而且有助于走出一条与硬件加速器整合之路。

使用提前编译

XLA 框架是实验性的,且处于活跃的开发状态。特别是,虽然已有操作的语义不太可能发生改变,但 XLA 不同,可以想见 XLA 中会不断加入更多操作,以覆盖更多重要的用例。XLA 的开发团队欢迎来自于社区的任何反馈,包括缺失的功能,以及通过 GitHub 提交的社区贡献。

我们为什么推出 XLA?

让 TensorFlow 用上 XLA,我们追求多个目标:

  • 改进执行速度: 对子图进行编译,以减少短时操作的执行时间,进而消除 TensorFlow 运行时相关的开销;融合管道化的操作以减少内存开销;针对已知张量形状优化,以支持更积极的常数传播。
  • 改进内存使用: 分析并调度内存使用,原则上可消除很多临时的缓存。
  • 减少对定制操作的依赖: 通过提高底层操作自动融合的性能,让其和定制操作中的手工融合一样高效,从而消除很多定制操作的必要性。
  • 减少移动足迹(mobile footprint): 提前编译子图,并生成一对文件(对象/头文件),它们可以直接编译到另一个应用程序中,从而消除 TensorFlow 运行时。这样做的结果是移动推理(mobile inference)的足迹会减少数个数量级。
  • 改善可移植性: 为新硬件编写新的后端会相对容易一些,因为大部分 TensorFlow 程序不需要怎么修改就可以在新硬件上跑了。这和专门为新硬件定制一体化操作形成对比,因为那样做的话 TensorFlow 程序需要重写才能用这些新的操作。

XLA 是如何工作的?

操作语义

为 XLA 开发一个新后端

下面的流程图展示了 XLA 的编译过程:

XLA 中有一些优化和分析是目标无关的,例如 CSE ,目标无关的操作融合,以及计算时分配运行时内存的缓冲区分析。

在目标无关步骤之后,XLA 将 HLO 计算发送到后端。后端可以执行进一步的 HLO 级优化,这次优化会将目标特定的信息和需求考虑在内。例如,XLA GPU 后端可以对 GPU 编程模型进行具体的操作融合,并决定如何将计算划分为流。在这个阶段,后端还可能与某些操作或组合匹配从而优化库调用。

下一步就是针对特定目标的代码生成了。结合了 XLA 的 CPU 和 GPU 后端使用 LLVM 来处理底层 IR、优化和代码生成。这些后端产生必要的 LLVM IR,用一种高效的方式来表示 XLA HLO 计算,然后调用 LLVM 从这个 LLVM IR 生成本地代码。

这个 GPU 后端目前通过 LLVM NVPTX 后端来支持 NVIDIA GPU;而 CPU 后端支持多种 CPU 指令集架构(ISA)。

支持的平台

使用提前编译

如果您发现本页面存在错误或可以改进,请 点击此处 帮助我们改进。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文