【发布时间】:2018-04-01 03:46:40
【问题描述】:
我正在 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 多线程环境中使用它吗?
我在 cuda 8.0 中使用 caffe 的 windows 分支,并使用 caffe 的 c++ 接口作为静态库链接到项目。
【问题讨论】:
标签: c++ multithreading caffe cudnn