- PVSM.RU - https://www.pvsm.ru -
Создание высокопроизводительного кластера с 12 узлами NanoPi-Fire3 менее чем за £100 (£550, включая двенадцать Fire3)
Мой прошлый кластер на Raspberry Pi 3 в прошлом году немало заинтересовал публику, так что я попробовать сделать аналогичные проекты на других отличных одноплатных компьютерах, которые есть на рынке. FriendlyARM из Китая очень щедро отправила мне 12 своих последних 64-битных ARM плат NanoPi-Fire3 [1], на каждой из которых восьмиядерный ARM A53 SoC, работающий на частоте 1,4 ГГц, с гигабитным Ethernet.


Размер кластера 146,4 (ш) × 151 (в) × 216 мм (д), а вес 1,67 кг.
или… Для чего он нужен??
Кластеры часто используют для ресурсоёмких задач (медицинские исследования, моделирование погоды, ИИ/глубокое обучение, майнинг криптовалют) и/или сервисов высокой доступности (избыточные узлы задействуют в случае аппаратных сбоев). Этот кластер, конечно, медленный с точки зрения современных суперкомпьютеров, но небольшая портативная система идеально подходит для обучения или разработки распределённого программного обеспечения, которое затем может перенести на гораздо более мощные системы.
Я планирую написать несколько статей, чтобы оценить этот кластер для майнинга и глубокого обучения.
Docker Swarm [2] или Kubernetes [3] кажутся отличными вариантами для управления кластером, хотя я их ещё не пробовал.
Плата NanoPi-Fire3 значительно более продвинутая по сравнению с Raspberry Pi 3 как с точки зрения производительности, так и с точки зрения функций, в меньшем форм-факторе, при этом примерно по той же цене:
| NanoPi-Fire3 | Raspberry Pi 3 model B | |
|---|---|---|
| SoC | 8-ядерный ARM A53 S5P6818 @ 1,4 ГГц |
4-ядерный ARM A53 BCM2837 @ 1,2 ГГц |
| Память | 1 ГБ DDR3 | 1 ГБ DDR2 |
| GPU | Mali-400 MP4 500 МГц? |
Broadcom VideoCore IV 400 МГц? |
| Сеть | 1000 Мбит/с | 100 Мбит/с |
| WiFi | нет | 802.11bgn |
| Bluetooth | нет | 4.1 + BLE |
| Хранение | Карта microSD | Карта microSD |
| USB | 1 разъём 1 microUSB |
4 разъёма |
| Видео | Micro HDMI 1.4a, RGB-LCD | HDMI, DSI |
| Интерфейс для камеры | DVP | CSI |
| Аудио | нет | 3,5 мм |
| Размер | 75×40 мм | 85×56 мм |
| Питание | 1,2 → 3,6 Вт 2A макс., microUSB |
1,2 → 2,1 Вт 2,5A макс., microUSB |
| Выпуск | Q4 2017 | Q1 2016 |
| Цена (UK) | £34,301 | £33,59 |
| 1 $35 за Fire3 + $5 доставка + 20% VAT + 0% импортная пошлина = £34,30 | ||


В большинстве современных компьютеров установлены многоядерные процессоры, способные выполнять два или более заданий одновременно. Это могут быть разные приложения (например, веб-сервер, обрабатывающий три веб-страницы и базу данных), или одна задача, разделённая на несколько потоков для максимальной скорости (например, трассировщик лучей, сжатие файлов и т.д.). Этот тест из пакета hpcc задействует все ядра CPU, эффективно тестируя общую производительность процессора при операциях с плавающей запятой.

