我读过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
的入口张量
我不认为你能用python接口在caffe中做到这一点。}。您可以编写在设备上运行的代码,并直接从gpu“填充”输入Blob的
但是我认为可以用c++来实现:在c++中,您可以访问
Blob
的{mutable_gpu_data()
。一旦你做了这个更新,caffe应该可以继续它的net->forward()
。在更新
2017年9月19日,PR #5904合并为master。此PR通过python接口公开blob的GPU指针。
您可以直接从python访问
blob._gpu_data_ptr
和blob._gpu_diff_ptr
,风险自负。在正如您所注意到的,使用Python层会迫使数据进出GPU,这会对性能造成巨大的影响。这不仅适用于Caffe,也适用于其他框架。要详细说明Shai的答案,您可以查看this step-by-step tutorial on adding C++ layers to Caffe。给出的例子应该涉及到处理层实现的大多数问题。披露:我是作者。在
相关问题 更多 >
编程相关推荐