Python — Может ли Caffe или Caffe2 получать входные данные напрямую из gpu?

Я прочитал руководства по caffe2 и попробовал предварительно обученные модели. Я знал, что caffe2 запустит GPU для запуска модели / сети. Но входные данные, кажется, всегда передаются из памяти процессора (т.е. хоста). Например, в Загрузка предварительно обученных моделей, после загрузки модели мы можем предсказать изображение

result = p.run([img])

Тем не менее, изображение «img» должно быть прочитано в объеме процессора. То, что я ищу, — это структура, которая может подвести изображения (которые декодируются из видео и все еще находится в памяти GPU) непосредственно в модель прогнозирования, вместо того, чтобы копировать ее из GPU в область CPU, а затем снова передавать в GPU для прогнозирования результат. Caffe или Caffe2 предоставляют такие функции или интерфейсы для python или C ++? Или я должен исправить патч Caffe, чтобы сделать это? Спасибо вообще.


Вот мое решение:

Я нашел в tensor.hфункция ShareExternalPointer() могу делать то, что хочу.

Поток данных GPU таким образом,

pInputTensor->ShareExternalPointer(pGpuInput, InputSize);

затем прогнать прогнозируемую сеть через

pPredictNet->Run();

где pInputTensor является входным тензором для прогнозируемой сети pPredictNet

1

Решение

Я не думаю, что вы можете сделать это в с интерфейсом Python.
Но я думаю, что это может быть достигнуто с помощью C ++: В C ++ у вас есть доступ к Blob«s mutable_gpu_data(), Вы можете написать код, который запускается на устройстве и «заполнить» входные BLOB-объекты mutable_gpu_data() прямо из гпу. После того, как вы сделали это обновление, caffe сможет продолжить net->forward() оттуда.

ОБНОВИТЬ
19 сентября 2017 г. PR № 5904 был объединен с мастером. Этот PR раскрывает GPU-указатели BLOB-объектов через интерфейс Python.
Вы можете получить доступ blob._gpu_data_ptr а также blob._gpu_diff_ptr прямо с питона на свой страх и риск.

2

Другие решения

Как вы уже заметили, использование слоя Python позволяет вводить и выводить данные из графического процессора, и это может сильно снизить производительность. Это верно не только для Caffe, но и для других систем. Чтобы уточнить ответ Шая, вы можете посмотреть на это пошаговое руководство по добавлению слоев C ++ в Caffe. Приведенный пример должен касаться большинства вопросов, связанных с реализацией уровня. Раскрытие: я автор.

1