论文 TENSORFLOW.JS: MACHINE LEARNING FOR THE WEB AND BEYOND 指出:
一般来说,我们在谈论什么样的性能冲击?它取决于型号吗?是否存在根本没有性能差异的情况?
最佳答案
像 TensorFlow v1 (Python) 的默认图形模型中的声明式(也称为延迟执行、图形模式)编程范式的主要性能优势来自以下几个方面:
与解释型或非编译型语言(如 Python 和
JavaScript
示例是由多个独立输入塔组成的模型。这些
Towers 可以在 CPU 的不同内核或多个内核上并发执行
同一主机的 GPU。
C++ 执行引擎可以在
模型的计算图 。仅举几个例子:
常量节点上的确定性操作可以折叠成单个常量节点
图可以用数学上等价但计算上更多的替代
高效节点。
最终输出。图模型执行引擎可以事先看到
并阻止这些节点执行。
整个图并将其编译为涉及较低级别的表示
调度开销并且更容易接受
在可用硬件上的高性能执行(例如,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/