我最近在学习深度学习,我的朋友向我推荐了 caffe。使用 OpenBLAS 安装后,我按照文档中的教程MNIST 任务进行操作。但后来我发现它超级慢,只有一个 CPU 内核在工作。
问题是我实验室的服务器没有 GPU,所以我必须使用 CPU。
我用谷歌搜索了这个并得到了一些这样的页面。我试着export OPENBLAS_NUM_THREADS=8和export OMP_NUM_THREADS=8。但是 caffe 仍然使用一个核心。
如何让 caffe 使用多 CPU?
非常感谢。
@Karthik。这也适用于我。我发现一个有趣的发现是,使用 4 个线程可以将 caffe 时序测试期间的向前/向后传递减少 2 倍。但是,将线程数增加到 8 甚至 24 会导致 f/b 速度低于我的速度获得 OPENBLAS_NUM_THREADS=4。以下是一些线程计数的时间(在 NetworkInNetwork 模型上测试)。
[#threads] [f/b 时间,以毫秒为单位]
1 223
2 150
4 113
8 125
12 144
相比之下,在 Titan X GPU 上,f/b 传递需要 1.87 毫秒。
在构建 OpenBLAS 时,您必须设置标志 USE_OPENMP = 1 以启用 OpenMP 支持。接下来在 Makefile.config 中将 Caffe 设置为使用 OpenBLAS,请通过设置 OMP_NUM_THREADS=n 导出您想要在运行时使用的线程数,其中 n 是您想要的线程数。
我发现这种方法有效:
当您构建 caffe 时,在您的 make 命令中,将其用于 8 个内核:
make all -j8和
make pycaffe -j8
另外,请确保
OPENBLAS_NUM_THREADS=8
已设置。
这个问题有一个完整的脚本。