首页 > 解决方案 > AWS EC2 集群上的工作人员在一些迭代后引发 RayOutOfMemory 错误?

问题描述

我在 AWS 上启动了一个 ray 集群来为我的tf.keras模型执行一些网格搜索。对于几乎所有的工作(大约 500 个),工作人员RayOutOfMemory在一些迭代(6 到 53 之间)后抛出异常,我无法弄清楚问题出在哪里,也无法检测到任何模式。当我在本地运行时,每个作业占用的内存少于 1 GiB。如果作业本身不适合内存,那么我希望工作人员在第一次迭代中就提出错误。

集群包括: 头节点:m4.large(2 x vCPU,8GiB 内存) Workers:50 x m4.xlarge(4 x vCPU,16 GiB 内存)

我将每个工人的资源设置为{'cpu': 2, 'memory': 4 * 1024 ** 3}.

我得到以下错误输出:

ray.exceptions.RayTaskError: [36mray_worker[39m (pid=2170, host=ip-xxx-xxx-xxx-xxx)
  File "/home/ubuntu/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/ray/memory_monitor.py", line 141, in raise_if_low_memory
    round(self.heap_limit / (1024**3), 4)))
ray.memory_monitor.RayOutOfMemoryError: Heap memory usage for ray_KerasTrainable_2170 is 4.2515 / 4.0039 GiB limit

我观察到的事情:当我登录到引发错误的工作节点时,我在 (top/htop) 中看不到任何可疑的东西。在引发错误之后安排的作业也可以在错误发生之前运行几次迭代。所以内存占用似乎是暂时的事情。

我从文档中了解到,共享对象存储使用了每个工作人员的部分堆内存。50 个工作人员的共享对象存储是否会增长到在几次迭代后的某个时间点耗尽所有工作人员的内存?

我还将每个工作人员的内存增加到 6 GiB,但稍后工作人员的内存就用完了。

有人对此问题有解释和解决方案吗?

标签: pythonray

解决方案


推荐阅读