Вызов Opencpu занимает больше времени, чем ожидалось

Я пытаюсь вызвать функцию из пакета flexsurv, используя opencpu. Я работаю на OS X Sierra.

Я изменил свой файл opencpu .conf, чтобы включить flexsurv в список предварительно загруженных пакетов:

{
"enable.api.library": true,
"enable.api.apps": true,
"enable.api.bioc": true,
"enable.api.cran": true,
"enable.api.gist": true,
"enable.api.github": true,
"enable.api.user": true,
"enable.api.tmp": true,
"enable.cors" : true,
"enable.post.code": true,
"error.showcall": true,
"gist.cache": 300,
"github.cache": 86400,
"cran.cache": 86400,
"public.url" : "https://public.opencpu.org/ocpu",
"smtp.server" : "localhost",
"httpcache.post": 300,
"httpcache.lib": 86400,
"httpcache.git": 900,
"httpcache.gitapi": 120,
"httpcache.tmp": 86400,
"httpcache.cran": 86400,
"httpcache.static": 31536000,
"httpcache.bioc": 31536000,
"key.length" : 9,
"appspaths": "/usr/local/lib/opencpu/apps-library",
"repos": "http://cran.rstudio.com",
"rlimit.as": 2e9,
"rlimit.fsize": 1e8,
"rlimit.nproc": 50,
"timelimit.get": 600,
"timelimit.post": 90,
"timelimit.webhook": 900,
"preload": ["ggplot2", "lattice","survival","flexsurv"]

}

Затем я запускаю open cpu и делаю следующий вызов в curl:

curl localhost:7210/ocpu/library/flexsurv/R/pgompertz/json -d "q=[0,1,2,3]&shape=0.001&rate=0.001" -w "%{time_total}\n" -o /dev/null

Этот вызов занимает около 1,4 секунды, несмотря на то, что это чрезвычайно простой и быстрый вызов функции, который вообще не должен занимать время.

Для сравнения, вызов rnorm для отрисовки 10 000 случайных выборок нормалей возвращает результат менее чем за полсекунды:

curl localhost:7210/ocpu/library/stats/R/rnorm/json -d "n=100000" -w "%{time_total}\n" -o /dev/null 

Почему сравнительно простой вызов flexsurv занимает гораздо больше времени? Предзагрузка не работает? Если да, то как я могу это исправить? Если нет, то что вызывает дополнительную задержку?

Любая помощь высоко ценится...


person jrdnmdhl    schedule 18.11.2016    source источник


Ответы (1)


Проблема была решена с помощью облачной версии opencpu, которая видит гораздо большие преимущества от предварительной загрузки.

Шаги:

  1. Установите Docker для Mac с https://docs.docker.com/engine/installation/mac/

  2. Установите док-контейнер opencpu docker pull opencpu/base

  3. Запустить докер с сеансом терминала docker run -t -i -p 80:80 -p 8004:8004 opencpu/base sh -c 'service opencpu restart && /bin/bash'
  4. Вызовите R из док-контейнера, при необходимости установите пакеты
  5. Используйте apt-get для установки выбранного текстового редактора в док-контейнер (например, sudo apt-get nano)
  6. Используйте текстовый редактор, чтобы отредактировать /etc/opencpu/server.conf и добавить необходимые пакеты для предварительной загрузки.
  7. выйдите из терминала и следуйте инструкциям здесь, чтобы зафиксировать новый образ
  8. Перезапустите докер и запустите docker run -t -p 80:80 -p 8004:8004 <your image name>
  9. Opencpu теперь запущен и работает, а вызовы предварительно загруженных пакетов будут возвращаться намного быстрее.

Кредит на ответ принадлежит разработчику opencpu Jeroen Ooms, который помог мне в группе Google: https://groups.google.com/forum/#!topic/opencpu/D49Adx6GSiE

person jrdnmdhl    schedule 22.11.2016