Суперкомпьютер Raspberry Pi на Java One 2022

Dec 20 2022
Крис Бенсен. Если вы предпочитаете, вы можете прочитать этот пост в блоге на GitHub здесь. Суперкомпьютер Raspberry Pi изначально был создан для Oracle Open World в октябре 2019 года.

Крис Бенсен

Если вы предпочитаете, вы можете прочитать этот пост в блоге на GitHub здесь .

Суперкомпьютер Raspberry Pi был первоначально создан для Oracle Open World в октябре 2019 года. В четырех серверных стойках установлено 1050 Raspberry Pi 3b+, сконфигурированных в большой квадратной коробке, напоминающей британскую полицейскую будку, популяризированную в одном сериале BBC. Перенесемся в сегодняшний день, когда суперкомпьютер Raspberry Pi (Pi Cluster) был отправлен в электронные отходы, с него были сняты некоторые части, и он бездействовал в течение двух лет до мая этого года, когда он нашел свой путь в мой гараж для полный капитальный ремонт.

Суперкомпьютер Raspberry Pi на выставке Open World 2019

Для временной истории того, как появился 1050 Raspberry Pi, вы можете прочитать «Временная история самого большого в мире кластера Raspberry Pi» .

Все началось с того, что Джеральд Венцл из Oracle Switzerland обратил мое внимание на кластер из 12 узлов, а затем мы провели мозговой штурм со Стивеном Чином по поводу большого кластера. Узнайте, как Pi Cluster превратился в электронные отходы во время блокировки COVID и пожаров в Калифорнии, и как Эрик Седлар спас его, в конечном итоге поместив в Oracle Labs. Если вам это покажется слишком длинным, посмотрите оригинальное видео о сборке самого большого в мире кластера Raspberry Pi, о котором мы знаем , это Создание крупнейшего в мире кластера Raspberry Pi от Джеральда Венцла и это видео о кластере Big Pi в моем гараже — часть I. .

И кстати, если ты это читаешь, велика вероятность, что ты станешь великим светилом. Что такое Люминарий? Это наша недавно созданная группа разработчиков, которая объединяет таких разработчиков, как вы, с эксклюзивным техническим контентом, бесплатными подарками и сообществом, чтобы помочь вам создать что-то столь же крутое, как этот кластер, стать Luminary сегодня .

Воскрешение

Когда было объявлено о CloudWorld, мы сразу же предложили воскресить самый большой в мире суперкомпьютер Raspberry Pi (о котором мы знаем) . Кому не нравится хорошая история о воскресении? Предложения были примерно такими:

1. Пожертвуйте его Музею компьютерной истории в качестве нефункционального произведения искусства ко Дню Пи.
2. Raspberry Pi сейчас в цене. Разыграйте часть Pi, чтобы выиграть бесплатную Raspberry Pi 3B+ от одного из крупнейших в мире кластеров Raspberry Pi.
3. У нас есть одна возможность войти в историю. Мы исправляем его для CloudWorld, добавляем вентиляторы, чтобы он не перегревался, и запускаем его как «локальное» и «периферийное» устройство, демонстрируя технологии, которые создаются в лабораториях. Мы включим GraalPython , Java и Oracle Linux 9 , работающие на каждом устройстве в кластере Pi. Все это подключено к Oracle Cloud Infrastructure (OCI) через Site-to-Site (прокрутите вниз, чтобы узнать об этом).VPN для локальной сети и через микросервисы, вычислительные экземпляры, автономную базу данных, шлюз служб и балансировщик нагрузки. Визуализация AR была бы идеальной, и мы могли бы запустить на ней что-нибудь классное — например, когда мы запускали SETI@home на мини-суперкомпьютере Raspberry Pi, кластере 84-Pi. Мне пришла в голову идея настроить сервис, чтобы любой человек в мире мог отправлять код в кластер для запуска рабочей нагрузки, пока мы демонстрируем наши сервисы Digital Twin AR/VR и создаем блоги и видео, чтобы вдохновлять разработчиков и студентов. Мы можем показать людям, почему разработчики и студенты получают огромное удовольствие от обучения и использования Oracle Free Tier . Кроме того, мы можем получить мировой рекорд Книги Гиннесса.

