Amazon Web Services 한국 블로그

Amazon EC2 F1 인스턴스와 FireSim을 이용한 클라우드 기반 하드웨어 디자인 사례

AWS는 고급 분석, 심층 학습 및 AI 영역에서 글로벌 성장을 활성화하는 한 가지 방법으로 FPGA를 AWS 클라우드 컴퓨팅 제공에 추가했습니다. EC2  F1  인스턴스 타입은 하드웨어 가속을 사용하여 전용 PCIe x16 연결을 통해 각각 64GiB DDR4 ECC 보호 메모리를 포함한 최대 8개 FPGA의 상호 연결을 활성화합니다. 따라서, 이 서버는 모든 규모에서 상당히 빠른 속도로 고급 분석 애플리케이션을 처리할 수 있는 용량을 갖춘 강력한 엔진이 됩니다. 예를 들어, AWS 상업용 파트너인 Edico Genome은 F1 인스턴스로 구성되는 DRAGEN 플랫폼을 사용하여 전체 게놈 시퀀싱 데이터 세트를 분석할 때 약 30배의 속도 향상을 달성할 수 있습니다.

FPGA F1 컴퓨팅의 온디맨드 가용성이 확실한 액세스 가능성과 비용 이점을 제공하지만, 많은 메인스트림 사용자는 여전히 FPGA 가속 시뮬레이션을 개발하거나 실행할 때 “진입 임계값”이 너무 높다고 생각하고 있습니다. UC Berkeley RISE Lab의 연구자들은 Amazon FPGA F1 인스턴스로 구동되는 “FireSim“을 개발했습니다. 오픈 소스 리소스인 FireSim은 이러한 진입 장벽을 낮추고 모든 사람이 FPGA 가속 컴퓨팅 환경의 성능을 쉽게 활용할 수 있도록 지원합니다. 소규모 스타트업 기업의 개발 팀에 속하든 또는 대형 데이터센터 규모에서 작업하든 상관없이 하드웨어-소프트웨어 공동 설계를 사용하면 더 빠른 개발 시간, 더 낮은 비용, 더 예측 가능한 성능을 달성할 수 있습니다. UC-Berkeley의 Sagar Karandikar와 동료들의 FireSim을 이 게시물에서 소개하게 되어 기쁘게 생각합니다.

Amazon EC2 F1에 8노드 FireSim 클러스터 시뮬레이션 매핑

기존 하드웨어 조정이 한계에 도달함에 따라 향후 데이터 센터는 다양한 이질성을 지향하고 사용자 지정 하드웨어 액셀러레이터와 점점 더 높은 성능의 상호 연결을 채택하고 있습니다. 기존 방식으로는 규모에 맞게 새로운 하드웨어의 프로토타입을 작성하려면 비용이 매우 많이 들거나 속도가 매우 느렸습니다. 이 게시물에서는 UC Berkeley의 컴퓨터 아키텍처 연구 그룹에서 개발 중인 새로운 하드웨어 시뮬레이션 플랫폼 FireSim을 소개합니다. 이 플랫폼은 Amazon EC2 F1 인스턴스를 사용하여 빠르고 확장 가능한 하드웨어 시뮬레이션을 활성화합니다.

FireSim은 새로운 랙 규모 시스템에서 작업하는 하드웨어 및 소프트웨어 개발자에게 모두 이점을 제공합니다. 소프트웨어 개발자는 실제 머신을 사용할 때와 똑같이 새로운 하드웨어 기능과 함께 시뮬레이션된 노드를 사용할 수 있는 반면, 하드웨어 개발자는 시뮬레이션되는 하드웨어를 완전히 제어할 수 있으며 하드웨어가 여전히 개발 중인 동안 실제 소프트웨어 스택을 실행할 수 있습니다. 이 게시물과 함께 FireSim의 첫 번째 공개 데모를 릴리스하고 있습니다. 이 데모를 사용하여 고유의 8노드 시뮬레이션된 클러스터를 F1 인스턴스에 배포하고 해당 클러스터에 대해 벤치마크를 실행할 수 있습니다. 이 데모에서는 사전 빌드된 “vanilla” 클러스터를 시뮬레이션하지만, FireSim의 높은 성능과 가용성을 보여 줍니다.

FireSim + F1을 선택하는 이유

