我在Windows环境中的一个c ++项目(VS2105)中工作,启动了多个线程。 PC有两个NVIDIA GeForce GTX 1080.每个线程在GPU模式下使用不同的caffe分类器。
如果所有线程都使用一个GPU,则该程序运行良好。它使用GPU 0或使用GPU1都很好。当我为每个线程使用不同的GPU时会出现问题。例如,如果程序启动两个踏板并且线程1中的分类器使用GPU 0(Caffe::SetDevice(0);
)并且线程2中的分类器使用GPU 1(Caffe::SetDevice(1);
),则预测开始工作但突然我得到错误cudnn_conv_layer.cu:28] Check failed: status == CUDNN_STATUS_SUCCESS (8 vs. 0) CUDNN_STATUS_EXECUTION_FAILED
我已经看到了多线程项目中使用python接口的人员使用与一个GPU相关的CuDNN线程安全问题的类似错误,但在单GPU中程序运行正常。
我的模型是在单GPU上训练的。我应该在GPU 0和GPU 1中训练单独的模型吗?我应该以任何特殊方式配置分类器以在多GPU多线程环境中使用它吗?
我使用caffe的windows分支与cuda 8.0,并使用caffe的c ++接口作为静态库链接到项目。
遇到同样的问题...解决了“锁定”,现在一次用一个gpu工作