Julia – молодой, но, на мой взгляд, перспективный язык, созданный для решения вычислительных задач. Сочетает в себе простой синтаксис с возможностью параллельного и распределенного решения вычислительных задач прямо из коробки, а так же наличием макросов в стиле Lisp, мощных библиотек и активного комьюнити.
C некоторыми особенностями языка можно ознакомиться в этой статье на r-bloggers, а тем, кто знает R возможно будет интересен этот доклад.
Меня же язык заинтересовал как возможная альтернатива GNU Octave, более быстрая и с возможностью прозрачного распараллеливания и распределения решаемой задачи.
Итак, для того чтобы поднять простой вычислительный кластер на нескольких серверах необходимо совершить несколько простых действий.
Во-первых, необходимо установить пакет julia на тех серверах, из которых вы хотите собрать кластер. Для Ububtu готовые пакеты можно взять из ppa:staticfloat:
# add-apt-repository ppa:staticfloat/julianightlies
# add-apt-repository ppa:staticfloat/juliareleases
первый подключит репозиторий с ночными сборками (julia активно развивается), второй подключит репозиторий, в котором есть только релизы.
Далее стандартно:
# apt-get update && apt-get install julia
Во-вторых, необходимо настроить беспарольный ssh-доступ между машинами. Убедитесь что он рабтает.
В-третьих, необходимо создать простой файл, в котором нужно перечислить соединения с удалёнными серверами. Если вы хотите использовать более одного ядра на удалённом сервере, стоит добавить несколько строк с именем этого сервера. У меня файл выглядит так:
$ cat cluster
se@zoo.yesn.me
se@zoo.yesn.me
se@zoo.yesn.me
se@zoo.yesn.me
Иными словами, я хочу запустить 4 процесса на сервере zoo.yesn.me. Всё, ваш кластер готов к работе. Для запуска нужно ввести команду:
$ julia -p 4 --machinefile cluster
Здесь -p 4 означает что julia запустит 4 процесса на локальной машине, плюс установит соединения со всеми хостами, указанными в файле cluster.
Проверить работоспособность кластера можно простым примером:
julia> nheads = @parallel (+) for i=1:20000000000
int(randbool())
end
10000246714
При выполнении примера локально и на удаленном сервере будет наблюдаться аномальная активность у процессов, в которых запущена julia.
Кластер готов к работе.