Выбираем третий вариант и начинаем поиск новой лаборатории. Я поговорил с руководителями различных продуктовых команд, упомянутых выше, а также с лидерами сообщества Raspberry Pi, такими как Джефф Гирлинг и Эбен Аптон, и изложил план. Я не могу рассказать вам обо всем плане, потому что мы только что заложили основу для него, но многое еще впереди. Это просто история передачи кластера Pi DevNucleus в CloudWorld и краткое упоминание о том, что происходит после этого. Оказывается, оценка книги рекордов Гиннеса стоит очень дорого!

Первым шагом было определить бюджет и смету работ, чтобы увидеть, выполнимо ли это. Мы знали, что нам нужно:

1. Вентиляторы. Много поклонников.
2. Заменить недостающие детали.
3. Все проверить.
4. Написать новое программное обеспечение.

Каждая сеть Pi загружается. В 2019 году у меня был запущен Oracle Linux 7 во всем кластере, но работало ли оно до сих пор? Был ли у нас весь исходный код, MAC-адреса и все необходимое, чтобы сделать это снова?

Вторым шагом было найти место для работы над Pi Cluster. Попробуйте найти место с двойными дверями, рядом с грузовым лифтом, с достаточной мощностью и пространством для работы на нем, и с сетью, которая не заперта наглухо — не просто! Я посмотрел на объекты Oracle по всему миру. Логистика работы над чем-то вроде этого удаленно и вся физическая работа, которая должна была быть вложена в это, означала, что в любой точке мира будет работать только при соблюдении определенных требований. Я должен был бы поехать туда, все настроить и иметь дюжину людей, чтобы помочь. Мы настроили его для удаленного доступа, но кто-то должен был быть доступен лично, когда что-то не работало должным образом. После приятного обеда с моей замечательной женой мы решили, что наш гараж работает лучше всего, и именно здесь началась #BigPiClusterInMyGarage .

Добавление вентиляторов — охлаждение Raspberry Pi

После того, как он был доставлен, я приступил к работе, чтобы убедиться, что наш бюджет точен, а затем исправить и протестировать вещи, заказав запасные части (в основном вентиляторы). Много фанатов: 250 новых фанатов, если быть точным. Кластер получился с 257 вентиляторами, и это не считая вентиляторов, которые находятся в каждом из коммутаторов, сервера или блоков питания. Это потребовало, чтобы я разобрал весь кластер и собрал его заново. Не каждый болт был удален, но все 21 блок Pi 2U были разобраны, каждый 5-й Pi снят и заменен, а это означало, что нужно было напечатать 250 новых Pi caddies с кронштейнами для вентиляторов. Вы можете узнать об этом здесь . Виктор Агреда использовал свой недавно купленный Ultimaker S5, чтобы напечатать несколько десятков фанатских версий кэдди. Всем фанатам нужна была сила, и большое спасибо Эли Шиллингу .для создания многих жгутов проводов. Кроме того, мы добавили несколько пасхалок. Я знаю, что это не такая уж пасхалка, если я расскажу об этом миру, но я объясню это более подробно в разделе «Тревожные песни» ниже (потому что это слишком круто, чтобы ничего не говорить). У меня есть несколько видео, документирующих некоторые работы, которые можно найти в A Temporal History of The World’s Largest Raspberry Pi Cluster .

Операционная система — самая умная операционная система

Я думаю, что многие из нас недооценивают ценность хорошей операционной системы при создании инфраструктуры и оборудования, а Oracle Linux превосходит все ожидания. Я более подробно расскажу об операционной системе в книге «Временная история крупнейшего в мире кластера Raspberry Pi» (и у меня есть еще кое-что, над чем я работаю, чтобы вы могли настроить загрузку Pi по сети дома).Поскольку у нас была вся эта работа, которую нужно было использовать, нам пришлось перейти с Oracle Linux 7 на Oracle Linux 9. Открою вам секрет: это было не так просто. Тем не менее, с командой Oracle Linux было здорово работать, и она действительно заслуживает похвалы за настройку операционной системы для кластера Pi. Попробуйте Oracle Linux 9, его стоит использовать или обновить до него. Было несколько сбоев, таких как добавленный уровень безопасности, который означал, что учетная запись root больше не имела доступа по SSH по умолчанию.

Здесь стоит упомянуть, как мы загружаем Pi. Каждый Pi в кластере загружается по сети с одного монтирования NFS на сервере, доступного только для чтения, и мы добавили службу systemd для запуска сценария bash всякий раз, когда загружается сервер или Pi. Это делает настройку того, что мы запускаем, почти без усилий.

