在 Node.js 中直接运行 TensorFlow SavedModel,无需转换
2020 年 1 月 14 日
作者:张康毅、Sandeep Gupta 和 Brijesh Krishnaswami

TensorFlow.js 是一个开源库,允许您在 JavaScript 中定义、训练和运行机器学习模型。该库为来自广泛的 JavaScript 社区的开发者提供了新工具,让他们能够构建和部署机器学习模型,并开启了机器学习的新应用场景。例如,TensorFlow.js 可以在所有主流浏览器、Node.js 的服务器端运行,最近也出现在了 微信React Native 中,为混合移动应用提供了访问 ML 的能力,而无需离开 JS 生态系统。我们现在很高兴地为 Node.js 开发者带来一种新的方式,让他们能够轻松地部署预训练的 TensorFlow SavedModel,并实现高性能,无需进行模型转换。

TensorFlow.js 的主要优势之一是 JavaScript 开发者可以轻松地部署预训练的 TensorFlow 模型进行推理。TensorFlow.js 提供了 tfjs-converter 工具,可以将 TensorFlow SavedModel、TFHub 模块或 Keras 模型转换为 JavaScript 兼容的格式。但是,转换工具要求 JavaScript 开发者安装 Python TensorFlow 包并学习如何使用它。此外,转换工具不支持 TensorFlow 操作的完整集合(支持的操作),因此如果模型包含不支持的操作,则该工具无法对其进行转换。

Node.js 中的原生 SavedModel 执行

我们很高兴地宣布在 Node.js 中原生支持 TensorFlow SavedModel 执行。您现在可以将预训练的 TensorFlow 模型以 SavedModel 格式导入,通过 @tensorflow/tfjs-node(或 tfjs-node-gpu)包在 Node.js 中加载它,并在无需使用 tfjs-converter 的情况下执行模型进行推理。

TensorFlow SavedModel 包含一个或多个名为 SignatureDef 的命名函数。如果您有一个预训练的 TensorFlow SavedModel,则可以通过一行代码在 JavaScript 中加载模型的 SignatureDef,模型即可用于推理。
const model = await tf.node.loadSavedModel(path, [tag], signatureKey);
const output = model.predict(input);
您也可以将多个输入作为数组或映射提供给模型
const model1 = await tf.node.loadSavedModel(path1, [tag], signatureKey);
const outputArray = model1.predict([inputTensor1, inputTensor2]);

const model2 = await tf.node.loadSavedModel(path2, [tag], signatureKey);
const outputMap = model2.predict({input1: inputTensor1, input2:inputTensor2});
如果您想检查 TensorFlow SavedModel 的详细信息,以查找模型标签和签名信息(也称为 MetaGraphs),则可以通过 JavaScript 帮助程序 API 解析它们,类似于 TensorFlow SavedModel 的 客户端工具
const modelInfo = await tf.node.getMetaGraphsFromSavedModel(path);
此新功能在 @tensorflow/tfjs-node 包的 1.3.2 及更高版本中可用,适用于 CPU 和 GPU。它支持在 TensorFlow Python 版本 1.x 和 2.0 中训练和导出的 TensorFlow SavedModel。除了无需进行任何转换的好处外,原生执行 TensorFlow SavedModel 还意味着您可以运行 TensorFlow.js 中尚未包含的操作的模型,方法是将 SavedModel 作为 TensorFlow 会话加载到 C++ 绑定中。

除了易用性优势外,这也对性能有影响。在使用 MobileNetV2 模型(推理时间)进行的性能基准测试中,我们发现直接在 Node.js 中执行 SavedModel 时,CPU 和 GPU 上的推理时间都有所改善。

GPU model

您可以查看 @tensorflow/tfjs-examples 存储库中的 示例。请加入我们的 讨论组 并分享您的反馈!
下一篇文章
Run a TensorFlow SavedModel in Node.js directly without conversion

作者:张康毅、Sandeep Gupta 和 Brijesh Krishnaswami

TensorFlow.js 是一个开源库,允许您在 JavaScript 中定义、训练和运行机器学习模型。该库为来自广泛的 JavaScript 社区的开发者提供了新工具,让他们能够构建和部署机器学习模型,并开启了机器学习的新应用场景。例如,TensorFlow.js 可以在所有主流浏览器、Node.js 的服务器端运行,最近也出现在了…