La supercomputadora Raspberry Pi en Java One 2022

Dec 20 2022
por Chris Bensen Si lo prefiere, puede leer esta publicación de blog en GitHub aquí. La supercomputadora Raspberry Pi se construyó originalmente para Oracle Open World en octubre de 2019.

por Chris Bensen

Si lo prefiere, puede leer esta publicación de blog en GitHub aquí .

La supercomputadora Raspberry Pi se construyó originalmente para Oracle Open World en octubre de 2019. Hay 1050 Raspberry Pi 3b+ en cuatro racks de servidores configurados en una gran caja cuadrada que recuerda a una cabina de policía británica popularizada en cierta serie de televisión de la BBC. Un avance rápido hasta el día de hoy, y la supercomputadora Raspberry Pi (Pi Cluster) se envió a la basura electrónica, se le quitaron algunas partes y permaneció inactiva durante dos años hasta mayo de este año, cuando llegó a mi garaje para una revisión completa.

Superordenador Raspberry Pi en Open World 2019

Para conocer la historia temporal de cómo surgió 1050 Raspberry Pi, puede leer Una historia temporal del clúster de Raspberry Pi más grande del mundo .

Comienza con Gerald Venzl en Oracle Suiza trayendo mi atención sobre el clúster de 12 nodos, luego hicimos una lluvia de ideas sobre un gran clúster con Stephen Chin. Conozca cómo el Pi Cluster se convirtió en basura electrónica durante los bloqueos de COVID y los incendios de California y cómo Eric Sedlar lo rescató y finalmente lo almacenó en Oracle Labs. Si lo encuentra demasiado largo, mire el video de compilación original del Clúster Raspberry Pi más grande del mundo que conocemos , esta Construcción del clúster Raspberry Pi más grande del mundo por Gerald Venzl, y este video del Clúster Big Pi en mi garaje — Parte I .

Y, por cierto, si estás leyendo esto, es muy probable que seas una gran Luminaria. ¿Qué es una Luminaria? Es nuestro grupo de desarrolladores lanzado recientemente que conecta a desarrolladores como usted con contenido técnico exclusivo, artículos gratuitos y una comunidad para ayudarlo a crear algo tan genial como este grupo, conviértase en un Luminary hoy .

Resurrección

Cuando se anunció CloudWorld, inmediatamente propusimos resucitar la supercomputadora Raspberry Pi más grande del mundo (que sepamos) . ¿A quién no le gusta una buena historia de resurrección? Las propuestas eran algo así:

1. Dónelo al Computer History Museum como una obra de arte no funcional para Pi-Day.
2. Las Raspberry Pi son valiosas ahora. Sortea una pieza del Pi para ganar un Raspberry Pi 3B+ gratis de uno de los clústeres de Raspberry Pi más grandes del mundo.
3. Tenemos una oportunidad de hacer historia. Lo arreglamos para CloudWorld, agregamos ventiladores para que no se sobrecaliente y lo ejecutamos como un dispositivo "local" y "perimetral" que muestra la tecnología que se está construyendo en los laboratorios. Incluiremos GraalPython , Java y Oracle Linux 9 ejecutándose en todos los dispositivos del Pi Cluster. Todo está conectado a Oracle Cloud Infrastructure (OCI) a través de Site-to-Site (desplácese hacia abajo para obtener instrucciones sobre esto)VPN para locales y a través de microservicios, instancias informáticas, base de datos autónoma, puerta de enlace de servicios y equilibrador de carga. Las visualizaciones AR serían ideales, y podríamos ejecutar algo interesante en ellas, como cuando ejecutamos SETI@home en la Supercomputadora Raspberry Pi Mini, un clúster 84-Pi. Se me ocurrió la idea de configurar un servicio para que cualquier persona en el mundo pudiera enviar código al clúster para ejecutar una carga de trabajo, mientras mostramos nuestros servicios Digital Twin AR/VR y creamos blogs y videos para inspirar a los desarrolladores y estudiantes. Podemos mostrarle a la gente por qué los desarrolladores y los estudiantes se divierten mucho aprendiendo y usando la capa gratuita de Oracle . Además, podemos conseguir un récord mundial en el Libro Guinness.