Программное обеспечение и облачные сервисы — GraalVM быстро работает на клиенте или в облаке

Все программное обеспечение имеет открытый исходный код, и его можно найти здесь, в нашем репозитории DevRel GitHub. Есть некоторые вещи, поступающие из лабораторий и недоступные даже в виде технического предварительного просмотра (я пытался, они просто не были готовы) , поэтому они не включены. Имейте в виду, большая часть этого кода была написана быстро. То, что вы обнаружите, может не иметь большого смысла, поэтому позвольте мне объяснить.

Во-первых, в кластере есть программное обеспечение. Сервер запускает контейнер Docker, состоящий из GraalPython поверх GraalVM . Этот Dockerfile постоянно совершенствуется, поэтому я пока не рекомендую его копировать. Я предоставил несколько отчетов об ошибках, но как только переменные среды Graal и CTRL+C заработают (и, возможно, будет создан новый образ для GraalPython) , вам захочется погрузиться прямо в него. Между тем, знайте, что это один из способов делаю это. Я видел примерно 8- кратное увеличение производительности при запуске чистого кода Python под GraalVM . Это довольно впечатляет!

Каждое устройство в кластере запускает веб-службу. Сервер передает сообщение UDP со своим IP-адресом и портом для любого устройства для прослушивания и связывается с сервером для автоматического обнаружения. Это новинка по сравнению с предыдущими годами, когда IP-адрес сервера помещался в переменную среды. IP-адрес не меняется, поэтому мы можем жестко запрограммировать его, но есть две проблемы: любой, кто работает над этим, должен запустить тестовую систему на своем рабочем столе и смоделировать Pi или пару Pi на своем столе, и переменные среды теряются, как только вы sudo. Это действительно решает многие проблемы! Как только Pi загружается, он запускает свой веб-сервер, прослушивает сообщение UDP, регистрирует свой IP-адрес и MAC-адрес на сервере и ожидает работы. С интервалами,

Каждые пять секунд каждый Pi отправляет все свои данные (ЦП, память, температура и т. д.) в конечную точку REST в автономной базе данных через встроенную поддержку ORDS. Документацию можно найти здесь . Я добавил некоторый код, где, если Pi не сможет отправить свои данные, в следующий раз он будет ждать немного дольше, масштабируясь до 60 секунд. Оказывается, это гора данных, с которыми Autonomous Database справляется без особых усилий. Я попробовал несколько других баз данных, которые не должны быть названы, и скажем так, они не могли с этим справиться, что иногда приводило к задержкам более пяти секунд.

Цифровой двойник с AR/VR — визуализируйте свои данные

Суперкомпьютерный рендеринг Raspberry Pi

Я создал довольно подробную 3D-модель Pi Cluster, которую можно найти здесь и открыть в вашей любимой 3D-программе. Наши эксперты по AR/VR и облачным технологиям Войцех Плута , Виктор Мартин , Богдан Фарка и Стюарт Коггинс приступили к работе над созданием потрясающих приложений для AR и VR. Они настроили базы данных, написали приложения APEX и запустили socket.io для потоковой передачи. Они использовали кластер Kubernettes под названием OCI OKE.так что 3D-опыт может масштабироваться без падения, а это означает, что любой может поставить цифровой двойник кластера Pi в своей гостиной. У нас есть iPad для дополненной реальности и распечатанные QR-коды, чтобы iPad мог отслеживать кластер с точностью до миллиметра, позволяя посетителям в интерактивном режиме наблюдать за тем, что происходит в кластере. Команда также создала версию для Meta VR, подробности о которой будут раскрыты в ближайшее время. В моем гараже не хватило мощности для запуска всего кластера, поэтому мы интегрируем и протестируем его до того, как в CloudWorld откроются двери. Может сработать, может упасть. Что бы ни случилось, это будет хорошая история! Я добавлю сюда ссылку, когда у нас будет что-то написанное о AR/VR Digital Twin.

Услуги OCI — в центре каждого проекта находится облачная инфраструктура

