[英]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()
。
UPDATE
2017年9月19日, PR#5904合並為master。 此PR通過python接口公開blob的GPU指針。
您可以直接從python直接訪問blob._gpu_data_ptr
和blob._gpu_data_ptr
, blob._gpu_diff_ptr
自負 。
正如您已經指出的那樣,使用Python層會強制數據進出GPU,這會對性能造成巨大影響。 這不僅適用於Caffe,而且適用於其他框架。 要詳細說明Shai的答案,您可以查看有關向Caffe添加C ++層的分步教程 。 給出的示例應涉及與層實現有關的大多數問題。 披露:我是作者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.