【问题标题】:AWS EC2 Python Parallel - Extremely slowAWS EC2 Python 并行 - 极慢
【发布时间】:2019-12-17 13:08:28
【问题描述】:

我正在尝试在 EC2、AWS 中使用 Python 运行蒙特卡罗模拟。但是,每当我尝试运行具有 2 个以上进程的并行程序时,它就会变得非常缓慢,甚至比没有任何并行化的情况下还要慢。

EC2 实例:Ubuntu + c5d.9xlarge(36 核,72GB)+ Python 3 + Jupyterlab

一个玩具例子:

def  test(i):
    t = time.time()
    a = randn(200,200)
    b = a.T.dot(a)
    c = scipy.linalg.sqrtm(a)
    print(time.time()) - t
pool = Pool(N)
pool.map(test,range(10))
  1. 当 N = 2 时,每个大约需要 0.04s,总共需要 0.26s(这与我的 MBP 上的性能接近,无论是单任务还是并行。这个问题不会发生在我的 MBP 上)
  2. N=4时,每条耗时约0.26-0.8s,合计耗时0.9s

我了解(感谢@aws_apprentice)在这样一个简单的示例中,交换过程可能占主导地位。但是在我的真实 f 中,大约 2 分钟长,这样的问题仍然存在,一个简单的“scipy.linalg.sqrtm”主导了时间成本。这对我来说真的很奇怪。

  1. 似乎只发生在某些运算符/函数上:当我尝试时
def test1(i):
    t = now()
    for j in range(10):
        randn(1000,1000)
    print(now() - t)

很好。但它也发生在“np.sum()”上。 但是我的模拟里面有“sqrtm”和“sum”,所以我发现这两个部分会变得非常慢。

  1. 我尝试了不同的 EC2 实例,但问题始终存在。

我试图利用 EC2 的多核来运行,例如,用不同的种子重复 1000 次。而这个问题使它成为不可能。

非常欢迎任何 cmets 或建议!谢谢!

【问题讨论】:

  • 基于这个简单的示例,您将承担产生多个进程的成本,这些进程不是免费的并且有开销,这就是为什么简单的 CPU 绑定任务(例如在您的玩具示例中)在没有运行的情况下工作得更好一个游泳池
  • @aws_apprentice 非常感谢!我不是CS专家。我的任务很简单,我只想运行例如 1000 个不同种子的独立任务,我认为这会很简单(就像以前在 PC 上一样)。那么你会建议做什么呢?谢谢
  • 如果需要,您可以并行运行它们,有很多事情需要考虑,它们是 CPU 还是 I/O 受限。您也不想一次运行所有这些,您希望将其限制为机器拥有的核心数量 + 2,这是一般的经验法则。不幸的是,这个问题对于这个网站来说有点太宽泛了......
  • 谢谢!我确实想并行运行。但正如您所见,该示例只有一个“scipy.linalg.sqrtm”,我不明白为什么会有问题。对于数字,我的实例有 36 个内核,我尝试使用 2/4 进程运行 10 次重复,但是这种情况仍然会发生。即使使用这个玩具示例,在设置 n_processes = 10 时,我也无法轻松运行 1000 次重复。
  • @aws_apprentice 我明白你在说什么。您的意思是“尝试生成 10 个子流程”的操作会导致不必要的时间成本并在我的玩具示例中使其变慢吗?实际上,在我的程序中,一次重复大约需要 2 分钟,其中“sqrtm”只是一部分(但当并行时,while 会使 2 变为 5)。这也不会发生在我的 MBP 上。

标签: python amazon-web-services amazon-ec2 parallel-processing multiprocessing


【解决方案1】:

解决了。似乎这个问题是由于多线程处理和 OMP(因此一些 Numpy 和 Scipy?)不能很好地协同工作,由于一些多线程的事情(我的理解有限)?无论如何,先运行以下代码后,一切都按预期工作:

import os
os.environ["OMP_NUM_THREADS"] = "1"

【讨论】:

    猜你喜欢
    • 2012-07-03
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2023-02-12
    相关资源
    最近更新 更多