В моем гараже Pi Cluster настроен как «локальный» сервер. Я создал изолированную подсеть на своем Ubiquity Dream Machine Pro, настроил межсайтовую VPN для OCI с помощью Bastion и использовал локальный переходник с двумя сетевыми интерфейсами (один для подсети Pi Cluster и один для Pi Cluster). ) . Таким образом, Pi Cluster представляется внешнему миру как один IP-адрес. Появитесь, подключите сетевое питание, и все готово. Я бы хотел, чтобы установка была такой простой, и мне не нужно было все тестировать, чтобы убедиться, что кабели не отскакивают от места, но давайте просто скажем, что это так просто, потому что звучит веселее.

У нас не будет контроля над сетью в CloudWorld, поэтому Pi Cluster — это «пограничное устройство». Он использует облачные службы, такие как Services Gateway , Load Balancer и Domain Management . Да, у нас есть домен. Я доберусь до этого в следующем разделе.

Сеть выглядит так:

Схема демонстрационной сети кластера Pi

Если у вас есть какие-либо вопросы по этому поводу, зайдите на общедоступный канал Oracle Slack для разработчиков. Задайте любой вопрос, который вы хотите. Как настроить, какие сервисы использовать. Там вы найдете ответы!

IoT — специальные легкие задачи с небольшими недорогими микроконтроллерами

У нас также есть пара Arduino, работающих в кластере. Первый Arduino — это Arduino Mega с Ethernet HAT. Оригинальный код можно найти здесь . Он запускает веб-службу и включает два соленоида для удаленного доступа к физическим кнопкам перезагрузки и питания на сервере. Я немного изменил программное обеспечение по сравнению с репозиторием и еще не публиковал, поэтому я оставил эту старую версию. Версия, которую я не опубликовал, регистрируется сама и ожидает простой команды запуска, когда разработчик подключается к Bastion по SSH.

Второй Arduino — это то же самое оборудование, но на нем работает REST-сервер, прослушивающий полезную нагрузку JSON, и он подключен к дюжине NeoPixels в свете фонаря в верхней части полицейской будки.

Warble — собственный язык программирования, разработанный для кластера Pi

Мы размещаем доменhttps://warble.withoracle.cloudна OCI при поддержке Управления доменом , балансировщика нагрузки и вычислительного экземпляра . На вычислительном экземпляре работает то же программное обеспечение, что и в кластере Pi: контейнер Docker с GraalPython и веб-службой. Это не совсем готово для прайм-тайма, но зайдите сюда или в Твиттер 18-20 октября, потому что это будет в прямом эфире во время CloudWorld, и я думаю, что это будет очень весело.

Логотип трели

Мы создали язык программирования, предназначенный для Twitter, который будет работать на кластере Pi, под названием Warble . Warble не является полнофункциональным языком программирования, и я использовал множество сокращений. Он сделан так, чтобы использовать как можно меньше символов, поэтому вы можете опубликовать Warble в Twitter и запустить его в кластере Pi. У меня есть скрипт Python, работающий на экземпляре компьютера с использованием Twitter API для поиска хэштега #pi . Если следующий символ — это открывающая фигурная скобка, а последний символ — закрывающая фигурная скобка, то у нас есть Warble, и он сохраняется в базе данных. Например:

> #pi{PRINT(“hello cluster”)}
< hello cluster

Было бы здорово посмотреть, кто сможет вычислить число Пи с наибольшим количеством цифр в одном из крупнейших в мире кластеров Raspberry Pi?

> #pi{PRINT(2*ROUND(ACOS(0.0),3))}
< 3.142

Twitter будет очень интересным, хотя он ограничивает API, поэтому у нас есть размещенный домен. Я предоставлю конечную точку REST для публикации Warbles. Может быть, кто-нибудь разберется, как вычислить число Пи по формуле Бейли–Борвейна–Плауффа с помощью Уорбла или каким-то другим способом.

Я не собираюсь писать синтаксическую грамматику, но приведу несколько примеров.

Warble поддерживает переменные:

> #pi{x=0PRINT(x)}
< 0

> #pi{x=1/16.0²*(4.0/(8*k+1)-2.0/(8*k+4)-1.0/(8*k+5)-1.0/(8*k+6)}
<

> #pi{i=0;WHILE(i<10){PRINT(i);i++}}
< 0
< 1
< 2
< 3
< 4
< 5
< 6
< 7
< 8
< 9

> #pi{FOR(i=0;i<10;i++){PRINT(i)}}
< 0
< 1
< 2
< 3
< 4
< 5
< 6
< 7
< 8
< 9

Кроме того, вы можете сохранять значения и загружать их снова. Они зависят от пользователя:

> #pi{SAVE(“pi”,1)}
<

> #pi{x=LOAD(“pi”);x++;SAVE(“pi”,x);PRINT(x)}
< 2

> #pi{PLAYSOUND(”http://downloads.bbc.co.uk/doctorwho/sounds/tardis.mp3");}
<

> #pi{LIGHTS(0,255,0,0)}
<

> #pi{LIGHTS(23,0,255,0)}
<

> #pi{LIGHTS(0,0,255,0);SLEEP(20);LIGHTS(0,0,255,0)}
<

> #pi{FOR(i=0;i<24;i++){LIGHTS(i,0,255,0)}SLEEP(20);FOR(i=0;i<24;i++){LIGHTS(i,0,0,255)}}
<

На Ubiquity Dream Machine Pro с помощью Тима Клегга я создал новую подсеть. Вот схема шагов, которые мы выполнили. Я не буду приводить конкретные снимки экрана или видео, потому что параметры Ubiquity и Oracle Cloud изменятся. Вместо этого, вот несколько основных моментов того, что вам нужно и что делать:

Под сетями создайте новую сеть с именем, я выбираю «пи».
Идентификатор VLAN: 3
Тип сети: Стандартный

Создайте сеть VPN типа «сеть-
сеть». Имя сети: pivpn.
Общий ключ: ***********************
Адрес сервера: <IP-адрес маршрутизатора> ( по умолчанию должно быть хорошо)
Удаленный шлюз/подсети: 10.0.0.0/24
Удаленный IP-адрес: <IP-адрес удаленной VPN>
Дополнительно: Ручной
профиль IPsec: Индивидуальный
Расстояние маршрута: 30
Версия обмена ключами: IKEv1
Шифрование: AES-256
Хэш: SHA1
IKE DH Group: 5
ESP DH Group: 5
Perfect Forward Secrecy: включена
Dynamic Routing: включена

Я создал три правила брандмауэра:

1. пи блок 192.168.3.1 (шлюз)


Тип: Локальное действие в локальной сети : Удалить
источник, Тип источника: Сетевой
источник, Сеть:
назначение pi, Тип источника: Сетевое
назначение, Сеть: назначение pi
, Тип сети: IP-адрес шлюза

2. По умолчанию принять пи

Тип: LAN В
действии: Принять
источник, Тип источника: Сетевой
источник, Сеть: Назначение по умолчанию
, Тип источника: Сетевое
назначение, Сеть: pi

3. блок пи по умолчанию

Тип: Выход из локальной сети
Действие: Отбросить
источник, Тип источника: Сетевое
назначение, Сеть: назначение pi
, Тип источника: Сетевой
источник, Сеть: По умолчанию
Дополнительно: Ручной
Проверить состояние совпадения Новое
Проверить состояние совпадения Недействительно

4. В OCI перейдите в раздел «Сеть» и «Site-to-Site VPN
». Создайте соединение IPSec.
Дайте ему имя.
Вам понадобится это, чтобы получить ваш общедоступный IP-адрес.

dig -4 TXT +short o-o.myaddr.l.google.com @ns1.google.com

Вам нужно будет создать два туннеля, поэтому я настроил оба так, чтобы они указывали на одну и ту же VPN, поскольку для OCI требуется два, и я открыл только один в своей сети. Вы добавите это в VPN.

5. Настройте шлюз динамической маршрутизации
6. Настройте VCN, добавьте правило входа с CIDR, который является вашей локальной подсетью, например, у меня 192.168.3.0/24.

Будущее

Пройдя этапы DevNucleus в Oracle CloudWorld, Pi Cluster направляется в Oracle Labs, где… что ж, следующая часть пока немного секретна. Потенциальное использование включает:
1. выполнение дополнительных тестов для GraalVM и Java
2. Проекты граничных вычислений
3. Роботы и параллельная обработка (например, нейронные сети)
5. Действия, предложенные нам вами, разработчиком

Поскольку День числа Пи 2023 не за горами, вы определенно захотите следить за следующим этапом эволюции этой невероятной технологии. Кто знает? Некоторые из Pi могут даже найти выход из кластера и попасть в ваши руки.

Хочу поблагодарить всех, кто приложил руку к проекту. Прочтите временную историю крупнейшего в мире кластера Raspberry Pi , чтобы узнать, как появился этот безумно удивительный проект.