Elegimos la opción tres y comenzó la búsqueda de un nuevo laboratorio. Hablé con los líderes de varios equipos de productos mencionados anteriormente, así como con líderes de la comunidad de Raspberry Pi como Jeff Geerling y Eben Upton, y tracé un plan. No puedo contarles sobre el plan completo porque acabamos de sentar las bases, pero hay mucho más por venir. Esta es solo la historia de llevar Pi Cluster a DevNucleus en CloudWorld y una breve mención de lo que sucede después. ¡Resulta que una adjudicación del Libro Guinness es realmente costosa!

El primer paso fue identificar un presupuesto y una estimación de la obra para ver si era factible. Sabíamos que necesitábamos:

1. Aficionados. muchos fans
2. Para reemplazar cualquier pieza que falte.
3. Para probar todo.
4. Para escribir nuevo software.

Todas las redes Pi arrancan. En 2019, tenía Oracle Linux 7 ejecutándose en todo el clúster, pero ¿aún funcionaba? ¿Teníamos todo el código fuente, las direcciones MAC y todo lo necesario para hacerlo de nuevo?

El segundo paso fue conseguir un lugar para trabajar en Pi Cluster. Trate de encontrar un lugar con puertas dobles, cerca de un montacargas, con suficiente energía y espacio para trabajar en él, y una red que no esté bloqueada, ¡no es fácil! Observé las instalaciones de Oracle en todo el mundo. La logística de trabajar en algo como esto de forma remota y todo el trabajo físico que tendría que realizarse significaba que en cualquier parte del mundo solo funcionaría si se cumplieran ciertos requisitos. Tendría que viajar allí, prepararlo todo y tener una docena de personas para ayudar. Lo configuraríamos para acceso remoto, pero alguien tendría que estar disponible en persona cuando las cosas no funcionaran bien. Después de un buen almuerzo con mi increíble esposa, decidimos que nuestro garaje funcionaba mejor, y ahí es donde comenzó #BigPiClusterInMyGarage .

Agregar ventiladores: enfriar la Raspberry Pi

Una vez que se entregó, me puse a trabajar asegurándome de que nuestro presupuesto fuera exacto, luego rectificando y probando cosas mientras pedía piezas de repuesto (principalmente ventiladores). Muchos fans: 250 fans nuevos para ser exactos. El clúster terminó con 257 ventiladores y eso sin contar los ventiladores que están en cada uno de los conmutadores, el servidor o las fuentes de alimentación. Esto requirió que desmontara todo el grupo y lo volviera a montar. No se quitaron todos los pernos, pero se desarmaron todos los bancos de 21 Pi 2U, se quitó y reemplazó cada 5 Pi, lo que significó que se tuvieron que imprimir 250 nuevos caddies Pi con soportes para ventiladores. Puedes aprender sobre eso aquí . Victor Agreda usó su Ultimaker S5 recién comprada para imprimir unas pocas docenas de la versión para fanáticos de los caddies. Todos los fanáticos necesitaban energía, y muchas gracias a Eli Schilling .para crear muchos de los arneses de cableado. Además, agregamos algunos huevos de Pascua. Sé que no es un gran huevo de pascua si se lo cuento al mundo, pero lo explicaré con más detalle en la sección Trino a continuación (porque es demasiado genial para no decir nada). Tengo algunos videos que documentan parte del trabajo que se puede encontrar en A Temporal History of The World's Largest Raspberry Pi Cluster .

Sistema operativo: el sistema operativo más inteligente que existe

Creo que muchos de nosotros subestimamos el valor de un buen sistema operativo cuando construimos infraestructura y hardware, y Oracle Linux es de primera categoría. Entro en más detalles sobre el sistema operativo en A Temporal History of The World's Largest Raspberry Pi Cluster (y tengo algunas otras cosas en las que estoy trabajando para que pueda configurar el arranque de red Pi en casa).Debido a que teníamos todo ese trabajo para desarrollar, tuvimos que actualizar de Oracle Linux 7 a Oracle Linux 9. Les diré un secreto: no fue tan simple. Sin embargo, ha sido increíble trabajar con el equipo de Oracle Linux y realmente merece todo el crédito por configurar el sistema operativo para Pi Cluster. Vaya a ver Oracle Linux 9, vale la pena usarlo o actualizarlo. Hubo algunos contratiempos, como la capa adicional de seguridad que significaba que la cuenta raíz ya no tenía acceso SSH de forma predeterminada.

