【问题标题】:How to use multi CPU cores to train NNs using caffe and OpenBLAS如何使用多 CPU 内核使用 caffe 和 OpenBLAS 训练 NN
【发布时间】:2015-07-23 14:52:57
【问题描述】:

我最近在学习深度学习,我的朋友向我推荐了 caffe。使用 OpenBLAS 安装后,我按照文档中的教程 MNIST task 进行操作。但后来我发现它超级慢,只有一个 CPU 内核在工作。

问题是我实验室的服务器没有 GPU,所以我必须使用 CPU。

我在谷歌上搜索了一下,得到了一些类似 this 的页面。我试过export OPENBLAS_NUM_THREADS=8export OMP_NUM_THREADS=8。但是 caffe 仍然使用一个核心。

如何让 caffe 使用多 CPU?

非常感谢。

【问题讨论】:

  • 你是否构建了openblas来使用线程?
  • @Jeff 我只是makemake install。我找到了page,但它并没有说明任何关于构建它以使用线程的内容。如何构建它以使用线程?
  • 阅读文档。很清楚。
  • @Jeff 我不得不说我没有找到任何关于使用与threads 相关的参数编译 OpenBLAS 的内容。
  • Github 上有一个 OpenMP 版本的 Caffe,在某些工作负载上可以与 GPU 端口竞争。你可能会尝试找到它。线程化 GEMM 并不总是让 DNN 运行得更快的最佳方式……

标签: multithreading machine-learning neural-network caffe openblas


【解决方案1】:

在构建 OpenBLAS 时,您必须设置标志 USE_OPENMP = 1 以启用 OpenMP 支持。接下来在 Makefile.config 中设置 Caffe 使用 OpenBLAS,请通过设置 OMP_NUM_THREADS=n 导出您想要在运行时使用的线程数,其中 n 是您想要的线程数。

【讨论】:

    【解决方案2】:

    @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 毫秒。

    【讨论】:

      【解决方案3】:

      我发现这个方法有效:

      当您构建 caffe 时,请在您的 make 命令中将其用于 8 个内核: make all -j8make pycaffe -j8

      另外,请确保 OPENBLAS_NUM_THREADS=8 设置好了。

      This question 有一个完整的脚本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-20
        • 2016-05-11
        • 2017-07-13
        • 2016-08-01
        • 2019-01-06
        • 2015-11-28
        • 2012-03-28
        相关资源
        最近更新 更多