Java One 2022의 Raspberry Pi 슈퍼 컴퓨터
크리스 벤슨
원하는 경우 여기 GitHub에서 이 블로그 게시물을 읽을 수 있습니다 .
Raspberry Pi Super Computer는 원래 2019년 10월 Oracle Open World용으로 제작되었습니다. 모 BBC TV 시리즈에서 대중화된 영국 경찰 박스를 연상시키는 큰 사각형 상자에 구성된 4개의 서버 랙에 1050개의 Raspberry Pi 3b+가 있습니다. 오늘로 빨리 감기, 라즈베리 파이 슈퍼 컴퓨터 (파이 클러스터) 는 전자 폐기물로 보내졌고 일부 부품이 벗겨져 올해 5월까지 2년 동안 휴면 상태였습니다. 전체 점검.
1050 Raspberry Pi가 어떻게 탄생했는지에 대한 시간적 역사는 A Temporal History of The World's Largest Raspberry Pi Cluster에서 읽을 수 있습니다 .
Oracle Switzerland의 Gerald Venzl로 시작하여 12노드 클러스터에 관심을 갖게 한 다음 Stephen Chin과 함께 대규모 클러스터에 대해 브레인스토밍했습니다. COVID 봉쇄와 캘리포니아 화재 동안 Pi 클러스터가 어떻게 전자 폐기물로 이동했는지, 그리고 Eric Sedlar가 어떻게 그것을 구출하여 결국 Oracle Labs에 보관했는지 알아보십시오. 너무 길다면 우리가 알고 있는 The World's Largest Raspberry Pi Cluster의 원본 빌드 비디오 , Gerald Venzl 의 세계 최대 Raspberry Pi 클러스터 빌드 및 My Garage의 Big Pi Cluster — Part I 비디오를 시청하십시오. .
그런데 이 글을 읽고 계시다면 '훌륭한 루미너리'가 될 가능성이 높습니다. 루미너리란? 최근에 출시된 개발자 그룹은 귀하와 같은 개발자를 독점적인 기술 콘텐츠, 무료 상품 및 커뮤니티에 연결하여 이 클러스터와 같은 멋진 것을 구축하고 오늘 Luminary가 되는 데 도움을 주는 커뮤니티입니다 .
부활
CloudWorld가 발표되었을 때 우리는 즉시 The World's Largest Raspberry Pi Super Computer (우리가 알고 있는) 를 부활시킬 것을 제안했습니다 . 누가 좋은 부활 이야기를 좋아하지 않습니까? 제안은 다음과 같이 진행되었습니다.
1. Pi-Day를 위한 비기능적 예술 작품으로 컴퓨터 역사 박물관에 기부하십시오.
2. 라즈베리 파이는 이제 가치가 있습니다. 세계에서 가장 큰 라즈베리 파이 클러스터 중 하나에서 라즈베리 파이 3B+를 무료로 받을 수 있는 파이 조각을 추첨하십시오.
3. 역사를 만들 수 있는 단 한 번의 기회가 있습니다. 우리는 그것을 CloudWorld에 맞게 수정하고 과열되지 않도록 팬을 추가하고 실험실에서 구축 중인 기술을 보여주는 "온프레미스" 및 "에지" 장치로 실행합니다. Pi 클러스터의 모든 장치에서 실행되는 GraalPython , Java 및 Oracle Linux 9 를 포함 합니다. 모두 Site-to-Site를 통해 OCI(Oracle Cloud Infrastructure) 에 연결됩니다 (이에 대한 지침은 맨 아래로 스크롤).온프레미스 및 마이크로 서비스, 컴퓨팅 인스턴스, Autonomous Database, Services Gateway 및 Load Balancer를 통한 VPN. AR 시각화가 이상적일 것이고 우리는 84-Pi 클러스터인 라즈베리 파이 미니 슈퍼 컴퓨터에서 SETI@home 을 실행했을 때와 같이 멋진 것을 실행할 수 있었습니다. Digital Twin AR/VR 서비스를 선보이고 개발자와 학생들에게 영감을 주는 블로그와 동영상을 만들면서 전 세계 누구나 클러스터에 코드를 보내 워크로드를 실행할 수 있도록 서비스를 설정하자는 아이디어를 생각해 냈습니다. 우리는 개발자와 학생이 오라클의 프리 티어 를 배우고 사용하는 데 왜 많은 재미를 느끼고 있는지 사람들에게 보여줄 수 있습니다 . 또한 기네스 북 세계 기록을 얻을 수 있습니다.
우리는 옵션 3을 선택하고 새로운 연구실을 찾기 시작했습니다. 위에서 언급한 다양한 제품 팀의 경영진과 Jeff Geerling 및 Eben Upton과 같은 Raspberry Pi 커뮤니티의 리더와 이야기를 나누고 계획을 세웠습니다. 우리가 이제 막 기초를 놓았기 때문에 전체 계획에 대해 말씀드릴 수는 없지만 앞으로 훨씬 더 많은 일이 있을 것입니다. 이것은 CloudWorld에서 Pi 클러스터를 DevNucleus로 가져오는 이야기와 이후에 일어날 일에 대한 간략한 언급입니다. 기네스 북 심사가 정말 비싸다는 것이 밝혀졌습니다!
첫 번째 단계는 실현 가능한지 확인하기 위해 예산과 작업 추정치를 확인하는 것이 었습니다. 우리는 다음이 필요하다는 것을 알고 있었습니다.
1. 팬. 많은 팬.
2. 누락된 부품을 교체합니다.
3. 모든 것을 테스트하기 위해.
4. 새 소프트웨어를 작성합니다.
모든 Pi 네트워크가 부팅됩니다. 2019년에 전체 클러스터에서 Oracle Linux 7을 실행했지만 여전히 작동했습니까? 모든 소스 코드, MAC 주소 및 다시 수행하는 데 필요한 모든 것이 있었습니까?
두 번째 단계는 파이 클러스터에서 작업할 장소를 확보하는 것이었습니다. 이중문이 있고 화물 엘리베이터에 가깝고 작업하기에 충분한 전력과 공간이 있고 단단히 잠겨 있지 않은 네트워크가 있는 장소를 찾아보십시오. 쉽지 않습니다! 저는 전 세계 Oracle 시설을 살펴보았습니다. 이와 같은 원격 작업의 물류 및 여기에 투입되어야 하는 모든 물리적 작업은 특정 요구 사항이 충족되는 경우에만 전 세계 어디에서나 작동한다는 것을 의미했습니다. 그곳으로 가서 모든 것을 준비하고 도와줄 사람이 12명이 있어야 했습니다. 우리는 원격 액세스를 위해 설정했지만 일이 제대로 작동하지 않을 때 누군가가 직접 사용할 수 있어야 했습니다. 멋진 아내와 함께 멋진 점심을 먹은 후 우리는 우리 차고가 가장 잘 작동한다고 결정했고 여기서 #BigPiClusterInMyGarage 가 시작되었습니다.
팬 추가 - Raspberry Pi 냉각
제품이 배송되면 예산이 정확한지 확인한 다음 교체 부품(주로 팬)을 주문하면서 문제를 수정하고 테스트했습니다. 많은 팬: 정확히 250명의 새로운 팬. 클러스터는 257개의 팬으로 끝났으며 각 스위치, 서버 또는 전원 공급 장치에 있는 팬은 계산하지 않습니다. 이를 위해서는 전체 클러스터를 분해하고 다시 조립해야 했습니다. 모든 볼트가 제거된 것은 아니지만 21개의 Pi 2U 뱅크가 모두 분해되었고, 5번째 Pi마다 제거 및 교체되었습니다. 즉, 팬용 브래킷이 있는 250개의 새로운 Pi 캐디를 인쇄해야 했습니다. 여기에서 이에 대해 배울 수 있습니다 . Victor Agreda 는 새로 구입한 Ultimaker S5를 사용하여 수십 개의 팬 버전 캐디를 인쇄했습니다. 팬 모두에게 힘이 필요했고 Eli Schilling 덕분에 많은 감사를 받았습니다.많은 와이어링 하니스를 만들기 위해. 또한 부활절 달걀을 추가했습니다. 세상에 알리면 별로 이스터 에그가 아니라는 것을 알지만 아래 Warble 섹션에서 자세히 설명하겠습니다(아무 말도 하지 않기에는 너무 멋스럽기 때문입니다). A Temporal History of The World's Largest Raspberry Pi Cluster 에서 찾을 수 있는 작업 중 일부를 문서화한 몇 가지 비디오가 있습니다 .
운영 체제 — 가장 스마트한 운영 체제
많은 사람들이 인프라와 하드웨어를 구축할 때 우수한 운영 체제의 가치를 과소평가하고 있으며 Oracle Linux는 최고 수준입니다. 운영 체제에 대한 자세한 내용은 A Temporal History of The World's Largest Raspberry Pi Cluster (그리고 집에서 네트워크 부팅 Pi를 설정할 수 있도록 작업 중인 다른 작업이 있습니다)에서 자세히 설명합니다.구축할 모든 작업이 있었기 때문에 Oracle Linux 7에서 Oracle Linux 9로 업그레이드해야 했습니다. 한 가지 비밀을 말씀드리자면 그렇게 간단하지 않았습니다. 그럼에도 불구하고 Oracle Linux 팀은 놀라운 협력 관계를 유지했으며 Pi Cluster용 운영 체제를 설정한 데 대해 모든 공로를 인정받을 자격이 있습니다. Oracle Linux 9를 확인하십시오. 사용하거나 업그레이드할 가치가 있습니다. 기본적으로 루트 계정에 더 이상 SSH 액세스 권한이 없음을 의미하는 추가 보안 계층과 같은 몇 가지 딸꾹질이 있었습니다.
여기서 Pi를 부팅하는 방법을 언급할 가치가 있습니다. 클러스터의 모든 Pi는 서버의 단일 읽기 전용 NFS 마운트에서 네트워크 부팅되며 서버 또는 Pi가 부팅될 때마다 bash 스크립트를 실행하는 systemd 서비스를 추가했습니다. 따라서 우리가 실행하는 것을 거의 쉽게 구성할 수 있습니다.
소프트웨어 및 클라우드 서비스 — GraalVM은 클라이언트 또는 클라우드에서 빠르게 실행됩니다.
모든 소프트웨어는 오픈 소스이며 여기 DevRel GitHub 리포지토리에서 찾을 수 있습니다. 실험실에서 제공되는 몇 가지 항목이 있으며 기술 미리 보기로도 사용할 수 없으므로 (시도했지만 준비되지 않았음) 포함되지 않았습니다. 대부분의 코드는 빠르게 작성되었습니다. 당신이 찾은 것이 완전히 이해되지 않을 수도 있으므로 설명하겠습니다.
첫째, 클러스터에 소프트웨어가 있습니다. 서버는 GraalVM 위에 GraalPython으로 구성된 Docker 컨테이너를 실행 합니다 . 해당 Dockerfile 은 지속적으로 개선되고 있으므로 아직 복사하지 않는 것이 좋습니다. 몇 가지 버그 보고서를 제공했지만 Graal 환경 변수와 CTRL+C가 작동하는 즉시 (그리고 GraalPython의 새 이미지가 생성될 수 있음) 바로 시작하고 싶을 것입니다. 그것을하고. GraalVM에서 순수 Python 코드를 실행할 때 약 8배의 성능 향상을 보았습니다 . 꽤 인상적입니다!
클러스터의 모든 장치는 웹 서비스를 실행합니다. 서버는 모든 장치가 수신할 수 있도록 IP 주소와 포트가 포함된 UDP 메시지를 브로드캐스트하고 자동 검색을 위해 서버와 통신합니다. 이것은 서버의 IP 주소가 환경 변수에 입력된 이전 연도의 새로운 기능입니다. IP 주소는 변경되지 않으므로 하드 코딩할 수 있었지만 두 가지 문제가 있었습니다. 이 작업을 수행하는 사람은 데스크톱에서 테스트 시스템을 실행하고 책상에 Pi 또는 몇 개의 Pi 시뮬레이션을 실행해야 합니다. sudo를 수행하면 환경 변수가 손실됩니다. 이것은 실제로 많은 문제를 해결합니다! Pi가 부팅되면 웹 서버를 실행하고 UDP 메시지를 수신하며 IP 주소와 MAC 주소를 서버에 등록하고 작업을 수신합니다. 간격으로,
5초마다 각 Pi는 기본 ORDS 지원을 통해 모든 데이터 (CPU, 메모리, 온도 등) 를 자율 데이터베이스의 REST 끝점으로 보냅니다. 문서는 여기 에서 찾을 수 있습니다 . Pi가 데이터 전송에 실패하면 다음에 조금 더 오래 기다리며 최대 60초까지 확장되는 코드를 넣었습니다. Autonomous Database가 쉽게 처리할 수 있는 데이터 산더미로 밝혀졌습니다. 이름이 지정되지 않은 몇 가지 다른 데이터베이스를 시도했지만 처리할 수 없다고 가정해 보겠습니다. 때로는 5초 이상의 지연이 발생했습니다.
AR/VR을 사용한 디지털 트윈 — 데이터 시각화
여기 에서 찾을 수 있고 좋아하는 3D 프로그램에서 열 수 있는 상당히 상세한 Pi Cluster의 3D 모델을 만들었습니다 . 우리의 AR/VR 및 클라우드 전문가 인 Wojciech Pluta , Victor Martin , Bogdan Farca 및 Stuart Coggins 는 몇 가지 놀라운 AR 및 VR 경험을 구축하기 위해 노력했습니다. 그들은 데이터베이스를 조정하고, APEX 앱을 작성하고, 스트리밍을 위해 socket.io를 실행했습니다. 그들은 OCI OKE 라는 Kubernetes 클러스터를 활용했습니다.그래서 3D 경험이 넘어지지 않고 확장될 수 있습니다. 즉, 누구나 거실에 파이 클러스터의 디지털 트윈을 둘 수 있습니다. 우리는 AR용 iPad와 인쇄된 QR 코드를 가지고 있어 iPad가 밀리미터 단위의 정확도로 클러스터를 추적할 수 있어 참석자들이 클러스터의 진행 상황을 대화식으로 볼 수 있습니다. 팀은 또한 Meta VR 버전을 구축했으며, 자세한 내용은 곧 공개될 예정입니다. 내 차고에서 전체 클러스터를 실행할 수 있는 충분한 전력이 없었기 때문에 CloudWorld에서 문이 열리기 전에 이것을 통합하고 테스트할 것입니다. 작동할 수도 있고 넘어질 수도 있습니다. 무슨 일이 있어도 좋은 이야기가 될 것입니다! AR/VR Digital Twin에 대한 내용이 있으면 여기에 링크를 추가하겠습니다.
OCI Services — 모든 프로젝트의 중심에는 클라우드 인프라가 있습니다.
내 차고에는 Pi Cluster가 "온프레미스" 서버로 설정되어 있습니다. Ubiquity Dream Machine Pro에 격리된 서브넷을 만들고, Bastion 을 사용하여 OCI에 대한 사이트 간 VPN을 구성하고 , 두 개의 네트워크 인터페이스 (하나는 Pi 클러스터 서브넷용, 다른 하나는 Pi 클러스터용) 가 있는 로컬 점프 박스를 사용했습니다. ) . 따라서 Pi 클러스터는 외부 세계에 하나의 IP 주소로 나타납니다. 나타나서 네트워크 전원을 연결하면 됩니다. 설정이 그렇게 쉬웠으면 좋겠고 모든 것을 테스트할 필요가 없었으면 합니다. 케이블이 제 위치에서 튀어나오지 않았는지 확인하십시오. 하지만 소리가 더 재미있기 때문에 간단합니다.
우리는 CloudWorld에서 네트워크를 제어할 수 없으므로 Pi 클러스터는 "에지 장치"입니다. Services Gateway , Load Balancer 및 Domain Management 와 같은 클라우드 서비스를 사용합니다 . 예, 도메인이 있습니다. 다음 섹션에서 이에 대해 설명하겠습니다.
네트워크는 다음과 같습니다.
이에 대해 질문이 있는 경우 개발자를 위한 Oracle의 공개 Slack 채널 로 이동 하십시오. 원하는 질문을 하세요. 설정 방법, 사용할 서비스. 거기에서 답을 찾을 수 있습니다!
IoT — 작고 저렴한 마이크로컨트롤러를 사용한 특정 경량 작업
또한 클러스터에서 실행되는 한 쌍의 Arduino가 있습니다. 첫 번째 Arduino는 이더넷 HAT가 있는 Arduino Mega입니다. 원래 코드는 여기 에서 찾을 수 있습니다 . 웹 서비스를 실행하고 서버의 물리적 재설정 및 전원 버튼에 대한 원격 액세스를 위해 두 개의 솔레노이드를 켭니다. 저장소에 비해 소프트웨어를 약간 변경하고 아직 게시하지 않았으므로 이 이전 버전을 그대로 두었습니다. 내가 게시하지 않은 버전은 개발자가 Bastion에 SSH를 통해 연결할 때 자체적으로 등록하고 간단한 시작 명령을 기다립니다.
두 번째 Arduino는 동일한 하드웨어이지만 JSON 페이로드를 수신하는 REST 서버를 실행하고 파출소 상단의 조명에 있는 12개의 NeoPixel 에 연결됩니다.
Warble — Pi 클러스터용으로 설계된 맞춤형 프로그래밍 언어
도메인을 호스팅하고 있습니다.https://warble.withoracle.cloud도메인 관리 , 로드 밸런서 및 컴퓨트 인스턴스 가 지원하는 OCI에서 . 컴퓨트 인스턴스는 Pi 클러스터에서 실행되는 것과 동일한 소프트웨어인 GraalPython 및 웹 서비스가 포함된 Docker 컨테이너를 실행하고 있습니다. 황금 시간대에는 아직 준비가 되지 않았지만 10월 18일~20일에 여기 또는 Twitter에서 다시 확인하세요. CloudWorld 동안 생중계될 예정이기 때문입니다. 정말 재미있을 것 같습니다.
우리는 Twitter가 Warble 이라는 Pi 클러스터에서 실행되도록 설계된 프로그래밍 언어를 만들었습니다 . Warble은 모든 기능을 갖춘 프로그래밍 언어가 아니며 많은 지름길을 택했습니다. Warble을 Twitter에 게시하고 Pi 클러스터에서 실행할 수 있도록 가능한 한 적은 문자를 사용하도록 만들어졌습니다. 컴퓨터 인스턴스에서 Twitter API를 사용하여 #pi 해시태그를 검색하는 Python 스크립트를 실행하고 있습니다. 다음 문자가 여는 중괄호이고 마지막 문자가 닫는 중괄호이면 Warble이 있고 데이터베이스에 저장됩니다. 예를 들어:
> #pi{PRINT(“hello cluster”)}
< hello cluster
세계에서 가장 큰 라즈베리 파이 클러스터 중 하나에서 파이를 가장 많은 자릿수까지 계산할 수 있는 사람을 보는 것이 멋지지 않습니까?
> #pi{PRINT(2*ROUND(ACOS(0.0),3))}
< 3.142
트위터는 아주 재미있을 것입니다. 비록 그것이 API를 조절하고 이것이 우리가 호스팅 도메인을 가지고 있는 이유입니다. Warbles를 게시하기 위한 REST 끝점을 제공하겠습니다. 아마도 누군가 Warble 또는 다른 방법을 사용하여 Bailey–Borwein–Plouffe_formula로 Pi를 계산하는 방법을 알아낼 것 입니다.
구문 문법을 작성하지는 않겠지만 몇 가지 예를 들어 보겠습니다.
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에서 Tim Clegg 의 도움으로 새 서브넷을 만들었습니다. 다음은 우리가 수행한 단계의 개요입니다. Ubiquity 및 Oracle Cloud의 옵션이 변경될 예정이므로 특정 화면 캡처나 비디오를 제공하지 않을 것입니다. 대신 필요한 사항과 수행할 작업에 대한 몇 가지 주요 사항은 다음과 같습니다.
네트워크에서 이름으로 새 네트워크를 생성하고 "pi"를 선택합니다.
VLAN ID: 3
네트워크 유형: 표준
사이트 간 VPN 생성
네트워크 이름: pivpn
사전 공유 키: ***********************
서버 주소: <라우터의 IP 주소> ( 기본값은 양호해야 함)
원격 게이트웨이/서브넷: 10.0.0.0/24
원격 IP 주소: <원격 VPN의 IP 주소>
고급: 수동
IPsec 프로필: 사용자 지정
경로 거리: 30
키 교환 버전: IKEv1
암호화: AES-256
해시: SHA1
IKE DH 그룹: 5
ESP DH 그룹: 5
PFS(Perfect Forward Secrecy): 활성화됨
동적 라우팅: 활성화 됨
세 가지 방화벽 규칙을 만들었습니다.
1. 파이 블록 192.168.3.1(게이트웨이)
유형: LAN 로컬
작업: 드롭
소스, 소스 유형: 네트워크
소스, 네트워크: pi
대상, 소스 유형: 네트워크
대상, 네트워크: pi
대상, 네트워크 유형: 게이트웨이 IP 주소
2. 기본적으로 pi에 동의
유형: LAN
실행 중: 소스 수락
, 소스 유형: 네트워크
소스, 네트워크: 기본
대상, 소스 유형: 네트워크
대상, 네트워크: pi
3. pi 블록을 기본값으로
유형: LAN Out
작업: 드롭
소스, 소스 유형: 네트워크
대상, 네트워크: pi
대상, 소스 유형: 네트워크
소스, 네트워크: 기본
고급: 수동
일치 상태 확인 새
일치 상태 확인 유효하지 않음
4. OCI에서 Networking and Site-to-Site VPN
Create IPSec Connection으로 이동합니다.
이름을 지정하십시오.
이것이 공용 IP 주소를 얻기를 원할 것입니다.
dig -4 TXT +short o-o.myaddr.l.google.com @ns1.google.com
2개의 터널을 만들어야 하므로 OCI에는 2개가 필요하고 내 네트워크에는 하나만 노출되었으므로 둘 다 동일한 VPN을 가리키도록 설정했습니다. 이것을 VPN에 추가합니다.
5. 동적 라우팅 게이트웨이를
설정합니다. 6. VCN을 설정하고 로컬 서브넷인 CIDR을 사용하여 수신 규칙을 추가합니다. 예를 들어 광산은 192.168.3.0/24입니다.
미래
Oracle CloudWorld에서 DevNucleus를 위한 작업을 거친 후 Pi Cluster는 Oracle Labs로 향하고 있습니다. 다음 부분은 지금은 약간 비밀입니다. 잠재적인 용도는 다음과 같습니다.
1. GraalVM 및 Java에 대한 추가 테스트 실행
2. 에지 컴퓨팅 프로젝트
3. 로봇 및 병렬 처리(예: 신경망)
5. 개발자가 제안한 활동
Pi Day 2023이 얼마 남지 않은 지금, 여러분은 이 놀라운 기술의 다음 진화 단계를 계속 지켜보고 싶을 것입니다. 누가 알아? Pi 중 일부는 클러스터에서 나와 당신의 손에 들어가는 길을 찾을 수도 있습니다.
프로젝트에 참여해 주신 모든 분들께 감사드립니다. 이 놀라운 프로젝트가 어떻게 탄생했는지 는 A Temporal History of The World's Largest Raspberry Pi Cluster 를 읽어 보세요.

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































