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

Python Caffe或Caffe2可以直接从gpu输入数据吗?,python,c++,caffe,caffe2,Python,C++,Caffe,Caffe2,我读过caffe2教程,并尝试过预先培训的模型。我知道caffe2将使用GPU运行model/net。但输入数据似乎总是从CPU(即主机)内存中给出。例如,在中,加载模型后,我们可以通过 result = p.run([img]) 然而,图像“img”应该在CPU范围内读取。我所寻找的是一个框架,它可以将图像(从视频解码后仍驻留在GPU内存中)直接传送到预测模型,而不是将其从GPU复制到CPU范围,然后再次传送到GPU以预测结果。咖啡因还是咖啡因2提供了Python或C++的功能或接口?或者我

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

result = p.run([img])
然而,图像“img”应该在CPU范围内读取。我所寻找的是一个框架,它可以将图像(从视频解码后仍驻留在GPU内存中)直接传送到预测模型,而不是将其从GPU复制到CPU范围,然后再次传送到GPU以预测结果。咖啡因还是咖啡因2提供了Python或C++的功能或接口?或者我需要修补Caffe才能这样做?谢谢


以下是我的解决方案:

我在
tensor.h
中发现,函数
ShareExternalPointer()
可以准确地执行我想要的操作

以这种方式提供gpu数据

pInputTensor->ShareExternalPointer(pGpuInput, InputSize);
然后运行预测网络

pPredictNet->Run();

其中,
pInputTensor
是预测网的入口张量
ppreditnet
我认为你不能用python接口来实现它。
但是我认为它可以用C++完成:在C++中,你可以访问<代码> BLB< <代码> <代码> MutabLeGPUIO数据()/<代码>。您可以编写在设备上运行的代码,并直接从gpu“填充”输入Blob的
可变gpu\U数据()。完成此更新后,caffe应该能够从此处继续其
net->forward()

更新
2017年9月19日并入master。此PR通过python接口公开BLOB的GPU指针。

您可以从python中直接访问
blob.\gpu\u data\u ptr
blob.\u gpu\u diff\u ptr
,风险自担

正如您所指出的,使用python层会强制数据进出gpu,这会对性能造成巨大影响。这不仅适用于Caffe,也适用于其他框架。要详细说明Shai的答案,您可以查看。给出的示例应该涉及处理层实现的大多数问题。披露:我是作者