加载了 tensorflow.js 的图模型可以在 GPU 上使用数据而不先将其传输到 CPU 吗?

Posted

技术标签:

【中文标题】加载了 tensorflow.js 的图模型可以在 GPU 上使用数据而不先将其传输到 CPU 吗?【英文标题】:Can a graph model loaded with tensorflow.js use data on GPU without transferring it to the CPU first? 【发布时间】:2021-12-09 09:49:43 【问题描述】:

我目前正在使用 tfjs 3.8 在客户端加载分段模型(加载为 tf.GraphModel)。为了创建输入Tensor,我调用browser.fromPixels(imageData),它从同样位于CPU 上的ImageData 对象在CPU 上创建Tensor。由于我使用的是 tfjs 的webgl 后端,所以在调用model.predict(tensor) 函数时会将数据发送到GPU。所有这些都运行良好,除了我的ImageData 对象是从带有WebGLRenderingContext 的画布上的图像创建的,这意味着它来自GPU。这种 GPU->CPU->GPU 数据传输正在减慢我正在尝试优化的进程。

我短暂搜索了 tfjs,但找不到在 GPU 上创建Tensor 以防止 GPU->CPU 数据传输的方法。有什么方法可以将数据保存在 GPU 上?

【问题讨论】:

【参考方案1】:

解决方案只是将带有 webgl 上下文的画布提供给 browser.fromPixels(canvas) 调用。这将直接在 GPU 上创建张量。

【讨论】:

【参考方案2】:

关于这个话题的详细对话在一个线程https://github.com/tensorflow/tfjs/issues/5765

【讨论】:

以上是关于加载了 tensorflow.js 的图模型可以在 GPU 上使用数据而不先将其传输到 CPU 吗?的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow.js 如果存在加载保存的模型,或者如果不存在,则在每个 epochEnd 回调中创建并保存模型的检查点

将 Keras 模型导入 TensorFlow.js

如何在 nodejs (tensorflow.js) 中训练模型?

OpenAI GPT-2 模型与 TensorFlow JS 一起使用

将基于 TensorFlow GraphDef 的模型导入 TensorFlow.js

修改 resnet 模型中的图层