【发布时间】:2019-02-06 18:47:01
【问题描述】:
我有一个应用程序,我想在其中不断做出和处理预测。我有一个函数可以进行预测并对结果进行处理:
makeProcessPrediction(){
return new Promise(resolve => {
let prediction : any = this.model.predict(this.input_tensor);
prediction.data().then((data_array) => {
//... do something with prediction here
}
prediction.dispose();
resolve('resolved');
});
});
}
现在,如果我对 makeProcessPrediction 进行一次调用,预测需要大约 80 毫秒。但是如果我这样循环调用它:
while(condition){
await this.makeProcessPrediction();
}
突然间,预测需要更长的时间,长达 140 毫秒。如果我停止循环并进行另一个“单一”预测,则需要大约 80 毫秒。
我希望有人可以解释为什么会发生这种情况,也许我可以做些什么来加快预测速度。
非常感谢!
【问题讨论】:
-
也许这与一些张量没有放在内存中的事实有关。您能否添加 tf.memory() 的输出?
-
有趣,一些迭代的 tf.memory 输出:
{unreliable: false, numBytesInGPU: 41380, numTensors: 163, numDataBuffers: 109, numBytes: 5325648}和其他迭代它输出{unreliable: false, numBytesInGPU: 5284260, numTensors: 163, numDataBuffers: 109, numBytes: 5325648}我没有注意到预测时间和 numBytesInGPU 之间的模式或关系。除了在 numBytesInGPU 的这两个不同数字之间来回翻转之外,数字没有任何变化或增加,我认为这是内存泄漏? -
我认为您使用
data()检索存储在 gpu 中的数据这一事实随着 gpu 数据的增加而花费了太多时间。但是你能分享一下你的模型的架构吗? -
该模型遵循 U-net 架构,它是完全卷积的,我将其用于图像处理。它有2层编码,一个编码层和2层解码。除了
data(),还有其他方法更适合从 gpu 中获取数据吗? -
哇,您对
data()的看法是正确的!我现在使用了dataSync(),模型在略低于 80 毫秒时运行超级稳定!!!!!!谢谢!!!
标签: javascript asynchronous tensorflow.js