论文 TENSORFLOW.JS: MACHINE LEARNING FOR THE WEB AND BEYOND 指出:



一般来说,我们在谈论什么样的性能冲击?它取决于型号吗?是否存在根本没有性能差异的情况?

最佳答案

像 TensorFlow v1 (Python) 的默认图形模型中的声明式(也称为延迟执行、图形模式)编程范式的主要性能优势来自以下几个方面:

  • 将整个模型下推到C++层,执行开销很大
    与解释型或非编译型语言(如 Python 和
    JavaScript
  • 模型计算图的独立路径的并行执行 。一个
    示例是由多个独立输入塔组成的模型。这些
    Towers 可以在 CPU 的不同内核或多个内核上并发执行
    同一主机的 GPU。
  • 由于在执行开始之前就知道整个模型,
    C++ 执行引擎可以在
    模型的计算图 。仅举几个例子:
  • 常量折叠 :图的子树,仅由无状态、
    常量节点上的确定性操作可以折叠成单个常量节点
  • Op fusion :在某些情况下,计算的几个相邻节点(ops)
    图可以用数学上等价但计算上更多的替代
    高效节点。
  • 修剪 :一些计算图包含对
    最终输出。图模型执行引擎可以事先看到
    并阻止这些节点执行。
  • 即时 (JIT) 编译 :图执行引擎可以采用
    整个图并将其编译为涉及较低级别的表示
    调度开销并且更容易接受
    在可用硬件上的高性能执行(例如,CUDA 程序
    适用于 NVIDIA 或兼容 GPU,适用于 Google TPU 的特殊说明,或
    甚至用于 WebGL 的着色器程序等)

  • 图形模式 TensorFlow 支持所有上述优化。为了
    更多细节,谷歌搜索术语“抓钩”和“XLA”。

    TensorFlow.js 采用命令式(又名 Eager)范式,主要基于
    可用性考虑。这类似于 TensorFlow 急切执行,
    PyTorch 和 NumPy。因此,它并没有包含上述所有内容
    优化的机会。

    然而,要意识到有一些方法可以从一个
    命令式程序(参见 TensorFlow v2 的 tf.function 装饰器和 JAX )。 TensorFlow.js 没有理由
    不能采用类似的范式来提升性能。只是需要没有
    已经足够清楚让产品团队优先考虑该功能。

    关于performance - TFJS 中的 Eager 风格的性能成本是多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54798625/

    10-12 16:43
    查看更多