【问题标题】:DL4j 1.0.0-Beta6 Openblas does not use more than one threadDL4j 1.0.0-Beta6 Openblas 不使用多个线程
【发布时间】:2020-01-24 12:21:15
【问题描述】:

在我的测试服务器上,带有 Openblas 的 DL4j 1.0.0-Beta6 仅使用一个线程。最初它报告线程,所以我导出了 OMP_NUM_THREADS=4,这使得 DL4j 在启动时记录正确的线程数:

[:19:30 CET 2020] org.nd4j.linalg.factory.Nd4jBackend      : Loaded [CpuBackend] backend
[:19:30 CET 2020] org.nd4j.nativeblas.NativeOpsHolder      : Number of threads used for linear algebra: 4
[:19:30 CET 2020] org.nd4j.nativeblas.Nd4jBlas             : Number of threads used for OpenMP BLAS: 4
[:19:30 CET 2020] o.n.l.a.o.e.DefaultOpExecutioner         : Backend used: [CPU]; OS: [Linux]
[:19:30 CET 2020] o.n.l.a.o.e.DefaultOpExecutioner         : Cores: [4]; Memory: [0.9GB];
[:19:30 CET 2020] o.n.l.a.o.e.DefaultOpExecutioner         : Blas vendor: [OPENBLAS]
[:19:30 CET 2020] o.d.nn.multilayer.MultiLayerNetwork      : Starting MultiLayerNetwork with WorkspaceModes set to [training: ENABLED; inference: ENABLED], cacheMode set to [DEVICE]

不幸的是,它仍然只使用 100% 的 CPU,而不是预期的 400%。使用 CUDA 在我的笔记本电脑上运行的相同应用程序运行良好,nvidia-smi 报告使用率为 7x%。所以它似乎与测试服务器上的 Openblas 设置有关。我记得前段时间在旧的 beta 版本中,CPU 被完全使用,默认使用 MKL(我不能再使用了,因为服务器 CPU 没有 AVX2)。

上面的日志有什么问题或者我可以检查什么吗?

【问题讨论】:

  • 如果 MKL 工作正常,我只是建议继续使用它。它不需要 AVX2。
  • 我的印象是 MKL 需要另一个线程的 AVX2,但事实并非如此。所以我尝试了 MKL,它确实使用了所有的 CPU。所以我很高兴,直到我意识到它并不比单线程 openblas 快。一定有什么问题。会不会是我因为我手动调用 fit() 而没有使用任何 DL4js 迭代器?
  • 可能是你的batch size不够大。
  • 如果批量太小,我预计 MKL 不会达到 400% CPU。这个假设不正确吗?我会做更多的测试。

标签: deeplearning4j dl4j


【解决方案1】:

很高兴看到您的源代码。请提出问题:https://github.com/deeplearning4j/deeplearning4j/issues

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2019-04-16
    • 1970-01-01
    相关资源
    最近更新 更多