Linpack TPP v1.4.1 (решатель линейных уравнений). Количество MFLOPS (миллионов операций с плавающей запятой в секунду)
На плате Fire3 вдвое больше ядер, более высокая тактовая частота и более быстрая память: в итоге результат в 6,6 раз выше, чем на Pi 3.
60 000 MFLOPS — не слишком много по текущим стандартам производительности, но ещё в 2000 году этот кластер из 12-ти Fire3 вошёл бы в топ-250 самых быстрых суперкомпьютеров в мире (!). Кластер из пяти Fire3 работает в 8,2 раза быстрее, чем кластер Pi 3 того же размера, что объясняется дополнительными ядрами CPU, более быстрой памятью и гораздо более быстрой сетью для обмена данными между узлами.
16-ядерный суперкомпьютер Cray C90, выпущенный в 1992 году, выдавал 10 780 MFLOPS, но стоил $30,5 млн, весил 10,9 тонн и нуждался в питании на 495 кВт!
Настройка кластера для получения максимального результата — это целое искусство: оптимизация компилятора, настройка математических библиотек и т.д. Но мы взяли оценки из стандартного пакета hpcc в Ubuntu 16.04.4, используя конфигурацию по умолчанию.
# Setup on each node
apt install hpcc
swapoff -a
adduser mpiuser
# Controller node setup
su - mpiuser
cp /usr/share/doc/hpcc/examples/_hpccinf.txt hpccinf.txt
# Edit default hpccinf.txt so that NB=80, N=18560, P=8 and Q=12 (P x Q = 96 cores)
sed -i "8s/.*/80tNBs/; 6s/.*/18560tNs/; 11s/.*/8tPs/; 12s/.*/12tQs/" hpccinf.txt
# Generate & copy SSH keys across cluster, so controller can run benchmark on all nodes
# (use the hostnames or IP addresses for your nodes)
ssh-keygen -t rsa
nodes=('controller' 'b1' 'b2' 'b3' 'b4' 'b5' 't1' 't2' 't3' 't4' 't5' 't6')
for i in ${nodes[@]}
do
ssh-copy-id "fire3-$i"
echo "fire3-$i slots=8" >> mycluster
done
mpirun -hostfile mycluster --mca plm_rsh_no_tree_spawn 1 hpcc
grep -F -e HPL_Tflops -e PTRANS_GBs -e MPIRandomAccess_GUPs -e MPIFFT_Gflops -e StarSTREAM_Triad -e StarDGEMM_Gflops -e CommWorldProcs -e RandomlyOrderedRingBandwidth_GBytes -e RandomlyOrderedRingLatency_usec hpccoutf.txt
И в Fire3, и в Pi 3 используются четырёхъядерные GPU для параллельной обработки больших объёмов данных в компьютерной графике. В последнее время их применяют также для специализированных вычислений, таких как майнинг криптовалют.

glmark2-es2 2014.03 (OpenGL ES 2.0). Оценка чем больше, тем лучше
Плата Fire3 в этом тесте оказалась в 7,5 раз быстрее, чем Pi 3. Результаты кластеров просто масштабируются по количеству узлов.
Как и в случае с CPU, есть много вариантов настройки графики путём компиляции с разными драйверами и т.д. В данном тесте мы просто запустили стандартный бинарник glmark2-es2 в Ubuntu 16.04.4, используя конфигурацию по умолчанию. Он запускается такой командой:
sudo apt install glmark2-es2
glmark2-es2 --off-screen
Устаревший рендер OpenGL для Pi 3 довольно слаб, но если переключиться на экспериментальный рендер Mesa VC4 через rpi-config, то получите производительность как у Fire3.
В большинстве одноплатников ARM установлены относительно старые GPU, которые показывают очень скромную производительность по сравнению с последними флагманскими смартфонами, не говоря уже о настольных ПК с дорогими графическими картами высокого класса и огромными блоками питания. GPU Mali-400 MP4 в Fire3 датируется 2008 годом, а Broadcom VideoCore-IV в Pi 3 — 2010 годом. Есть несколько более свежих одноплатников, такие как RockPro64 [4] от PINE64, с более мощными и новыми графическими процессорами (Mali-T860 MP4), в то время как в телефоне Samsung Galaxy S9 установлен Mali-G72 MP18 последнего поколения.
В этих тестах проверяется реальная скорость передачи данных в iPerf между двумя платами [5], подключёнными к коммутатору Ethernet 100/1000Mpbs.