Vale la pena mencionar aquí cómo arrancamos el Pi. Cada Pi en el clúster se inicia en red desde un único montaje NFS de solo lectura en el servidor, y agregamos un servicio systemd para ejecutar un script bash cada vez que se inicia el servidor o Pi. Esto hace que configurar lo que ejecutamos sea casi sin esfuerzo.

Software y servicios en la nube: GraalVM se ejecuta rápidamente en el cliente o en la nube

Todo el software es de código abierto y se puede encontrar aquí en nuestro repositorio DevRel GitHub. Hay algunas cosas que provienen de los laboratorios y no están disponibles ni siquiera como una vista previa técnica (lo intenté, simplemente no estaban listas) , por lo que no están incluidas. Tenga cuidado, la mayor parte de ese código se escribió rápidamente. Es posible que lo que encuentres no tenga mucho sentido, así que déjame explicarte.

Primero, está el software en el clúster. El servidor ejecuta un contenedor Docker compuesto por GraalPython sobre GraalVM . Ese Dockerfile está en constante mejora, por lo que no recomiendo copiarlo todavía. He proporcionado algunos informes de errores, pero tan pronto como funcionen las variables de entorno de Graal y CTRL+C (y tal vez se cree una nueva imagen para GraalPython) , querrá sumergirse. Mientras tanto, sepa que esta es una forma de haciéndolo. He visto un aumento de 8 veces en el rendimiento al ejecutar código Python puro en GraalVM . ¡Eso es bastante impresionante!

Cada dispositivo en el clúster ejecuta un servicio web. El servidor transmite un mensaje UDP con su dirección IP y puerto para que cualquier dispositivo lo escuche y se comunique con el servidor para la detección automática. Esto es nuevo respecto a años anteriores en los que la dirección IP del servidor se colocaba en una variable de entorno. La dirección IP no cambia, por lo que pudimos codificarla, pero había dos problemas: cualquier persona que trabaje en esto necesita ejecutar un sistema de prueba con su escritorio y una simulación de un Pi o un par de Pis en su escritorio, y el las variables de entorno se pierden una vez que sudo. ¡Esto realmente resuelve muchos problemas! Una vez que un Pi arranca, ejecuta su servidor web, escucha el mensaje UDP, registra su dirección IP y dirección MAC con el servidor y escucha el trabajo. A intervalos,

Cada cinco segundos, cada Pi envía todos sus datos (CPU, memoria, temperatura, etc.) a un punto final REST en una base de datos autónoma a través del soporte ORDS nativo. La documentación se puede encontrar aquí . Puse un código donde si el Pi no puede enviar sus datos, espera un poco más la próxima vez, escalando hasta 60 segundos. Resulta ser una montaña de datos que Autonomous Database maneja sin esfuerzo. Probé algunas otras bases de datos que no se nombrarán y digamos que no pudieron manejarlo, lo que a veces resultó en demoras de más de cinco segundos.

Gemelo digital con AR/VR: visualiza tus datos

Representación de la supercomputadora Raspberry Pi

