4

XLA 课程XlaBuilder有什么用?文档描述了它的界面,但没有提供动机。

XlaBuilder文档中的演示文稿,以及源代码中的上述注释

// A convenient interface for building up computations.

表明它只是一个实用程序。然而,这似乎并不能解释它在其他地方的行为。例如,我们可以XlaOpXlaBuildervia构造一个

XlaOp ConstantLiteral(XlaBuilder* builder, const LiteralSlice& literal);

在这里,我不清楚扮演什么角色(在已发布的文档中没有记录builder构造 s 的注意函数)。XlaOp此外,当我添加两个XlaOps (使用+or Add)时,似乎必须使用相同的构建器构建操作,否则我会看到

F tensorflow/core/platform/statusor.cc:33] Attempting to fetch value instead of handling error Invalid argument: No XlaOp with handle -1

实际上,XlaOp保留了一个XlaBuilder. 这向我表明,它XlaBuilder具有更根本的意义。

除了标题问题之外,是否有使用多个XlaBuilders 的用例,或者您通常会为所有事情使用一个全局实例?

4

1 回答 1

3

XlaBuilder是用于构建 XLA 计算的 C++ API——从概念上讲,这就像构建一个充满各种操作的函数,您可以在不同的输入数据上一遍又一遍地执行该函数。

一些背景知识,XLA 用作一个抽象层,用于创建在各种目标加速器(CPU、GPU、TPU、IPU 等)上运行的可执行 blob,从概念上讲是一种“加速器虚拟机”,与早期系统(如PeakStream )在概念上相似或导致ArBB的工作。

XlaBuilder是一种将操作排入“计算”(类似于函数)的方法,您希望针对 XLA 可以针对的各种加速器集运行该计算。此级别的操作通常称为“高级操作”(HLO)。

返回XlaOp的代表您刚刚入队的操作的结果。(旁白/书呆子:这是“构建器”API 中使用的一种经典技术,它在后台以“静态单一分配”形式表示程序,操作本身和操作结果可以统一为一个概念!)

XLA 计算与函数非常相似,因此您可以想象自己在做什么,XlaBuilder就像构建一个函数一样。(顺便说一句:它们被称为“计算”,因为它们不仅仅是一个简单的功能——从概念上讲,它们是可以与外部“宿主”世界对话并通过网络设施相互对话的协程。)

因此,事实XlaOps 不能跨XlaBuilders 使用可能在该上下文中更有意义 - 就像在构建一个函数时您无法在其他函数的内部获取中间结果一样,您必须将它们组合成函数调用/参数。XlaBuilder您可以在Call其中构建另一个计算,这就是您可能使用多个构建器的原因。

正如您所注意到的,您可以选择将所有内容内联到一个“大型构建器”中,但程序通常被构造为组合在一起的函数,并最终从几个不同的“入口点”调用。XLA 目前积极地专注于它看到 API 用户使用的入口点,但这是一个类似于内联决策的设计工件,如果 XLA 认为这是正确的做法,它可以在概念上重用从多个调用者构建/调用的计算。通常将事物排入 XLA 是最自然的做法,但便于您从“外部世界”进行描述,并允许 XLA 在 Just-in 中内联并积极专门化您在执行它们时建立的“入口点”计算-时间编译时尚。

于 2021-12-14T18:55:14.917 回答