Создание высокопроизводительного кластера с 12 узлами NanoPi-Fire3 менее чем за £100 (£550, включая двенадцать Fire3)
Мой прошлый кластер на Raspberry Pi 3 в прошлом году немало заинтересовал публику, так что я попробовать сделать аналогичные проекты на других отличных одноплатных компьютерах, которые есть на рынке. FriendlyARM из Китая очень щедро отправила мне 12 своих последних 64-битных ARM плат NanoPi-Fire3, на каждой из которых восьмиядерный ARM A53 SoC, работающий на частоте 1,4 ГГц, с гигабитным Ethernet.
Размер кластера 146,4 (ш) × 151 (в) × 216 мм (д), а вес 1,67 кг.
или… Для чего он нужен??
Кластеры часто используют для ресурсоёмких задач (медицинские исследования, моделирование погоды, ИИ/глубокое обучение, майнинг криптовалют) и/или сервисов высокой доступности (избыточные узлы задействуют в случае аппаратных сбоев). Этот кластер, конечно, медленный с точки зрения современных суперкомпьютеров, но небольшая портативная система идеально подходит для обучения или разработки распределённого программного обеспечения, которое затем может перенести на гораздо более мощные системы.
Я планирую написать несколько статей, чтобы оценить этот кластер для майнинга и глубокого обучения.
Docker Swarm или Kubernetes кажутся отличными вариантами для управления кластером, хотя я их ещё не пробовал.
Плата NanoPi-Fire3 значительно более продвинутая по сравнению с Raspberry Pi 3 как с точки зрения производительности, так и с точки зрения функций, в меньшем форм-факторе, при этом примерно по той же цене:
В большинстве современных компьютеров установлены многоядерные процессоры, способные выполнять два или более заданий одновременно. Это могут быть разные приложения (например, веб-сервер, обрабатывающий три веб-страницы и базу данных), или одна задача, разделённая на несколько потоков для максимальной скорости (например, трассировщик лучей, сжатие файлов и т.д.). Этот тест из пакета
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 кВт!
Настройка кластера для получения максимального результата — это целое искусство: оптимизация компилятора, настройка математических библиотек и т.д. Но мы взяли оценки из стандартного пакета
И в Fire3, и в Pi 3 используются четырёхъядерные GPU для параллельной обработки больших объёмов данных в компьютерной графике. В последнее время их применяют также для специализированных вычислений, таких как майнинг криптовалют.
glmark2-es2 2014.03 (OpenGL ES 2.0). Оценка чем больше, тем лучше
Плата Fire3 в этом тесте оказалась в 7,5 раз быстрее, чем Pi 3. Результаты кластеров просто масштабируются по количеству узлов.
Как и в случае с CPU, есть много вариантов настройки графики путём компиляции с разными драйверами и т.д. В данном тесте мы просто запустили стандартный бинарник glmark2-es2 в Ubuntu 16.04.4, используя конфигурацию по умолчанию. Он запускается такой командой:
Устаревший рендер OpenGL для Pi 3 довольно слаб, но если переключиться на экспериментальный рендер Mesa VC4 через
В большинстве одноплатников ARM установлены относительно старые GPU, которые показывают очень скромную производительность по сравнению с последними флагманскими смартфонами, не говоря уже о настольных ПК с дорогими графическими картами высокого класса и огромными блоками питания. GPU Mali-400 MP4 в Fire3 датируется 2008 годом, а Broadcom VideoCore-IV в Pi 3 — 2010 годом. Есть несколько более свежих одноплатников, такие как RockPro64 от PINE64, с более мощными и новыми графическими процессорами (Mali-T860 MP4), в то время как в телефоне Samsung Galaxy S9 установлен Mali-G72 MP18 последнего поколения.
В этих тестах проверяется реальная скорость передачи данных в iPerf между двумя платами, подключёнными к коммутатору Ethernet 100/1000Mpbs.
iPerf v2.0.5 (TCP, 1000Mbps Ethernet, между платами), Мбит/с
С настройками по умолчанию интерфейс 1000 Мбит/с на Fire3 показывает огромную разницу скорости в 8,5 раз по сравнению с интерфейсом 100 Мбит/с на Pi 3.
Если хотите увеличить сетевую производительность на Raspberry Pi (старше Pi 3 model B+), можно установить гигабитный USB-адаптер Ethernet вместо стандартного встроенного интерфейса. Он увеличит скорость в 2,8 раза, но из-за ограничений USB2 по-прежнему будет гораздо медленнее настоящего интерфейса 1000 Мбит/с. Этот сетевой интерфейс интегрирован в самой новой модели Pi 3 B+.
Чтобы оценить производительность на ватт, я взял результаты теста Linpack выше в MFLOPS и поделил на потребляемую мощность. Этот показатель обычно используется для ранжирования компьютерных систем.
MFLOPS на ватт
Кластер Fire3 с пятью узлами в 5,8 раз более энергоэффективен, чем кластер Pi 3 того же размера, хотя и потребляет больше мощности при 100% нагрузке.
Ватты измерялись при нагрузке 100% для всего кластера, включая сетевые коммутаторы, вентиляторы и блоки питания. WiFi, Bluetooth, HDMI и прочее оставлено в настройках по умолчанию.
Суперкомпьютер Cray C90, упомянутый выше, выдавал всего лишь 0,02 MFLOPS на ватт в 1992 году.
Я изменил оригинальный дизайн кластера Raspberry Pi в бесплатной версии SketchUp, набросав грубые 3D-шаблоны NanoPi-Fire3, сетевых коммутаторов, разъёмов и т.д. Я решил не включить в модель вентиляционные щели/решётки. Корпус точно такого же размера, как и кластеры из пяти узлов: задача была вместить в него 12 плат, вдвое больше вентиляторов и коммутаторов Ethernet, а также все кабели!
Скачать SKP-файл для SketchUp 2013
Я пользуюсь бесплатной программой Inkscape: она подготавливает 2D-модели для загрузки в лазерный резак. Разные цвета соответствуют различным уровням мощности/скорости лазера. Сначала вырезаются контуры по зелёным линиям с отверстиями для портов, болтов и вентиляции. Розовым обозначены дополнительные вырезы, чтобы легче извлекать хрупкие части. Затем вытравливаются оранжевые текст и линии, а в самом конце панели вырезаются по синим контурам.
Можно скачать файлы для резки на одном листе 600×400×3 мм, хотя я сам для разных панелей брал или прозрачные, или чёрные листы:
Необязательная маленькая деталь — диффузор для (очень яркой!) панели светодиодов, которую можно вырезать из матового акрила или просто купить официальный диффузор Pimoroni за три фунта.
Подробнее о лазерной резке и безвинтовой системе сборки корпуса см. в моей первой статье.
Хотя корпус остался точно такого же размера но я сделал много изменений и улучшений:
Можете почитать ещё о некоторых конструкторских решениях в исходном кластере Pi.
Я выбрал отличную панель Unicorn pHAT 32x RGB LEDs от Pimoroni, чтобы создать красочный «дисплей состояния» кластера. Он показывает нагрузку на процессор, температуру, дисковую и сетевую активность для каждого узла. Эти недорогие платы обычно подключаются прямо к пинам Raspberry Pi, но надо немного повозиться, чтобы подключить их к другой плате. В библиотеке rpi_ws281x от Джереми Гарффа используется очень умный низкоуровневый код 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-устройствам (например, жёстким дискам), скорее всего, потребуется отдельный источник питания. Измеряем температуру:
Видим, что процессор без нагрузки нагревается до 39°C с охлаждением от обоих вентиляторов 12V.
На нагрузке 100% с вентиляторами температура достигает стабильных 58°C:
Без вентиляторов температура быстро достигнет 80°C с автоматическим понижением тактовой частоты во избежание дальнейшего перегрева. Процессоры могут долго работать на этой температуре без всяких проблем, но вы не получаете максимальную производительность.
Точно такой же дизайн корпуса должен подойти для моделей NanoPi Fire2s и Fire2As, которые не так нагреваются, как Fire3, так что им будет достаточно одного вентилятора. Для охлаждения одного Fire3 подойдёт гораздо меньший вентилятор, возможно, 40-60 мм.
Что нетипично для одноплатников, Fire3 умеет уходить в сон со сверхнизким энегопотреблением (около 5 мкA), что наталкивает на мысль усыплять и выводить из сна отдельные узлы по необходимости. К сожалению, здесь нет поддержки Ethernet Wake-on-LAN, а только негибкая настройка "wake after X minutes". Однако на платах есть хедер
Для охлаждения кластера я установил в корпус два вентилятора 92 мм. Я искал по возможности самые тихие кулеры по рейтингу Quietpc.com, и выбор пал на Gelid Silent 9 по £5,40.
Чтобы услышать хотя бы малейший шум вентилятора на 5V, нужно приблизить к нему ухо на расстояние 5−7 см, а резиновые прокладки из комплекта отлично изолируют корпус от любых вибраций. Однако на 12V вентиляторы довольно хорошо слышны (20dBA) в тихой комнате. Поэтому я искал напряжение, которое бы обеспечило достаточное охлаждение, но сохранило тишину. С помощью повышающего преобразователя я изменял скорость вентиляторов, пробуя варианты напряжения между 5V и 12V.
(тут приведены средние температуры для разных узлов, то есть на среднем 71°C в реальности две платы близки к аварийному снижению частоты).
Меня удивило, что второй вентилятор особо не влияет на результат, и в конце концов осталось сделать выбор между одним вентилятором на 9V или двумя на 7V, при этом второй вариант немного прохладнее и тише. Предполагаю, что второй вентилятор важнее на большем корпусе и/или более сложном пути воздушного потока внутри корпуса?
Сложнее всего оказалось найти хорошее решение для питания 12 узлов, двух коммутаторов Ethernet и двух вентиляторов. Я пытался избежать большого количества пайки и самостоятельного изготовления кабелей…
Оба Ethernet-коммутаторов тоже запитаны от 5V, припаяны круглые разъёмы постоянного тока.
Процесс сборки аналогичен 40-ядерному кластеру ARM на NanoPC-T3, только с бóльшим количеством узлов, дополнительным сетевым коммутатором и вентилятором. Платы Fire3 размещаются на расстоянии 20 мм вдоль реек с резьбой M3, каждая закрепляется восемью гайками.
Для красоты я приклеил плату повышающего преобразователя 5V-to-12V к задней панели корпуса и добавил пины, чтобы легко включать и отключать вентиляторы. Некоторые кабели проложены и закреплены с помощью небольших кабельных стяжек.
Дисплей Pimoroni LED подключен к плате контролера через три пина GPIO… подробнее.
Большинство деталей получены от разных продавцов на AliExpress или eBay, что сильно повышает почтовые расходы. Если на кластеры будет достаточный спрос, дешевле закупить детали оптом.
1 NanoPi-Fire3 можно беспошлинно импортировать в Великобританию, а доставка 12 плат из Китая стоит всего $29, но с учётом британского НДС в размере 20% получается £383,38.
К настоящему времени я также построил:
Мой прошлый кластер на Raspberry Pi 3 в прошлом году немало заинтересовал публику, так что я попробовать сделать аналогичные проекты на других отличных одноплатных компьютерах, которые есть на рынке. FriendlyARM из Китая очень щедро отправила мне 12 своих последних 64-битных ARM плат NanoPi-Fire3, на каждой из которых восьмиядерный ARM A53 SoC, работающий на частоте 1,4 ГГц, с гигабитным Ethernet.
Размер кластера 146,4 (ш) × 151 (в) × 216 мм (д), а вес 1,67 кг.
Программное обеспечение для запуска в кластере?
или… Для чего он нужен??
Кластеры часто используют для ресурсоёмких задач (медицинские исследования, моделирование погоды, ИИ/глубокое обучение, майнинг криптовалют) и/или сервисов высокой доступности (избыточные узлы задействуют в случае аппаратных сбоев). Этот кластер, конечно, медленный с точки зрения современных суперкомпьютеров, но небольшая портативная система идеально подходит для обучения или разработки распределённого программного обеспечения, которое затем может перенести на гораздо более мощные системы.
Я планирую написать несколько статей, чтобы оценить этот кластер для майнинга и глубокого обучения.
Docker Swarm или Kubernetes кажутся отличными вариантами для управления кластером, хотя я их ещё не пробовал.
NanoPi-Fire3 в сравнении с Raspberry Pi 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/.*/80\tNBs/; 6s/.*/18560\tNs/; 11s/.*/8\tPs/; 12s/.*/12\tQs/" 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 от PINE64, с более мощными и новыми графическими процессорами (Mali-T860 MP4), в то время как в телефоне Samsung Galaxy S9 установлен Mali-G72 MP18 последнего поколения.
Сеть
В этих тестах проверяется реальная скорость передачи данных в iPerf между двумя платами, подключёнными к коммутатору 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 вместо стандартного встроенного интерфейса. Он увеличит скорость в 2,8 раза, но из-за ограничений USB2 по-прежнему будет гораздо медленнее настоящего интерфейса 1000 Мбит/с. Этот сетевой интерфейс интегрирован в самой новой модели Pi 3 B+.
Производительность кластера на ватт
Чтобы оценить производительность на ватт, я взял результаты теста Linpack выше в MFLOPS и поделил на потребляемую мощность. Этот показатель обычно используется для ранжирования компьютерных систем.
MFLOPS на ватт
Кластер Fire3 с пятью узлами в 5,8 раз более энергоэффективен, чем кластер Pi 3 того же размера, хотя и потребляет больше мощности при 100% нагрузке.
Ватты измерялись при нагрузке 100% для всего кластера, включая сетевые коммутаторы, вентиляторы и блоки питания. WiFi, Bluetooth, HDMI и прочее оставлено в настройках по умолчанию.
Суперкомпьютер Cray C90, упомянутый выше, выдавал всего лишь 0,02 MFLOPS на ватт в 1992 году.
Дизайн корпуса в 3D
Я изменил оригинальный дизайн кластера Raspberry Pi в бесплатной версии SketchUp, набросав грубые 3D-шаблоны NanoPi-Fire3, сетевых коммутаторов, разъёмов и т.д. Я решил не включить в модель вентиляционные щели/решётки. Корпус точно такого же размера, как и кластеры из пяти узлов: задача была вместить в него 12 плат, вдвое больше вентиляторов и коммутаторов Ethernet, а также все кабели!
Скачать SKP-файл для SketchUp 2013
Лазерная резка
Я пользуюсь бесплатной программой Inkscape: она подготавливает 2D-модели для загрузки в лазерный резак. Разные цвета соответствуют различным уровням мощности/скорости лазера. Сначала вырезаются контуры по зелёным линиям с отверстиями для портов, болтов и вентиляции. Розовым обозначены дополнительные вырезы, чтобы легче извлекать хрупкие части. Затем вытравливаются оранжевые текст и линии, а в самом конце панели вырезаются по синим контурам.
Можно скачать файлы для резки на одном листе 600×400×3 мм, хотя я сам для разных панелей брал или прозрачные, или чёрные листы:
Необязательная маленькая деталь — диффузор для (очень яркой!) панели светодиодов, которую можно вырезать из матового акрила или просто купить официальный диффузор Pimoroni за три фунта.
Подробнее о лазерной резке и безвинтовой системе сборки корпуса см. в моей первой статье.
Изменения в дизайне по сравнению с кластером Pi 3
Хотя корпус остался точно такого же размера но я сделал много изменений и улучшений:
- Конструкция горизонтальной монтажной рейки сохранилась, но в Fire3 отверстия M3, для которых проще найти детали, чем для M2.5 в Pi. И отверстия ближе друг к другу, потому что общий размер платы немного меньше, чем Pi. Привинчивать пластиковые гайки к горизонтальным рейкам немного утомительно, и я бы хотел напечатать на 3D-принтере какие-нибудь пластиковые зажимы, чтобы удерживать платы вдоль каждой рейки, или сделать плотные эластичные шайбы?
- Внешний блок питания вместо внутреннего USB-концентратора: я заменил внутренний USB-блок питания на безвентиляторный блок питания переменного тока снаружи корпуса. Это освобождает место внутри (для большего количества плат Fire3 и двух вентиляторов) и должно помочь с отводом тепла. Каждый Fire3 может потянуть максимум 2A, но в реальности кластер потянет гораздо меньше, без учёта дополнительной периферии, которая висит на USB и GPIO.
- Две цепочки microUSB вместо 12 отдельных кабелей: подходящих в продаже не нашлось, так что я сделал собственные кабели в «цепочку» (daisy-chain), используя более короткие и толстые провода (рейтинг 11A) и припаяв 12 коннекторов microUSB: в итоге кабели заняли очень мало места внутри корпуса… подробнее
- Два вентилятора вместо одного: я был уверен что более мощным платам Fire3 понадобится значительно более активное охлаждение, поэтому сделал на корпусе место для двух сверхтихих вентиляторов 92 мм: задний вентилятор всасывает холодный воздух внутрь корпуса, а передний выдувает горячий воздух наружу.
- Вентилятор Gelid Solutions Silent 9 вместо Nanoxia Deep Silence: я очень доволен производительностью вентилятора Nanoxia (и их отличной техподдержкой), но хотел попробовать более дешёвый вариант. Резиновые прокладки Gelid толще, чем у Nanoxia, поэтому я увеличил диаметр крепёжных отверстий в корпусе на 0,5 мм.
- Прямое питание 5V для вентиляторов вместо 5V от GPIO: в предыдущих кластерах вентиляторы запитывались от вывода GPIO одной из плат. Но с учётом установки двух вентиляторов на 12V я подключил повышающий преобразователь с прямой линией от основного питания корпуса.
- Несколько вентиляционных отверстий вместо большого количества: вместо вырезания десятков вентиляционных отверстий по всему корпусу (что занимает время) я вырезал отверстия только на передней и задней панелях, напротив вентиляторов. Может быть, это оптимизирует воздушный поток через корпус?
- USB-разъёмы на корпусе: эти два объединённых USB-разъёма отлично работали в моём исходном кластере, но они мне никогда не нравились из-за длинных кабелей, которые нормально не сгибаются. Так что теперь я взял два отдельных USB-порта с короткими кабелями и разъёмами под углом, что оставляет больше места внутри корпуса.
- Нет полки для крепления USB-концентратора: перенос блока питания наружу упростил конструкцию корпуса, который теперь можно вырезать из одного листа акрила 600×400 мм. Снятие полки уменьшает жёсткость корпуса, но если привинтить горизонтальные монтажные рейки к боковым панелям, то жёсткость нормальная.
- Плоские кабели LAN вместо круглых: мне понравились разноцветные сетевые кабели из проекта RPi3, но их очень непросто уложить внутри корпуса. Плоские кабели изгибаются гораздо легче, что ещё важнее с такой плотной упаковкой плат. Сначала я попробовал кабели 25 см, но они оказались слишком длинными, а вот кабели 15 см оставили больше свободного пространства внутри корпуса.
- Синие сетевые кабели вместо скучно-серых: синий действительно расцвечивает серую конструкцию… плюс логотип FriendlyARM синий с зелёным.
- Гигабитный свич вместо 10-гигабитного: у Fire3 сетевые порты на 1000 Мбит/с (вдесятеро быстрее, чем Pi), поэтому очевидно, что коммутатор должен быть минимум 1000 Мбит/с. Десятигигабитный коммутатор полностью устранит бутылочное горлышко в этом месте: так десять или более Fire3s смогут на полной скорости обмениваться данными с внешней сетью. Однако такие свичи по-прежнему дороги (от £200) и слишком громоздки. Коммутатор NETGEAR GS110MX выглядит многообещающе.
- Держатели платы 4 мм вместо 6 мм: понизив плату коммутатора, мы получили немного больше места для прокладки кабелей и воздухообмена.
- Micro HDMI вместо HDMI: в платах Fire3 разъёмы Micro HDMI, поэтому я использовал самый короткий кабель Micro HDMI → HDMI, который смог найти (50 см). Другим вариантом был более короткий кабель с отдельным адаптером HDMI → Micro HDMI, но он громоздкий и может заслонить один из портов LAN.
- Чёрные панели из плексигласа вместо прозрачных: чтобы «спрятать» два вентилятора, но оставить всю электронику на виду сбоку и сверху. Чёрная передняя панель также привлекает взгляд к светодиодной панели Unicorn.
- Светодиодная панель Unicorn pHAT вместо простых светодиодов на платах: в кластере так много узлов, что есть смысл вынести на переднюю панель корпуса визуальный мониторинг статуса, который показывает скорость CPU, температуру, дисковую и сетевую активность для каждого узла… подробнее
Можете почитать ещё о некоторых конструкторских решениях в исходном кластере Pi.
Индикаторы состояния сервера с MQTT
Я выбрал отличную панель Unicorn pHAT 32x RGB LEDs от Pimoroni, чтобы создать красочный «дисплей состояния» кластера. Он показывает нагрузку на процессор, температуру, дисковую и сетевую активность для каждого узла. Эти недорогие платы обычно подключаются прямо к пинам Raspberry Pi, но надо немного повозиться, чтобы подключить их к другой плате. В библиотеке rpi_ws281x от Джереми Гарффа используется очень умный низкоуровневый код 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". Однако на платах есть хедер
PWR
. Возможно, его можно подключить для удалённого пробуждения с пина GPIO на контроллере?Бесшумное охлаждение
Для охлаждения кластера я установил в корпус два вентилятора 92 мм. Я искал по возможности самые тихие кулеры по рейтингу Quietpc.com, и выбор пал на 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 | снижение частоты |
Меня удивило, что второй вентилятор особо не влияет на результат, и в конце концов осталось сделать выбор между одним вентилятором на 9V или двумя на 7V, при этом второй вариант немного прохладнее и тише. Предполагаю, что второй вентилятор важнее на большем корпусе и/или более сложном пути воздушного потока внутри корпуса?
Кабели питания: сага в пяти частях
Сложнее всего оказалось найти хорошее решение для питания 12 узлов, двух коммутаторов Ethernet и двух вентиляторов. Я пытался избежать большого количества пайки и самостоятельного изготовления кабелей…
- Fire3s питаются через microUSB, как Pi, но я не нашёл 12-портовый USB-концентратор на 15A. Я рассматривал 6-портовый концентратор с шестью двухсторонними сплиттерами microUSB или даже два отдельных 6-портовых USB-концентратора. Но первый вариант не обеспечивал достаточно мощности для 12 узлов, а второй занимал слишком много места внутри корпуса.
- С внешним «кирпичом» в качестве источника переменного тока я попробовал некоторые стандартные 8х и 6х сплиттеры. Кабели предназначены для камер видеонаблюдения с угловыми разъёмами microUSB → DC, но они занимают много места (плохо для воздушного потока) и не рассчитаны по току, что приводит к падению напряжения на каждую плату Fire3.
- А если использовать стальные рейки шасси в качестве проводника для 5V+GND?! Это не так безумно, как кажется: у каждой рейки низкое сопротивление всего 0,5 Ом и должна быть электрическая изоляция от плат. Но я не смог придумать, как сделать надёжное соединение от каждой платы к рейке, чтобы легко отключать их в случае замены узла и т.д.
- Новая надежда? Существует ли какой-то способ питания плат кроме пайки 12 самодельных кабелей microUSB? У плат Fire3 есть незанятые точки 5V+GND, такие как хедер UART. Было бы проще и дешевле припаять двухконтактный хедер к каждому узлу и обеспечить питание с помощью готовых двухконтактных разъемов DuPont вместо microUSB. Однако от этого смелого плана пришлось отказаться, когда я понял, что после сборки кластера между платами недостаточно места для подключения или отключения двухконтактных разъёмов… да и в идеале я бы не хотел паять каждую плату.
- В итоге я смастерил самодельную цепочку из силовых кабелей (daisy-chain), взяв двужильный кабель толщиной 0,5 мм (11A, 6 узлов по длине) и припаяв к нему угловые разъёмы microUSB. Получилось очень аккуратно, и кабель занял очень мало места внутри корпуса, обеспечив отличный воздушный поток. Две цепочки питания выходят из корпуса через отдельные через отдельные сокеты, чтобы ограничивать максимальный ток через один разъём DC. Это также означает, что вы можете включить только верхнюю или нижнюю половину кластера, если хотите.
Оба Ethernet-коммутаторов тоже запитаны от 5V, припаяны круглые разъёмы постоянного тока.
Сборка кластера Fire3
Процесс сборки аналогичен 40-ядерному кластеру ARM на NanoPC-T3, только с бóльшим количеством узлов, дополнительным сетевым коммутатором и вентилятором. Платы Fire3 размещаются на расстоянии 20 мм вдоль реек с резьбой M3, каждая закрепляется восемью гайками.
Для красоты я приклеил плату повышающего преобразователя 5V-to-12V к задней панели корпуса и добавил пины, чтобы легко включать и отключать вентиляторы. Некоторые кабели проложены и закреплены с помощью небольших кабельных стяжек.
Дисплей Pimoroni LED подключен к плате контролера через три пина GPIO… подробнее.
Список материалов
Большинство деталей получены от разных продавцов на 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 |
Кластеры из других одноплатных компьютеров
К настоящему времени я также построил: