代码之家  ›  专栏  ›  技术社区  ›  joel DeyaEldeen

XlaBuilder的作用是什么?

  •  0
  • joel DeyaEldeen  · 技术社区  · 4 年前

    什么是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、 或者您通常会对所有内容使用一个全局实例?

    0 回复  |  直到 4 年前
        1
  •  5
  •   cdleary    4 年前

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

    在某些背景下,XLA作为一个抽象层,用于创建在各种目标加速器(CPU、GPU、TPU、IPU…)上运行的可执行程序块,概念上是一种“加速器虚拟机”,与早期系统(如 PeakStream 或者导致 ArBB .

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

    返回的 XlaOp 表示您刚刚排队的操作的结果。(旁白/nernedery:这是“构建器”API中使用的一种经典技术,这些API在引擎盖下以“静态单一分配”形式表示程序 活动 本身和 后果 的操作可以统一为一个概念!)

    XLA计算与函数非常相似,因此您可以考虑使用 XlaBuilder 比如建立一个函数。(旁白:他们 打电话 “计算”,因为它们不仅仅是一个简单的功能——从概念上讲,它们是协同程序,可以与外部“主机”世界对话,也可以通过网络设施相互对话。)

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

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

    推荐文章