【问题标题】:Why no good speedup for Astropy parallel testing with pytest-xdist?为什么用 pytest-xdist 对 Astropy 并行测试没有很好的加速?
【发布时间】:2014-06-04 00:39:12
【问题描述】:

我在我的 Macbook(4 个真实内核,固态磁盘)上使用 python setup.py test --parallel N 选项运行 Astropy tests in parallel,它使用 pytest-xdist 并行运行大约 8000 个测试。

我在 1 到 10 范围内尝试了不同的 N,但在所有情况下我只能获得大约 2 的加速,但我希望在 3 到 4 范围内获得加速(因为运行测试应该是CPU 受限)。

为什么加速比低,我怎样才能获得好的加速(在一台计算机上使用多个内核)?

更新

我尝试了@Iguananaut 的 ramdisk 建议: diskutil erasevolume HFS+ 'ramdisk' hdiutil attach -nomount ram://8388608 mkdir /Volumes/ramdisk/tmp time python setup.py test -a '--basetemp=/Volumes/ramdisk/tmp' --parallel 8 与 SSD 的 2.0 相比,加速现在约为 2.2。 由于我有四个物理内核,我希望在 3 到 4 范围内。 也许出于某种原因,并行运行测试的开销非常大。

【问题讨论】:

    标签: pytest parallel-testing astropy


    【解决方案1】:

    我怀疑 SSD 是那里的限制因素。许多测试都受 CPU 限制,但也有很多测试会占用大量磁盘——临时文件等。通过并行运行,这些可能会变得更慢。除此之外,很难说太多,因为它取决于您的环境的具体情况。我在六个核心上运行测试得到了显着的加速。不完全是 6 倍,但确实有所作为。

    您可能会尝试的一件事是制作一个 ramdisk 以设置为您的临时目录。您可以在 OSX 中使用diskutil 执行此操作。如果你不确定,你可以谷歌如何做到这一点。然后你应该可以运行./setup.py test -A '--basetemp=path/to/ramdisk'。我实际上并没有在 Astropy 测试中尝试过,并且不确定它是如何工作的。但如果它确实有效,它至少有助于在一定程度上排除 I/O 作为瓶颈。

    这就是说我故意对它可能有多大帮助一无所知。即使使用 ramdisk——现在你的 RAM 速度正在成为 I/O 绑定测试的瓶颈。无论您拥有多少 CPU,所有 CPU 密集型测试都可以立即完成,并且 I/O 密集型测试不会变得更快,因此您仍然需要等待同样长的时间(或几乎一样长的时间)结束)。使用多处理时,进程之间的消息传递也会产生额外的开销——确切的执行方式取决于很多因素,但最有可能是通过一些共享内存。阅读本文的任何人也无法知道您的机器上正在运行哪些其他进程可能会争用相同的资源。即使您的系统监视器没有显示任何大量使用 CPU 的东西,但这并不意味着没有进程在做其他会增加瓶颈的事情。

    TL;DR 我不会认为没有与你扔给它的 corse 数量成正比的加速,尤其是在笔记本电脑之类的东西上。

    【讨论】:

    • 我已经用 SSD 和 RAM 磁盘获得的加速更新了上面的描述。仍然比我预期的要慢,但感谢您的建议。
    • 与 SSD 相比,使用 RAM 磁盘时的加速仅提高了一点,这让我认为并行化开销是我没有获得良好加速的真正原因。但我不会尝试调查到底发生了什么......我提出这个问题的主要动机是我认为我可能以某种方式错误地运行了 pytest-xdist 而我所要做的就是传递一个额外的选项获得更好的加速,但情况似乎并非如此。
    猜你喜欢
    • 1970-01-01
    • 2015-01-16
    • 2022-08-05
    • 2021-08-17
    • 1970-01-01
    • 2014-02-03
    • 2018-06-01
    • 1970-01-01
    • 2022-11-05
    相关资源
    最近更新 更多