Всячина

Каплями через край

Как поднять простой кластер в julia

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.

Кластер готов к работе.

Comments