Как создать кластер?
За последние несколько лет в Интернете появилось несколько статей о создании кластера компьютеров дома - здесь например.
Pi поражает меня как хорошую платформу для создания /тестирования такого рода вещей из-за их низкой стоимости; должны ли «общие» руководства, подобные этой передаче, на Pi довольно легко, или есть что-то конкретное, о чем я должен знать при попытке такого проекта?
6 ответов
Предлагаю посмотреть Dispy - модуль распределенного вычисления python.
Чтобы запустить программу из нескольких малиновских Pi (узлов) с ПК (сервер - предположим, что IP - это 192.168.0.100
):
-
Установите операционную систему на каждом RasPi
-
Прикрепите каждый RasPi к вашей сети. Найдите IP (если динамический) или настройте статические IP-адреса.
(Предположим, что у вас есть три узла, а их IP-адреса -192.168.0.50-52
) -
Настройте Python (если это еще не так), установите
dispy
, затем запуститеdispynode.py -i 192.168.0.100
на каждом RasPi. Это скажет диспетчеру получать информацию о задании с сервера. -
На ПК (сервер) установите
dispy
, затем запустите следующий код python:
#!/usr/bin/env python
import dispy
cluster = dispy.JobCluster('/some/program', nodes=['192.168.0.50', '192.168.0.51', '192.168.0.52'])
Вы также можете заменить /some/program
на функцию python - например. compute
.
Вы также можете включать зависимости, такие как объекты, модули и файлы python (которые dispy
будет передавать на каждый узел), добавив depends=[ClassA, moduleB, 'file1']
Вы должны знать о работе, которая уже была выполнена - есть даже название для кластера RasPi boxen. Встраиваемая Linux Wiki говорит, что Bramble определяется как " кластер Beowulf устройств Raspberry Pi ". Малина Pi Homebrew имеет ряд posts о Brambles , и см. также Фонд собственный форум.
Некоторые ребята из Southampton Uni собрали кластер и подробно рассказали о своей работе на http: //www.southampton.ac.uk/~sjc/raspberrypi/.
Это вполне возможно, но самая большая проблема - достижимость. Это идея, которую я бы не только считал работоспособной, но и полезной, поскольку вы могли бы пойти с идеей портативных параллельных вычислений. Что касается специфики, лучше всего будут использовать языки кодирования, такие как FORTRAN и C ++.
Посмотрите beowulf.org для получения дополнительных сведений о кластерных вычислениях
Это ответ на сообщение Guido Garcia выше, посвященное «dispy» - я не могу понять, как ответить на его пост.
Когда программа ('/bin /ls') распределяется с 'dispy' для параллельного выполнения, то эта программа на клиентской машине передается каждому узлу (в '/tmp'). Это значит, что пользовательская программа на клиентской машине передается без использования NFS или какого-либо общего файла. Это работает с двоичными программами только тогда, когда узлы и клиентские архитектуры совместимы. В вашем случае я предполагаю, что архитектура клиента отличается от архитектуры удаленных узлов, и узел не может выполнить двоичный '/bin /ls', переданный от клиента. Если вы хотите выполнить /bin /ls на каждом узле, проще написать функцию или программу Python для печати каталога (например, с помощью os.listdir) и распространить его вместо исполняемого файла.
Также есть http://pi.interworx.com , если вы хотите использовать полнофункциональную панель управления. У них есть инструкции на этой странице о том, как копировать, но вы должны быть терпеливыми, поскольку этот субдомен запускается из кластера Rasberry Pi. Вот фотография, если она опускается: