【发布时间】: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