iPerf v2.0.5 (TCP, 1000Mbps Ethernet, между платами), Мбит/с
С настройками по умолчанию интерфейс 1000 Мбит/с на Fire3 показывает огромную разницу скорости в 8,5 раз по сравнению с интерфейсом 100 Мбит/с на Pi 3.
sudo apt install iperf
# On node1
iperf -s -V
# On node2
iperf -c node1 -i 1 -t 20 -V
Если хотите увеличить сетевую производительность на Raspberry Pi (старше Pi 3 model B+), можно установить гигабитный USB-адаптер Ethernet [6] вместо стандартного встроенного интерфейса. Он увеличит скорость в 2,8 раза, но из-за ограничений USB2 по-прежнему будет гораздо медленнее настоящего интерфейса 1000 Мбит/с. Этот сетевой интерфейс интегрирован в самой новой модели Pi 3 B+.
Чтобы оценить производительность на ватт, я взял результаты теста Linpack выше в MFLOPS и поделил на потребляемую мощность. Этот показатель обычно используется для ранжирования компьютерных систем [7].

MFLOPS на ватт
Кластер Fire3 с пятью узлами в 5,8 раз более энергоэффективен, чем кластер Pi 3 того же размера, хотя и потребляет больше мощности при 100% нагрузке.
Ватты измерялись при нагрузке 100% для всего кластера, включая сетевые коммутаторы, вентиляторы и блоки питания. WiFi, Bluetooth, HDMI и прочее оставлено в настройках по умолчанию.
Суперкомпьютер Cray C90, упомянутый выше, выдавал всего лишь 0,02 MFLOPS на ватт в 1992 году.
Я изменил оригинальный дизайн кластера Raspberry Pi в бесплатной версии SketchUp [8], набросав грубые 3D-шаблоны NanoPi-Fire3, сетевых коммутаторов, разъёмов и т.д. Я решил не включить в модель вентиляционные щели/решётки. Корпус точно такого же размера, как и кластеры из пяти узлов: задача была вместить в него 12 плат, вдвое больше вентиляторов и коммутаторов Ethernet, а также все кабели!
Скачать SKP-файл для SketchUp 2013 [11]
Я пользуюсь бесплатной программой Inkscape [12]: она подготавливает 2D-модели для загрузки в лазерный резак. Разные цвета соответствуют различным уровням мощности/скорости лазера. Сначала вырезаются контуры по зелёным линиям с отверстиями для портов, болтов и вентиляции. Розовым обозначены дополнительные вырезы, чтобы легче извлекать хрупкие части. Затем вытравливаются оранжевые текст и линии, а в самом конце панели вырезаются по синим контурам.
Можно скачать файлы для резки на одном листе 600×400×3 мм, хотя я сам для разных панелей брал или прозрачные, или чёрные листы:
Необязательная маленькая деталь — диффузор для (очень яркой!) панели светодиодов, которую можно вырезать из матового акрила или просто купить официальный диффузор Pimoroni за три фунта.
Подробнее о лазерной резке и безвинтовой системе сборки корпуса см. в моей первой статье [16].
Хотя корпус остался точно такого же размера но я сделал много изменений и улучшений:
Можете почитать ещё о некоторых конструкторских решениях [19] в исходном кластере Pi.
Я выбрал отличную панель Unicorn pHAT 32x RGB LEDs [20] от Pimoroni, чтобы создать красочный «дисплей состояния» кластера. Он показывает нагрузку на процессор, температуру, дисковую и сетевую активность для каждого узла. Эти недорогие платы обычно подключаются прямо к пинам Raspberry Pi, но надо немного повозиться, чтобы подключить их к другой плате. В библиотеке rpi_ws281x [21] от Джереми Гарффа используется очень умный низкоуровневый код PWM/DMA, специфичный для Raspberry Pi, поэтому я изменил библиотеку на использование одного пина SPI для управления светодиодами, что должно работать практически на любом оборудовании.
Unicorn pHAT соединяется с платой всего тремя проводами: +5V, GND и SPI0 MOSI (пин 19). В следующей статье я подробно опишу, как это всё работает. Светодиоды очень яркие, поэтому гораздо лучше смотрятся за диффузором, который крепится к внешней стороне корпуса двумя-четырьмя винтами M2.5. Можете вырезать собственный диффузор из матового акрила или купить модель Pimoroni с винтами за £3.
Состояние кластера на узле контроллера контролирует легковесный брокер (сервер) Mosquitto MQTT (Message Queue Telemetry Transport). Каждый узел раз в секунду сообщает брокеру текущую скорость процессора, температуру, сетевую активность и т.д.
Без нагрузки вся система из двенадцати Fire3s, двух сетевых коммутаторов и двух вентиляторов 7V потребляет всего 24 Вт, а при полной нагрузке — 55 Вт.
Нужны ли радиаторы? С удвоенным количеством ядер Fire3 SoC генерирует гораздо больше тепла, чем Pi3, поэтому очень важно наличие радиатора. К счастью, FriendlyARM поставляет большой радиатор с термопастой, который надёжно крепится на плату Fire3. Он гораздо больше, чем радиаторы для других одноплатников, которые я видел на рынке, и отлично снижает температуру камня, но вентиляторы всё равно не помешают.
Адаптер питания выдаёт максимум 75 Вт (1,1 А на Fire3), поэтому внешним USB-устройствам (например, жёстким дискам), скорее всего, потребуется отдельный источник питания. Измеряем температуру:
cat /sys/devices/virtual/thermal/thermal_zone0/temp
Видим, что процессор без нагрузки нагревается до 39°C с охлаждением от обоих вентиляторов 12V.
На нагрузке 100% с вентиляторами температура достигает стабильных 58°C:
sysbench --test=cpu --cpu-max-prime=20000000 --num-threads=8 run &
Без вентиляторов температура быстро достигнет 80°C с автоматическим понижением тактовой частоты во избежание дальнейшего перегрева. Процессоры могут долго работать на этой температуре без всяких проблем, но вы не получаете максимальную производительность.
Точно такой же дизайн корпуса должен подойти для моделей NanoPi Fire2s и Fire2As, которые не так нагреваются, как Fire3, так что им будет достаточно одного вентилятора. Для охлаждения одного Fire3 подойдёт гораздо меньший вентилятор, возможно, 40-60 мм.
Что нетипично для одноплатников, Fire3 умеет уходить в сон со сверхнизким энегопотреблением (около 5 мкA), что наталкивает на мысль усыплять и выводить из сна отдельные узлы по необходимости. К сожалению, здесь нет поддержки Ethernet Wake-on-LAN, а только негибкая настройка "wake after X minutes" [23]. Однако на платах есть хедер PWR. Возможно, его можно подключить для удалённого пробуждения с пина GPIO на контроллере?
Для охлаждения кластера я установил в корпус два вентилятора 92 мм. Я искал по возможности самые тихие кулеры по рейтингу Quietpc.com [24], и выбор пал на Gelid Silent 9 по £5,40.
Чтобы услышать хотя бы малейший шум вентилятора на 5V, нужно приблизить к нему ухо на расстояние 5−7 см, а резиновые прокладки из комплекта отлично изолируют корпус от любых вибраций. Однако на 12V вентиляторы довольно хорошо слышны (20dBA) в тихой комнате. Поэтому я искал напряжение, которое бы обеспечило достаточное охлаждение, но сохранило тишину. С помощью повышающего преобразователя я изменял скорость вентиляторов, пробуя варианты напряжения между 5V и 12V.
| Вентиляторы | Радиаторы? | Без нагрузки | 100% нагрузка | Производительность |
|---|---|---|---|---|
| Задний 12V, 1500 rpm | да | 42°C | 66°C | OK |
| Задний 9V,? rpm | да | 44°C | 71°C | OK |
| Задний 7V,? rpm | да | 46°C | 75°C | снижение частоты |
| Оба 12V, 1500 rpm | да | 39°C | 58°C | OK |
| Оба 7V,? rpm | да | 40°C | 65°C | OK |
| Оба 5V,? rpm | да | 46°C | 77°C | снижение частоты |
(тут приведены средние температуры для разных узлов, то есть на среднем 71°C в реальности две платы близки к аварийному снижению частоты).
Меня удивило, что второй вентилятор особо не влияет на результат, и в конце концов осталось сделать выбор между одним вентилятором на 9V или двумя на 7V, при этом второй вариант немного прохладнее и тише. Предполагаю, что второй вентилятор важнее на большем корпусе и/или более сложном пути воздушного потока внутри корпуса?
Сложнее всего оказалось найти хорошее решение для питания 12 узлов, двух коммутаторов Ethernet и двух вентиляторов. Я пытался избежать большого количества пайки и самостоятельного изготовления кабелей…
Оба Ethernet-коммутаторов тоже запитаны от 5V, припаяны круглые разъёмы постоянного тока.
Процесс сборки аналогичен 40-ядерному кластеру ARM на NanoPC-T3 [25], только с бóльшим количеством узлов, дополнительным сетевым коммутатором и вентилятором. Платы Fire3 размещаются на расстоянии 20 мм вдоль реек с резьбой M3, каждая закрепляется восемью гайками.
Для красоты я приклеил плату повышающего преобразователя 5V-to-12V к задней панели корпуса и добавил пины, чтобы легко включать и отключать вентиляторы. Некоторые кабели проложены и закреплены с помощью небольших кабельных стяжек.
Дисплей Pimoroni LED подключен к плате контролера через три пина GPIO… подробнее [18].
Большинство деталей получены от разных продавцов на AliExpress или eBay, что сильно повышает почтовые расходы. Если на кластеры будет достаточный спрос, дешевле закупить детали оптом.
| Коммутатор Edimax ES-5800G V3 Gigabit Ethernet (2 шт.) | £19,96 |
| Плоские кабели 15 см Cat6 LAN (12 шт.) | £6,79 |
| Стальные винты M3 12 мм (8 из 10 шт) | £1,45 |
| Латунная стойка M3 4 мм (8 из 50 шт.) | £0,99 |
| 5,5/2,1 мм DC коннектор (2 из 5 шт.) | £1,49 |
| 1 м провод джампера красный+чёрный | n/a |
| 1 м 2-жильный 0,5 мм кабель питания (11A) DC | £0,99 |
| Угловой разъём microUSB под пайку (12 из 20 шт.) | £1,63 |
| 5,5/2,1mm разъём DC для крепления на шасси (2 из 10 шт.) | £0,65 |
| Клеммный блок 10A (4 из 12) | £1,29 |
| БП 100 Вт (5 В @ 20 А) без вентилятора, 5,5/2,1 мм + розетка UK | £13,51 |
| Крепление RJ45 с резьбой «папа-мама» (2 шт.) | £1,74 |
| Стальные винты M3 8 мм (4 из 5) | £1,25 |
| Стальная штанга с резьбой M3 150 мм с шайбами и гайками (8 шт.) | £9,20 |
| Нейлоновые шестигранные гайки M3 (120 из 150) | £1,73 |
| Micro HDMI «папа» к HDMI «мама» панельное крепление 50 мм | £2,19 |
| USB «мама» к угловому «папа» панельное крепление 25 см (2 шт.) | £2.38 |
| 3 мм прозрачное оргстекло 600×400 мм | £5,32 |
| 5V-to-12V повышающий преобразователь | £2,04 |
| Заряд для лазерного резака | n/a |
| 92 мм вентилятор Gelid Silent 9 (2 шт.) | £11,65 |
| Полиуретановые резиновые ножки (4 из 10) | £1,75 |
| Панель Unicorn pHAT 32x RGB LED | £10,00 |
| Чёрные винты M2.5 10 мм (2−4 из 20) | £1,02 |
| Маленькие кабельные стяжки (10 шт.) | n/a |
| Итого материалы | £97,73 |
|---|---|
| NanoPi-Fire3 по $35 (12 шт.)1 | £383,38 |
| microSDHC-карта SanDisk Industrial class 10 8 ГБ (12 шт.) | £62,16 |
| Всего | £543,27 |
1 NanoPi-Fire3 можно беспошлинно импортировать в Великобританию, а доставка 12 плат из Китая стоит всего $29, но с учётом британского НДС в размере 20% получается £383,38.
К настоящему времени я также построил:
Автор: m1rko
Источник [34]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/298767
Ссылки в тексте:
[1] 64-битных ARM плат NanoPi-Fire3: http://www.friendlyarm.com/index.php?route=product/product&product_id=206
[2] Docker Swarm: https://docs.docker.com/engine/swarm/
[3] Kubernetes: https://kubernetes.io/
[4] RockPro64: https://www.pine64.org/?page_id=61454
[5] iPerf между двумя платами: http://blog.quindorian.org/2014/05/a-guide-to-iperf-network-metering.html/
[6] установить гигабитный USB-адаптер Ethernet: http://www.jeffgeerling.com/blogs/jeff-geerling/getting-gigabit-networking
[7] ранжирования компьютерных систем: https://en.wikipedia.org/wiki/Performance_per_watt
[8] SketchUp: http://www.sketchup.com/
[9] Image: https://climbers.net/sbc/nanopi-fire3-arm-supercomputer/Fire3Cluster4a.png
[10] Image: https://climbers.net/sbc/nanopi-fire3-arm-supercomputer/Fire3Cluster4b.png
[11] Скачать SKP-файл для SketchUp 2013: https://climbers.net/sbc/nanopi-fire3-arm-supercomputer/Fire3ClusterB.skp
[12] Inkscape: https://inkscape.org/en/
[13] Image: https://climbers.net/sbc/nanopi-fire3-arm-supercomputer/Fire3Case-2D.png
[14] Лист в формате SVG: https://climbers.net/sbc/nanopi-fire3-arm-supercomputer/Fire3Case.svg
[15] Лист в формате DXF: https://climbers.net/sbc/nanopi-fire3-arm-supercomputer/Fire3Case.dxf
[16] первой статье: https://climbers.net/sbc/diy-raspberry-pi-3-cluster/#laser-cutting
[17] подробнее: #1
[18] подробнее: #3
[19] конструкторских решениях: https://climbers.net/sbc/diy-raspberry-pi-3-cluster/#design-choices
[20] Unicorn pHAT 32x RGB LEDs: https://shop.pimoroni.com/products/unicorn-phat
[21] библиотеке rpi_ws281x: https://github.com/jgarff/rpi_ws281x
[22] Image: https://climbers.net/sbc/nanopi-fire3-arm-supercomputer/IMG18_7193_web.JPG
[23] "wake after X minutes": http://wiki.friendlyarm.com/wiki/index.php/NanoPi_Fire3#Power_Off_and_Schedule_Power_On
[24] Quietpc.com: https://www.quietpc.com/casefans
[25] 40-ядерному кластеру ARM на NanoPC-T3: https://climbers.net/sbc/40-core-arm-cluster-nanopc-t3/
[26] Image: https://climbers.net/sbc/nanopi-fire3-arm-supercomputer/IMG18_7122_web.JPG
[27] Image: https://climbers.net/sbc/nanopi-fire3-arm-supercomputer/IMG18_7117_web.JPG
[28] Image: https://climbers.net/sbc/nanopi-fire3-arm-supercomputer/IMG18_7196_web.JPG
[29] Image: https://climbers.net/sbc/nanopi-fire3-arm-supercomputer/IMG18_7200_web.JPG
[30] Самодельный кластер из пяти Raspberry Pi 3: https://climbers.net/sbc/diy-raspberry-pi-3-cluster-2017/
[31] Кластер из пяти Orange Pi Plus 2e: https://climbers.net/sbc/orange-pi-plus-2e-cluster/
[32] Дешёвый кластер из пяти PINE A64+: https://climbers.net/sbc/bargain-pine-a64-cluster/
[33] ClusterHAT с четырьмя Raspberry Pi Zero: https://climbers.net/sbc/clusterhat-review-raspberry-pi-zero/
[34] Источник: https://habr.com/post/429488/?utm_campaign=429488
Нажмите здесь для печати.