Что такое ray :: IDLE и почему некоторым рабочим не хватает памяти?

Я использую Ray на EC2. Я запускаю рабочих на экземплярах 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::IDLE процессы и как я могу запретить моим рабочим перейти в OOM?

Использование луча 0.8.1


person Henry Henrinson    schedule 06.02.2020    source источник


Ответы (2)


ray: IDLE - это незанятые процессы, которые остаются в пуле обработки. (Ray делает это, чтобы сократить время запуска процесса). Каждый из них занимает около 0,21 ГБ памяти, потому что даже незанятые процессы должны использовать некоторую память (например, он должен запускать интерпретатор Python).

Вероятно, вы можете смягчить проблему двумя вещами. 1. Установите аргумент num_cpus для ray_init на меньшее значение (например, 2 ~ 3), чтобы у вас было доступно только 2 ~ 3 процесса. 2. Следует учитывать системную память. Как видите, Ray использует память не только для задач, но и для системных компонентов, таких как процессы raylet или idel. Если ваша машина имеет 4 ГБ памяти, и если две из ваших задач используют 2 ГБ памяти и запланированы на этой машине, это вызовет проблему OOM, потому что есть дополнительные процессы, которые потребляют дополнительную память.

Чтобы избежать проблем с памятью, вы можете либо масштабировать свой кластер (используйте машину большего размера или несколько машин), либо уменьшить использование памяти вашей задачей.

person Sang    schedule 10.02.2020

Попробуйте ray.init(local_mode=True) запустить луч в одном процессе, это решило мою проблему с нехваткой памяти.

person jazeb007    schedule 03.08.2020