Воздушный поток с сельдереем на память голодным дагам - PullRequest
1 голос
/ 03 ноября 2019

Нам нужно выполнить 3000 прогонов Дага в определенный час дня. почти вся работа внутри Дага ждет, когда другие микросервисы выполнят свою работу. (например, AWS sagemaker)

Но наш Dag потребляет около 250 МБ из-за всего необходимого нам импорта python (sagemaker, тензор потока и т. д.), мы заметили, что 250 МБ памяти используется еще до выполнения первой задачи. (проверил это, напечатав process.memory_full_info())

. Мы попытались запустить 8 одновременных запусков на кластере Celery, которые имеют 2 рабочих (4 ГБ ОЗУ каждый) и worker_concurrency=8, но не удалось. рабочая машина потерпела крах из-за ошибки OOM.

углубляясь в это, я понимаю, что воздушный поток на самом деле работает методом prefork, то есть он создает дубликаты своего основного рабочего процесса для каждого вспомогательного рабочего, которого он инициирует. этот подпроцесс потребляет больше или меньше памяти, которую использует наш Dag (около 300 МБ), между подпроцессами нет разделения памяти.

, поэтому я начал искать решение, так как это, очевидно, не может масштабироваться, если мы не установимчто-то вроде 500 рабочих. (каждый из них может проходить по 6 тестов одновременно)

я читал о различных рабочих классах пула, которые можно установить как gevent или eventlet, и о том, как вы можете повторно использовать память, чтобы не каждый подчиненныйпродублируйте его память. Я думал, что нашел решение, которое мне нужно. но потом я попытался настроить это и не увидел такого поведения в работе - я бы увидел только 2 одновременно выполняемые задачи (с настроенным gevent) - наш провайдер облачного потока воздуха объяснил мне, что это не работает поток воздухаи в своем базовом классе executor он все еще создает подпроцесс для каждой задачи. это ссылка, которую он прислал мне https://github.com/apache/airflow/blob/919bb8c1cbb36679c02ca3f8890c300e1527c08b/airflow/task/task_runner/base_task_runner.py#L112-L142

мои вопросы:

  1. возможно ли масштабировать то, что нам нужно, учитывая, что наш Dag для начала потребляет много памяти?
  2. работает с Celery executor, на самом деле может принести пользу голодным запускам dag.
  3. Прав ли провайдер облачных вычислений, сказав: "Это не так, как работает поток воздуха с сельдереем"
  4. iслышу, как люди выполняют тысячи задач одновременно, даже при минимальном импорте DAG я получаю 130 МБ памяти - как это можно масштабировать до тысяч?

спасибо

...