簡體   English   中英

可以直接從gpu給Caffe或Caffe2輸入數據嗎?

[英]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接口在完成此操作。
但是我認為可以使用c ++來實現:在c ++中,您可以訪問Blobmutable_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_ptrblob._gpu_data_ptrblob._gpu_diff_ptr 自負

正如您已經指出的那樣,使用Python層會強制數據進出GPU,這會對性能造成巨大影響。 這不僅適用於Caffe,而且適用於其他框架。 要詳細說明Shai的答案,您可以查看有關向Caffe添加C ++層的分步教程 給出的示例應涉及與層實現有關的大多數問題。 披露:我是作者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM