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
扮演什么角色(注意构建XlaOp
s 的函数没有记录在已发布的文档中)。此外,当我添加两个 XlaOp
s(使用 +
或 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
具有更根本的意义。
除了标题问题之外,是否有使用多个XlaBuilder
s 的用例,或者您通常会为所有事情使用一个全局实例?
【问题讨论】:
【参考方案1】:XlaBuilder
是用于构建 XLA 计算的 C++ API - 从概念上讲,这就像构建一个包含各种操作的函数,您可以在不同的输入数据上反复执行。
一些背景知识,XLA 用作创建在各种目标加速器(CPU、GPU、TPU、IPU 等)上运行的可执行 blob 的抽象层,在概念上类似于“加速器虚拟机”,与之前的概念相似像PeakStream 这样的系统或导致ArBB 的工作线。
XlaBuilder
是一种将操作排入“计算”(类似于函数)的方法,您希望针对 XLA 可以针对的各种加速器集运行该计算。此级别的操作通常称为“高级操作”(HLO)。
返回的XlaOp
表示您刚刚入队的操作的结果。 (旁白/书呆子:这是“构建器”API 中使用的一种经典技术,它在后台以“静态单一分配”形式表示程序、操作本身和结果 的操作可以统一为一个概念!)
XLA 计算与函数非常相似,因此您可以考虑使用 XlaBuilder
执行的操作,例如构建函数。 (顺便说一句:它们被称为“计算”,因为它们不仅仅是一个简单的函数——从概念上讲,它们是可以与外部“宿主”世界对话并相互对话的协程通过网络设施。)
因此,XlaOp
s 不能在 XlaBuilder
s 中使用这一事实可能在该上下文中更有意义 - 就像在构建函数时您无法在内部获取中间结果一样其他函数,你必须用函数调用/参数来组合它们。在XlaBuilder
你可以Call
另一个构建计算,这就是你可能使用多个构建器的原因。
正如您所注意到的,您可以选择将所有内容内联到一个“大型构建器”中,但程序通常被构造为组合在一起的函数,并最终从几个不同的“入口点”调用”。 XLA 目前积极地专注于它看到 API 用户使用的入口点,但这是一个类似于内联决策的设计工件,如果 XLA 认为这是正确的做法,它可以在概念上重用从多个调用者构建/调用的计算。通常将事物排入 XLA 是最自然的做法,但便于您从“外部世界”进行描述,并允许 XLA 在 Just-in 中内联并积极专门化您在执行它们时建立的“入口点”计算-时间编译时尚。
【讨论】:
感谢 cdleary。所以一个XlaBuilder
就像程序员在写一个函数,每个XlaOp
要么代表函数中的中间值,要么代表函数的返回值,而计算(大概XlaComputation
)就是实际的final函数本身?你只能编写计算而不是XlaBuilder
s?以上是关于XlaBuilder 有啥用?的主要内容,如果未能解决你的问题,请参考以下文章