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