Кто управляет (создает, распределяет память и т. Д.) R-сессий / R-процессов в OpenCPU? - PullRequest
0 голосов
/ 07 июня 2019

У нас есть облачный сервер OpenCPU, установленный на сервере RedHat с Apache 2.0 и rApache, который выполняет некоторые достаточно ресурсоемкие вычисления и вычисления. Наше приложение работает довольно медленно (медленнее, чем на менее мощном ноутбуке) - мы думаем, что это из-за выделения памяти на сервере. По этой причине мы распараллеливали приложение для сервера (используя пакет parallel), но хотя обычно на сервере можно запустить много (более 20) параллельных заданий R, наше приложение может работать только около 18.

Чтобы понять, что происходит, у меня вопрос: когда я вызываю функцию R через веб-интерфейс OpenCPU, какой компонент сервера создает / порождает процессы R и управляет их распределением памяти? Это r_mod или сам сервер Apache через другие модули? Влияет ли на это Prefork MPM (на основании этого ответа )? Какую часть этой работы выполняет OpenCPU?

Я прочитал документацию OpenCPU, документацию по rApache, все вопросы о стековом потоке в OpenCPU, но мне не удалось понять, как конкретно управляются процессы R. Извините, если я что-то пропустил, я был бы очень признателен, если бы кто-нибудь мог указать мне на источник этой информации.

1 Ответ

1 голос
/ 07 июня 2019

Замедление может быть связано с тем, что приложению требуются пакеты, которые не загружаются предварительно, поэтому их нужно загружать для каждого запроса, снова и снова.

Чтобы ускорить процесс, попробуйте добавить свой пакет вpreload in /etc/opencpu/server.conf или добавьте код R предварительной обработки к /etc/opencpu/Rprofile, который загружает необходимые пакеты / данные.

Отвечая на ваш вопрос:

  • Preachek Apache2 поддерживает пулрабочие процессы.Размер пула n настраивается в Apache с использованием StartServers, MinSpareServers, MaxSpareServers, MaxRequestWorkers и т. Д.Поскольку каждый R-работник использует много ресурсов, его не следует устанавливать слишком высоким.
  • При запуске каждый рабочий процесс apache2 запускает новый частный R-процесс.Затем каждый процесс R загружает пакет opencpu и его зависимости preload пакетов и запускает /etc/opencpu/Rprofile.Следовательно, в общей сложности он использует n раз объем памяти, который требуется для загрузки этих вещей в R.
  • Каждый запрос выполняется случайным образом в рамках временного форка песочницы.Если запрос требует R пакетов, которые не были предварительно загружены, они должны быть загружены по требованию.Это замедляет запросы.
  • Как только запрос завершен, временная вилка песочницы уничтожается, а рабочий очищается.
...