XlaBuilder 有啥用?

Posted

技术标签:

【中文标题】XlaBuilder 有啥用?【英文标题】:What is XlaBuilder for?XlaBuilder 有什么用? 【发布时间】:2022-01-17 05:25:48 【问题描述】:

XLA 类XlaBuilder 有什么用? The docs 描述它的界面,但不提供动机。

文档中的演示文稿,以及源代码中XlaBuilder 上方的评论

// A convenient interface for building up computations.

暗示它只是一个实用程序。然而,这似乎并不能解释它在其他地方的行为。例如,我们可以构造一个XlaOp 和一个XlaBuilder 通过例如

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

在这里,我不清楚builder 扮演什么角色(注意构建XlaOps 的函数没有记录在已发布的文档中)。此外,当我添加两个 XlaOps(使用 +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 的用例,或者您通常会为所有事情使用一个全局实例?

【问题讨论】:

【参考方案1】:

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 中内联并积极专门化您在执行它们时建立的“入口点”计算-时间编译时尚。

【讨论】:

感谢 cdleary。所以一个XlaBuilder就像程序员在写一个函数,每个XlaOp要么代表函数中的中间值,要么代表函数的返回值,而计算(大概XlaComputation)就是实际的final函数本身?你只能编写计算而不是XlaBuilders?

以上是关于XlaBuilder 有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

oracle forms builder里SET_BLOCK_PROPERY是干啥用的?怎么用

python builder方法是做啥用的

dowhile(0) 有啥用? [复制]

DataContext 有啥用?

UnmanagedMemoryStream 有啥用?

appStoreReceiptURL 有啥用?