Caffe 或 Caffe2 可以直接从 GPU 获得输入数据吗?
Can Caffe or Caffe2 be given input data directly from gpu?
我已经阅读了caffe2教程并尝试了预先训练的模型。我知道caffe2将利用GPU来运行模型/网络。但是输入数据似乎总是从 CPU 给出(即。主机(内存。例如,在加载预训练模型中,在加载模型后,我们可以通过以下方式预测图像
result = p.run([img])
但是,应在 CPU 范围内读取图像"img"。我寻找的是一个框架,可以将图像(从视频解码并仍驻留在 GPU 内存中(直接传输到预测模型,而不是将其从 GPU 复制到 CPU 范围,然后再次传输到 GPU 以预测结果。Caffe 或 Caffe2 是否为 python 或 C++ 提供了这样的函数或接口?还是我需要修补 Caffe 才能这样做?谢谢。
这是我的解决方案:
我在tensor.h
发现,功能ShareExternalPointer()
完全可以做我想做的事。
以这种方式馈送 GPU 数据,
pInputTensor->ShareExternalPointer(pGpuInput, InputSize);
然后运行预测网络
pPredictNet->Run();
其中pInputTensor
是预测净pPredictNet
的入口张量
我不认为你可以在使用python接口的caffe中做到这一点。
但我认为可以使用 c++ 来完成:在 c++ 中,您可以访问Blob
的mutable_gpu_data()
。可以编写在设备上运行的代码,并直接从 GPU "填充"输入 Blob 的mutable_gpu_data()
。进行此更新后,caffe 应该能够从那里继续其net->forward()
。
更新
2017 年 9 月 19 日 PR #5904 被合并到主版中。此 PR 通过 python 接口公开 blob 的 GPU 指针。
您可以直接从 python 访问blob._gpu_data_ptr
和blob._gpu_diff_ptr
,风险自负。
正如你所指出的,使用 Python 层强制数据进出 GPU,这可能会对性能造成巨大影响。这不仅适用于 Caffe,也适用于其他框架。要详细说明Shai的答案,您可以查看有关向Caffe添加C++层的分步教程。给出的示例应该涉及处理层实现的大多数问题。披露:我是作者。
- 我的程序没有从文件中读取并输入数据
- 输入数据成员未按要求工作
- 使用 pybind11 调用 Python 函数时避免复制输入数据
- 使用 python 或 c ++ 中的 sql 根据输入数据输出输出示例
- c++用输入数据创建数组
- Caffe 或 Caffe2 可以直接从 GPU 获得输入数据吗?
- C++ QTextDocument::contentChange() 信号提供无效的输入数据
- boost::asio 以async_read复制输入数据
- 输入数据类型检查循环未按预期工作 (C++)
- SVM 训练时间是否取决于输入数据的内容?
- 将用户输入数据相加
- 在线评委如何传递输入数据?
- 如何传递私有地图和输入数据
- C++ 将用户输入数据用于多个函数
- 通过按空格键结束键盘输入数据,而不是输入键 c/c++
- 如何为作为雇员类的指针传入的构造函数输入数据
- C++:检查输入数据
- 关于输入数据
- 防止在管道中输入数据时退出
- C/C++中固定长度实输入数据的高效二维FFT