Creé un modelo 3D bastante detallado del Pi Cluster que se puede encontrar aquí y abrir en su programa 3D favorito. Nuestros expertos en AR/VR y en la nube, Wojciech Pluta , Victor Martin , Bogdan Farca y Stuart Coggins , se pusieron a trabajar para crear increíbles experiencias de AR y VR. Ajustaron bases de datos, escribieron aplicaciones APEX y ejecutaron socket.io para transmisión. Aprovecharon un clúster de Kubernettes llamado OCI OKEpor lo que las experiencias 3D pueden escalar sin caerse, lo que significa que cualquiera puede poner un Digital Twin del Pi Cluster en su sala de estar. Tenemos iPads para AR y códigos QR impresos para que el iPad pueda rastrear el grupo con precisión milimétrica, lo que permite a los asistentes ver los acontecimientos del grupo de forma interactiva. El equipo también construyó una versión Meta VR, cuyos detalles se revelarán pronto. No había suficiente energía para hacer funcionar todo el clúster en mi garaje, así que lo integraremos y lo probaremos antes de que se abran las puertas en CloudWorld. Puede funcionar, puede caerse. ¡Pase lo que pase, será una buena historia! Agregaré un enlace aquí cuando tengamos algo escrito sobre AR/VR Digital Twin.

Servicios OCI: en el centro de cada proyecto se encuentra la infraestructura en la nube

En mi garaje, Pi Cluster está configurado como un servidor "local". Creé una subred aislada en mi Ubiquity Dream Machine Pro, configuré una VPN de sitio a sitio para OCI usando Bastion y usé un jump box local que tiene dos interfaces de red (una para la subred Pi Cluster y otra para Pi Cluster ) . Por lo tanto, Pi Cluster aparece en el mundo exterior como una dirección IP. Preséntese, conecte la alimentación de la red y estará listo. Desearía que la configuración fuera tan fácil y no tuviera que probar todo, asegurándome de que los cables no rebotaran fuera de posición, pero digamos que es así de fácil porque suena más divertido.

No tendremos el control de la red en CloudWorld, por lo que Pi Cluster es un "dispositivo de borde". Utiliza servicios en la nube como Services Gateway , Load Balancer y Domain Management . Sí, tenemos un dominio. Llegaré a eso en la siguiente sección.

La red se ve así:

Diagrama de red de demostración de Pi Cluster

Si tiene alguna pregunta sobre esto, diríjase al canal público de Slack de Oracle para desarrolladores. Haz cualquier pregunta que quieras. Cómo configurarlo, qué servicios utilizar. ¡Encontrarás tus respuestas allí!

IoT: tareas livianas específicas con microcontroladores pequeños y económicos

También tenemos un par de Arduinos ejecutándose en el clúster. El primer Arduino es un Arduino Mega con un HAT Ethernet. El código original se puede encontrar aquí . Ejecuta un servicio web y enciende dos solenoides para acceder de forma remota a los botones físicos de reinicio y encendido del servidor. Cambié un poco el software en comparación con el repositorio y aún no lo publiqué, así que dejé esta versión anterior. La versión que no he publicado se registra sola y espera un simple comando de inicio cuando un desarrollador accede a Bastion mediante SSH.

El segundo Arduino es el mismo hardware pero ejecuta un servidor REST que escucha una carga JSON y está conectado a una docena de NeoPixels en la luz en la parte superior de la cabina de policía.

Warble: un lenguaje de programación personalizado diseñado para Pi Cluster

Estamos alojando el dominiohttps://warble.withoracle.clouden OCI, respaldado por Domain Management , Load Balancer y Compute Instance . La instancia informática ejecuta el mismo software que se ejecuta en Pi Cluster: un contenedor Docker con GraalPython y un servicio web. Esto no está del todo listo para el horario de máxima audiencia, pero vuelva aquí o en Twitter del 18 al 20 de octubre porque estará en vivo durante CloudWorld, y creo que será muy divertido.

Logotipo de trino

Hemos creado un lenguaje de programación diseñado para que Twitter se ejecute en Pi Cluster llamado Warble . Warble no es un lenguaje de programación con todas las funciones y tomé muchos atajos. Está hecho para usar la menor cantidad de caracteres posible para que pueda publicar un Trino en Twitter y ejecutarlo en Pi Cluster. Tengo un script de Python ejecutándose en una instancia de computadora usando la API de Twitter para buscar el hashtag #pi . Si el siguiente carácter es una llave abierta y el último carácter es una llave cerrada, entonces tenemos un trino y se almacena en una base de datos. Por ejemplo:

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

¿No sería genial ver quién puede calcular Pi con la mayor cantidad de dígitos en uno de los clústeres de Raspberry Pi más grandes del mundo?

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