FPGA 가속 하드웨어 시뮬레이션은 새로운 개념이 아닙니다. 하지만 이전에는 FPGA를 시뮬레이션에 사용할 경우 가용성, 확장성 및 비용 문제가 발생했습니다. FireSim은 EC2 F1과 오픈 소스 하드웨어를 이용하여 FPGA 가속 시뮬레이션의 기존 문제를 해결합니다.
문제 #1: 기존 방식의 FPGA 기반 시뮬레이션은 비용이 많이 들고 배포하기 어려우며 재현하기 어려웠습니다.
FireSim은 F1과 같은 퍼블릭 클라우드 인프라를 사용하므로 선수금 없이 FPGA를 구입하여 배포할 수 있습니다. 개발자와 연구자는 이 공개 데모(추가 세부 정보는 이 게시물 뒷부분 참조)와 마찬가지로 사전 빌드된 AMI와 AFI를 배포하여 재현하기 쉬운 실험을 수행할 수 있습니다. 또한 FireSim은 FPGA 시뮬레이션 배포에 관련된 대부분의 작업을 자동화하므로 새로운 RTL에서 원클릭 변환을 통해 FPGA 클러스터에 배포할 수 있습니다.

문제 #2: 기존 방식의 FPGA 기반 시뮬레이션은 확장하기 어렵고 비용이 많이 들었습니다.
FireSim은 F1을 사용하기 때문에 사용자는 대규모 FPGA 클러스터에 수십만 달러를 소비하지 않고 추가 EC2 인스턴스를 스핀업하여 실험을 확장할 수 있습니다.

문제 #3: 기존 방식에서는 오픈 하드웨어를 찾기가 어려웠습니다. 실제 소프트웨어 스택을 실행할 수 있는 오픈 하드웨어를 찾는 것은 훨씬 더 어렵습니다.
FireSim은 업계에서 증명된 오픈 RISC-V 기반 프로세서 플랫폼인 RocketChip을 시뮬레이션하며 NIC 및 디스크 장치와 같은 주변장치를 추가하여 실제 시스템을 확장합니다. RISC-V를 구현하는 프로세서는 실제 운영 체제(예: Linux)를 자동으로 지원하며 Apache 및 Memcached와 같은 애플리케이션까지도 지원합니다. AWS는 시뮬레이션된 노드에서 실행되고 많은 인기 개발자 도구가 포함된 사용자 지정 Buildroot 기반 FireSim Linux 배포를 제공합니다.

문제 #4: 기존 HDL에서 하드웨어를 작성하려면 시간이 많이 소모됩니다.
FireSim과 RocketChip 둘 다 하드웨어 설명 언어에 현대적인 프로그래밍 패러다임을 더한 Chisel HDL을 사용합니다. Chisel은 파라미터 수가 많은 대형 하드웨어 구성 요소의 빌드 프로세스를 간소화합니다.

하드웨어/소프트웨어 공동 설계에 FireSim을 사용하는 방법

하드웨어 개발자와 소프트웨어 개발자 간의 공동 작업을 위한 푸시 버튼 인터페이스의 역할을 담당하는 FireSim은 하드웨어와 소프트웨어의 공동 설계 프로세스를 대폭 개선해 줍니다. 다음 다이어그램은 하드웨어 개발자와 소프트웨어 개발자가 FireSim으로 작업할 때의 워크플로우를 보여 줍니다.

그림 2. FireSim 사용자 지정 하드웨어 개발 워크플로우.

하드웨어 개발자의 관점:

  1. Chisel과 같은 생산적인 언어로 액셀러레이터, 주변장치 또는 프로세서 수정을 위한 사용자 지정 RTL을 작성합니다.
  2. 초기 단계 디버깅을 위해 표준 게이트 수준 시뮬레이션 도구에서 하드웨어 설계의 소프트웨어 시뮬레이션을 실행합니다.
  3. FireSim 빌드 스크립트를 실행하여 자동으로 시뮬레이션을 빌드하고 Vivado 도구 체인/AWS 셸 스크립트를 통해 시뮬레이션을 실행하며 AFI를 게시합니다.
  4. 생성된 시뮬레이션 드라이버와 AFI를 사용하여 EC2 F1에 시뮬레이션을 배포합니다.
  5. 소프트웨어 개발자가 릴리스하는 실제 소프트웨어 빌드를 실행하여 하드웨어를 벤치마크합니다.

소프트웨어 개발자의 관점:

  1. 하드웨어 개발자가 생성한 AMI/AFI를 F1 인스턴스에 배포하여 노드 클러스터를 시뮬레이션합니다(또는 더 큰 시뮬레이션된 코어 수를 위해 여러 F1 노드로 확장).
  2. SSH를 사용하여 클러스터에 있는 시뮬레이션된 노드에 연결하고 FireSim과 함께 포함된 Linux 배포를 부팅합니다. 이 배포는 쉽게 사용자 지정할 수 있으며 많은 표준 소프트웨어 패키지를 이미 지원합니다.
  3. 확장 시에도 소프트웨어에서 관찰되는 것과 동일한 성능 특성과 함께, 프로토타입을 작성하고 있는 미래의 실제 시스템에 배포될 때 소프트웨어에 나타나는 것과 정확히 동일한 인터페이스를 사용하여 소프트웨어의 프로토타입을 직접 작성합니다.

