Caffe或Caffe2可以直接从gpu获得输入数据吗?

2024-06-26 04:01:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我读过caffe2的教程,并尝试过预先培训过的模型。我知道caffe2会利用GPU来运行模型/网络。但是输入数据似乎总是从CPU(即主机)内存中给出的。例如,在Loading Pre-Trained Models中,加载模型后,我们可以通过

result = p.run([img])

但是,图像“img”应该在CPU范围内读取。我所寻找的是一个框架,它可以将图像(从视频解码后仍然驻留在GPU内存中)直接传输到预测模型,而不是将其从GPU复制到CPU范围,然后再传输到GPU来预测结果。咖啡因还是咖啡因2提供了Python或C++的功能或接口?或者我应该给咖啡馆打补丁吗?谢谢。在


我的解决方案是:

我发现在tensor.h中,ShareExternalPointer()函数可以做我想要的。在

以这种方式传送gpu数据

^{pr2}$

然后运行预测网络

pPredictNet->Run();

其中pInputTensor是预测网pPredictNet的入口张量


Tags: 数据内存模型图像网络利用imggpu
2条回答

我不认为你能用python接口在中做到这一点。
但是我认为可以用c++来实现:在c++中,您可以访问Blob的{}。您可以编写在设备上运行的代码,并直接从gpu“填充”输入Blob的mutable_gpu_data()。一旦你做了这个更新,caffe应该可以继续它的net->forward()。在

更新
2017年9月19日,PR #5904合并为master。此PR通过python接口公开blob的GPU指针。
您可以直接从python访问blob._gpu_data_ptrblob._gpu_diff_ptr,风险自负。在

正如您所注意到的,使用Python层会迫使数据进出GPU,这会对性能造成巨大的影响。这不仅适用于Caffe,也适用于其他框架。要详细说明Shai的答案,您可以查看this step-by-step tutorial on adding C++ layers to Caffe。给出的例子应该涉及到处理层实现的大多数问题。披露:我是作者。在

相关问题 更多 >