Twitter será muy divertido, aunque acelera la API y es por eso que tenemos el dominio alojado. Proporcionaré un punto final REST para publicar Warbles. Tal vez alguien descubra cómo calcular Pi con Bailey-Borwein-Plouffe_formula usando Warble o alguna otra forma.

No voy a escribir una gramática de sintaxis pero daré algunos ejemplos.

Warble admite variables:

> #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

Además, puede guardar valores y cargarlos nuevamente. Son específicos del usuario:

> #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)}}
<

En Ubiquity Dream Machine Pro, con la ayuda de Tim Clegg , creé una nueva subred. Aquí hay un resumen de los pasos que seguimos. No proporcionaré capturas de pantalla específicas ni un video porque las opciones en Ubiquity y Oracle Cloud cambiarán. En cambio, aquí hay algunos aspectos destacados de lo que necesita y qué hacer:

En redes cree una nueva red con un nombre, elijo "pi".
ID de VLAN: 3
Tipo de red: Estándar

Cree una VPN de sitio a sitio
Nombre de red: pivpn
Clave precompartida: ***********************
Dirección del servidor: <Dirección IP del enrutador> ( el valor predeterminado debería estar bien) Puerta de
enlace remota/Subredes: 10.0.0.0/24
Dirección IP remota: <Dirección IP de VPN remota>
Avanzado: Manual
Perfil IPsec:
Distancia de ruta personalizada: 30
Versión de intercambio de claves: IKEv1
Cifrado: AES-256
Hash: SHA1
IKE DH Group: 5
ESP DH Group: 5
Perfect Forward Secrecy: habilitado
Enrutamiento dinámico: habilitado

Creé tres reglas de firewall:

1. bloque pi 192.168.3.1 (puerta de enlace)


Tipo: Acción local de LAN :
Fuente de destino, Tipo de fuente:
Fuente de red, Red: Destino pi
, Tipo de fuente:
Destino de red, Red: Destino pi
, Tipo de red: Dirección IP de puerta de enlace

2. Aceptar por defecto a pi

Tipo: LAN En
acción: Aceptar
fuente, Tipo de fuente: Fuente de red, Red: Destino
predeterminado , Tipo de fuente: Destino de red, Red: pi

3. bloque pi a predeterminado

Tipo: LAN Out
Acción:
Fuente de caída, Tipo de fuente:
Destino de red, Red: Destino pi
, Tipo de fuente:
Fuente de red, Red: Predeterminado
Avanzado: Manual
Verificar estado de coincidencia Nuevo
Verificar estado de coincidencia Inválido

4. En OCI, vaya a Redes y Site-to-Site VPN
Create IPSec Connection.
Dale un nombre.
Querrás esto para obtener tu dirección IP pública.

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

Deberá crear dos túneles, por lo que configuré ambos para que apunten a la misma VPN, ya que OCI requiere dos y solo expuse uno en mi red. Agregará esto a la VPN.

5. Configure una puerta de enlace de enrutamiento dinámico
6. Configure una VCN, agregue una regla de ingreso con el CIDR que es su subred local, por ejemplo, la mía es 192.168.3.0/24.

El futuro

Después de seguir los pasos de DevNucleus en Oracle CloudWorld, Pi Cluster se dirige a Oracle Labs donde... bueno, la siguiente parte es un secreto por ahora. Los usos potenciales incluyen:
1. ejecutar pruebas adicionales para GraalVM y Java
2. Proyectos informáticos perimetrales
3. Robots y procesamiento paralelo (es decir, redes neuronales)
5. Actividades sugeridas por usted, el desarrollador

Con Pi Day 2023 a la vuelta de la esquina, definitivamente querrá estar atento a la próxima etapa de evolución de esta increíble pieza de tecnología. ¿Quién sabe? Algunos de los Pi pueden incluso salir del grupo y llegar a sus manos.

Quiero agradecer a todos los que han tenido una mano en el proyecto. Lea A Temporal History of The World's Largest Raspberry Pi Cluster para saber cómo surgió este increíble y loco proyecto.