什么是 ray::IDLE,为什么有些工作人员内存不足?
Posted
技术标签:
【中文标题】什么是 ray::IDLE,为什么有些工作人员内存不足?【英文标题】:What is ray::IDLE and why are some of the workers running out of memory? 【发布时间】:2020-05-22 17:09:50 【问题描述】:我在 EC2 上运行 ray。我在 c5.large 实例上运行工作程序,这些实例有大约 4G 的 RAM。
当我运行许多作业时,我看到以下错误消息:
File "python/ray/_raylet.pyx", line 631, in ray._raylet.execute_task
File "/home/ubuntu/project/env/lib/python3.6/site-packages/ray/memory_monitor.py", line 126, in raise_if_low_memory
self.error_threshold))
ray.memory_monitor.RayOutOfMemoryError: More than 95% of the memory on node ip-172-31-43-111 is used (3.47 / 3.65 GB). The top 10 memory consumers are:
PID MEM COMMAND
21183 0.21GiB ray::IDLE
21185 0.21GiB ray::IDLE
21222 0.21GiB ray::IDLE
21260 0.21GiB ray::IDLE
21149 0.21GiB ray::IDLE
21298 0.21GiB ray::IDLE
21130 0.21GiB ray::IDLE
21148 0.21GiB ray::IDLE
21225 0.21GiB ray::IDLE
21257 0.21GiB ray::IDLE
In addition, up to 0.0 GiB of shared memory is currently being used by the Ray object store. You can set the object store size with the `object_store_memory` parameter when starting Ray, and the max Redis size with `redis_max_memory`. Note that Ray assumes all system memory is available for use by workers. If your system has other applications running, you should manually set these memory limits to a lower value.
我正在使用 memory = 2000*1024*1024
和 max_calls=1
运行我的 ray 任务,因此盒子上的进程不应同时超过 2 个。
这些ray::IDLE
进程是什么?如何阻止我的工作人员进入OOM?
使用射线 0.8.1
【问题讨论】:
【参考方案1】:尝试ray.init(local_mode=True)
在单个进程中运行ray,它解决了我的内存不足问题。
【讨论】:
【参考方案2】:ray:IDLE 是停留在处理池中的空闲进程。 (Ray 这样做是为了减少进程启动时间)。它们每个都需要大约 0.21GB 的内存,因为即使是空闲进程也需要使用一些内存(例如,它应该运行 python 解释器)。
您可能可以通过两件事来缓解这个问题。
1. 将ray_init
的num_cpus
参数设置为较低(如2~3),这样您将只有2~3 个可用进程。
2.您应该考虑系统内存。如您所见,Ray 不仅将内存用于任务,还用于其系统组件,例如 raylet 或 idel 进程。如果您的机器有 4GB 内存,并且如果您的 2 个任务正在使用 2GB 内存并安排在该机器上,则会导致 OOM 问题,因为有额外的进程会消耗额外的内存。
为避免内存问题,您可以扩展集群(使用更大的机器或多台机器),或减少任务的内存使用量。
【讨论】:
以上是关于什么是 ray::IDLE,为什么有些工作人员内存不足?的主要内容,如果未能解决你的问题,请参考以下文章