FireSim 데모 v1.0

그림 3. FireSim 데모 v1.0에서 시뮬레이션된 클러스터 토폴로지.

FireSim의 이 첫 번째 공개 데모는 앞에서 언급한 사용자 지정 하드웨어 개발 주기의 “소프트웨어 개발자 관점”에 중점을 둡니다. 이 데모는 작동하는 네트워크 시뮬레이션을 통해 상호 연결된 1에서 8개 RocketChip 기반 노드의 클러스터를 시뮬레이션합니다. 시뮬레이션된 노드는 “실제” 머신과 똑같이 작동합니다. 이 노드는 Linux를 부팅하고, SSH를 사용하여 노드에 연결할 수 있으며, 최상위에서 실제 애플리케이션을 실행할 수 있습니다. 노드는 네트워크에서 서로(및 노드가 배포되는 EC2 F1 인스턴스)를 보고 서로 통신할 수 있습니다. 데모는 현재 사전 빌드된 “vanilla” 클러스터를 시뮬레이션하지만, FireSim이 오픈 소스로 제공된 후에는 이 시뮬레이션된 노드의 전체 하드웨어 구성을 수정할 수 있습니다.

이 게시물에서는 숙련된 EC2 F1 사용자를 위한 단일 노드 FireSim 시뮬레이션 작성을 살펴봅니다. 초보 사용자를 위한 추가 세부 지침과 대규모 8노드 시뮬레이션 실행에 대한 지침은 Amazon EC2 F1에서 FireSim 데모 v1.0을 참조하십시오. 두 가지 데모는 데모 AMI/AFI에서 인스턴스를 설정하고 시뮬레이션된 노드에서 Linux를 부팅하는 과정을 보여 줍니다. 전체 데모 지침에서도 시뮬레이션된 노드에서 Memcached를 실행하고 YCSB를 Load Generator로 사용하여 네트워크 기능을 보여 주는 워크로드 예를 살펴봅니다.

F1에 데모 배포

이 릴리스에서는 호스트에서 시뮬레이션을 구동하기 위한 사전 빌드된 바이너리와 RocketChip 기반 노드를 시뮬레이션하는 데 필요한 FPGA 인프라가 포함된 사전 빌드된 AFI를 제공합니다.

F1 인스턴스 시작

먼저, f1.2xlarge 인스턴스에서 AWS Marketplace에서 사용 가능한 무료 FireSim Demo v1.0 제품을 사용하여 인스턴스를 시작합니다. 인스턴스가 부팅된 후 사용자 이름 centos를 사용하여 로그인합니다. 처음 로그인하면 “FireSim network config completed” 메시지가 나타납니다 이 단계에서 EC2 인스턴스의 필수 탭 인스턴스와 브리지를 설정하여 시뮬레이션된 노드와 통신을 활성화합니다.

AMI 콘텐츠

AMI에는 시뮬레이션을 실행하고 RISC-V 시스템용 소프트웨어를 빌드하는 데 도움이 되는 다양한 도구가 포함되어 있습니다. 예를 들면 riscv64 도구 체인, 시뮬레이션된 노드에서 실행되는 Buildroot 기반 Linux 배포, 시뮬레이션 드라이버 프로그램 등이 있습니다. 자세한 내용은 FireSim 웹 사이트의 AMI 콘텐츠 섹션을 참조하십시오.

단일 노드 데모

먼저 FireSim AFI로 FPGA를 플래시해야 합니다. 이렇게 하려면 다음을 실행합니다.

[centos@ip-IP_ADDR ~]$ sudo fpga-load-local-image -S 0 -I agfi-00a74c2d615134b21

시뮬레이션을 시작하려면 명령줄에서 다음을 실행합니다.

[centos@ip-IP_ADDR ~]$ boot-firesim-singlenode

이 명령은 시뮬레이션 드라이버를 자동으로 호출하여 Linux distro용 Linux 커널 이미지 및 루트 파일 시스템을 로드하도록 지시합니다. 그러면 다음과 비슷한 출력이 생성됩니다.

Simulations Started. You can use the UART console of each simulated node by attaching to the following screens:

There is a screen on:

2492.fsim0      (Detached)

1 Socket in /var/run/screen/S-centos.

