Ускорение загрузки пакетов в Юлии

Я написал программу для решения линейной программы на языке Julia, используя GLPKMathProgInterface и JuMP. Код Julia вызывается программой python, которая запускает несколько экземпляров кода Juila через несколько вызовов командной строки. Хотя я очень доволен производительностью самого решателя, инициализация происходит очень медленно. Мне было интересно, есть ли подходы, чтобы ускорить это.

Например, если я просто сохраню следующее в файл

@time using DataFrames, CSV, GLPKMathProgInterface, JuMP, ArgParse

и запустить это

mylabtop:~ me$ julia test.jl 
12.270137 seconds (6.54 M allocations: 364.537 MiB, 3.05% gc time)

Это кажется очень медленным, есть ли какой-нибудь хороший способ ускорить использование модулей, таких как этап предварительной компиляции, который я мог бы сделать один раз?


person Ryan F    schedule 03.04.2018    source источник
comment
Могу я спросить, почему вы используете несколько вызовов из командной строки для Джулии? Есть ли особая потребность в вызовах командной строки? Потому что вместо этого я бы создал единственный подпроцесс Julia и вызвал бы мой решатель внутри этого подпроцесса.   -  person hckr    schedule 04.04.2018


Ответы (1)


Поскольку вы еще не получили никаких ответов, позвольте мне дать вам общие ответы в первом порядке - хотя я надеюсь, что кто-то более квалифицированный ответит на ваш вопрос более подробно (и поправит меня, если я ошибаюсь).

1) На момент написания этой статьи загрузка пакетов в Julia иногда происходила довольно медленно. Это обсуждалось много раз, и вы можете ожидать улучшений в будущем. AFAIK это произойдет в ранних выпусках 1.x после выхода 1.0. Взгляните на это нить.

2) Поскольку обычно вам нужно оплатить время загрузки только один раз за сеанс Julia, один из подходов состоит в том, чтобы поддерживать сеанс как можно дольше. Вы можете выполнить свой сценарий с include("test.jl") из сеанса. Позвольте мне также упомянуть замечательный Revise.jl - вряд ли возможно переоценить этот пакет!

3) (У меня нет опыта использования этого более сложного подхода.) Существует PackageCompiler.jl, который позволяет вам нужно скомпилировать пакет в образ вашей системы. Прочтите это сообщение в блоге Саймона.

4) (Не рекомендуется). Также был экспериментальный static-julia, который статически компилирует ваш скрипт. в общую библиотеку и исполняемый файл.

Надеюсь, это поможет.

person crstnbr    schedule 05.04.2018