XLA 架构
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
为什么要构建 XLA?
对于将 XLA 用于 TensorFlow,我们有以下几项目标:
提高执行速度。编译子计算图以减少短暂运算的执行时间,从而消除 TensorFlow 运行时的开销;融合流水线运算以降低内存开销;并针对已知张量形状执行专门优化以支持更积极的常量传播。
提高内存使用率。分析和安排内存使用量,原则上需要消除许多中间存储缓冲区。
降低对自定义运算的依赖。通过提高自动融合的低级运算的性能,使之达到手动融合的自定义运算的性能水平,从而消除对多种自定义运算的需求。
减少移动资源占用量。通过提前编译子计算图并发出可以直接链接到其他应用的对象/头文件对,消除 TensorFlow 运行时。这样,移动推断的资源占用量可降低几个数量级。
提高便携性。使针对新颖硬件编写新后端的工作变得相对容易,在新硬件上运行时,大部分 TensorFlow 程序都能够以未经修改的方式运行。与针对新硬件专门设计各个整体运算的方式相比,这种模式不必重新编写 TensorFlow 程序即可有效利用这些运算。
XLA 工作原理
XLA 的输入语言称为“HLO IR”或仅为“HLO”(高级运算)。运算语义页面中介绍了 HLO 的语义。可以将 HLO 简单理解为编译器 IR。
XLA 接受在 HLO 中定义的计算图(“计算”)并将其编译为适用于各种架构的机器指令。XLA 采用模块化设计,可以轻松融入其他后端以针对某些新颖的硬件架构。TensorFlow 源代码树中包含适用于 x64 和 ARM64 架构的 CPU 后端,以及 NVIDIA GPU 后端。
下图显示了 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。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2022-06-07。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"内容需要更新"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻译问题"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/代码问题"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"易于理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"解决了我的问题"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u6700\u540e\u66f4\u65b0\u65f6\u95f4 (UTC)\uff1a2022-06-07\u3002"}
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2022-06-07。"]]