Я работаю в проекте C ++ (VS2105) в среде Windows, которая запускает несколько потоков. На ПК установлено два NVIDIA GeForce GTX 1080. Каждый поток использует свой классификатор caffe в режиме GPU.
Если все потоки используют один графический процессор, программа работает хорошо. Он хорошо работает как с GPU 0, так и с GPU1. Проблема возникает, когда я использую разные GPU для каждого потока. Например, если программа запускает два шага, а классификатор в потоке 1 использует графический процессор 0 (Caffe::SetDevice(0);
) и классификатор в потоке 2 использует графический процессор 1 (Caffe::SetDevice(1);
), прогноз начинает работать, но вдруг я получаю ошибку cudnn_conv_layer.cu:28] Check failed: status == CUDNN_STATUS_SUCCESS (8 vs. 0) CUDNN_STATUS_EXECUTION_FAILED
Я видел подобные ошибки от людей, работающих в многопоточных проектах с интерфейсом Python, связанных с проблемами безопасности потоков CuDNN, работающих с одним GPU, но в одном GPU программа работает нормально.
Мои модели обучаются на одном GPU. Стоит ли тренировать отдельные модели в GPU 0 и GPU 1? Должен ли я настроить классификаторы каким-либо особым образом, чтобы использовать его в многопоточной среде multiGPU ?.
Я использую ветвь windows caffe с cuda 8.0 и использую c ++ интерфейс caffe, связанный как статическая библиотека с проектом.
Обнаружил ту же проблему … решил «блокировку», теперь работает за один раз с одним gpu
Других решений пока нет …