이 화면에 연결하여 시뮬레이션된 UART 콘솔에 연결할 수 있지만, 그 대신 SSH를 사용하여 노드에 액세스하는 방법을 선택합니다.

먼저 노드를 ping하여 온라인으로 전환되었는지 확인합니다. NIC가 네트워크 트래픽을 수신하지 않으면 Linux 부팅 시 노드가 정체될 수 있기 때문에 현재는 이 단계가 필요합니다. 자세한 내용은 문제 해결/정오표를 참조하십시오. 노드에는 항상 IP 주소 192.168.1.10이 할당됩니다.

[centos@ip-IP_ADDR ~]$ ping 192.168.1.10

그러면 결국 다음과 같은 출력이 생성됩니다.

PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data.

From 192.168.1.1 icmp_seq=1 Destination Host Unreachable

64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=2017 ms

64 bytes from 192.168.1.10: icmp_seq=2 ttl=64 time=1018 ms

64 bytes from 192.168.1.10: icmp_seq=3 ttl=64 time=19.0 ms

이 시점에서 시뮬레이션된 노드가 온라인임을 알 수 있습니다. 사용자 이름 루트 및 암호 firesim과 함께 SSH를 사용하여 연결할 수 있습니다. TERM 변수가 올바르게 설정되었는지 확인하는 것도 편리합니다. 이 경우 시뮬레이션에서 TERM=linux가 예상되므로 다음을 입력합니다.

[centos@ip-IP_ADDR ~]$ TERM=linux ssh root@192.168.1.10

The authenticity of host ‘192.168.1.10 (192.168.1.10)’ can’t be established.

ECDSA key fingerprint is 63:e9:66:d0:5c:06:2c:1d:5c:95:33:c8:36:92:30:49.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘192.168.1.10’ (ECDSA) to the list of known hosts.

root@192.168.1.10’s password:

#

이 시점에서 시뮬레이션된 노드에 연결됩니다. uname -a를 예로 실행합니다. 그러면 RISC-V 시스템에 연결되었음을 나타내는 다음과 같은 출력이 표시됩니다.

# uname -a

Linux buildroot 4.12.0-rc2 #1 Fri Aug 4 03:44:55 UTC 2017 riscv64 GNU/Linux

이제 실제 머신과 같은 방식으로 시뮬레이션된 노드에서 프로그램을 실행할 수 있습니다. 워크로드 예(running YCSB against Memcached on the simulated node)를 보거나 대규모 8노드 시뮬레이션을 실행하려면 전체 Amazon EC2 F1에서 FireSim Demo v1.0 데모 지침을 참조하십시오.

마지막으로, 모두 완료되면 시뮬레이션된 노드 내에서 다음 명령을 실행하여 시뮬레이션된 노드를 종료할 수 있습니다,

# poweroff

screen -ls를 실행하여 시뮬레이션이 종료되었는지 확인할 수 있습니다. 지금 이 명령을 실행하면 분리된 화면이 없다고 보고됩니다.

향후 계획

Berkeley에서는 FireSim 플랫폼을 계속 개선하여 FireBox와 같은 미래의 데이터 센터 아키텍처에 대한 독자적인 연구를 활성화할 계획입니다. FireSim 플랫폼은 더 많은 수의 FPGA로 확장하는 것 외에도 더욱 정교한 프로세서, 사용자 지정 액셀러레이터(예: Hwacha), 네트워크 모델, 주변 장치를 지원할 것입니다. 향후에는 사용자가 하드웨어/소프트웨어 스택의 모든 부분을 수정할 수 있도록 RTL을 FPGA 시뮬레이터로 변환하는 데 사용되는 도구인 Midas를 포함하여 전체 플랫폼을 오픈 소스로 제공할 예정입니다. Twitter에서 @firesimproject를 팔로우하여 FireSim 업데이트를 계속 주목해 주십시오.

감사의 말씀

FireSim은 Sagar Karandikar, Donggyu Kim, Howard Mao, David Biancolin, Jack Koenig, Jonathan Bachrach, Krste Asanović와 같은 Berkeley의 많은 학생과 교직원의 공동 작업입니다. 이 작업은 AWS(RISE Lab을 통해), Intel Science and Technology Center for Agile HW Design, ASPIRE Lab 후원사에서 일부 연구 기금 지원을 받으며 Intel, Google, HPE, Huawei, NVIDIA, SK hynix와 연계하여 진행됩니다.

―Mia Champion, 수석 데이터 과학자, AWS

이 글은  AWS Compute 블로그의 Bringing Datacenter-Scale Hardware-Software Co-design to the Cloud with FireSim and Amazon EC2 F1 Instances의 한국어 번역입니다.