AWS 기술 블로그
ARM 기반의 AWS HPC 전용 인스턴스, Hpc7g 파헤치기
이 글은 AWS HPC Blog의 Instance sizes in the Amazon EC2 Hpc7 family – a different experience를 기반으로 필자에 의해 변경 및 확장되었습니다.
AWS가 제공하는 HPC 전용 인스턴스
AWS는 늘어나는 CAE(Computer Aided Engineering) 워크로드의 클라우드 마이그레이션 전환을 위해 HPC 전용으로 사용할 수 있는 EC2 인스턴스를 지속적으로 출시하고 있습니다. 2022년 초에 최초의 HPC 전용 Amazon EC2 인스턴스인 Hpc6a가 출시되었으며, 현재는 Intel(Hpc6id), AMD(Hpc6a/7a), ARM(Hpc7g) 기반의 HPC 전용 EC2 인스턴스 라인업을 확보하고 있습니다.
성능과 비용이라는 두 가지 목적을 만족시키기 위하여, HPC 전용 인스턴스는 타 EC2 인스턴스 대비 상대적으로 많은 코어 수 및 100Gbps 이상의 높은 네트워크 대역폭(Bandwidth)를 지원하고 있으며, 상대적으로 매우 저렴한 온디맨드(On-demand) 형태의 EC2 인스턴스를 제공합니다.
오늘 소개할 Hpc7g 인스턴스는 2023년 6월에 공식 출시되었으며, 다양한 인스턴스 크기를 최초로 제공한 HPC 전용 EC2 인스턴스입니다. 테이블1에서 확인할 수 있는 것처럼, Hpc7g 인스턴스는 3가지 타입의 인스턴스를 제공하며, 최대 64개의 물리적인 코어, 128GiB의 DDR5 메모리, 고속 네트워크를 제공하는 EFA 어댑터를 적용하여 200Gbps의 네트워크 성능을 제공합니다. 이러한 인스턴스들은 AWS 나이트로(Nitro) 시스템을 기반으로 구현되었기 때문에, 베어메탈(BareMetal) 서버와 거의 동일한 성능을 제공합니다.
한국의 스타트업인 ADRO와 ENCORED는 HPC 클러스터를 구성하기 위하여 AWS의 Hpc7g 인스턴스를 도입하여 자사의 시뮬레이션 환경을 극적으로 변화시킨 대표적인 혁신 사례를 보여 줍니다. Hpc7g와 관련된 보다 자세한 기술적 내용은 이 링크를 참고하시기 바랍니다.
<테이블1. HPC7g의 엔지니어링 스펙 (버지니아 북부 AWS 리전)>
이미 언급한 것처럼 Hpc7g 인스턴스는 일반적인 EC2 인스턴스와 마찬가지로 다양한 사이즈의 인스턴스를 제공합니다만, 기존의 EC2 인스턴스와는 사뭇 다른 경험을 사용자들에게 제공합니다. 이번 블로그에서는 이와 관련되어 EC2 인스턴스의 가격 대비 성능 관점에서 고객들에게 인사이트를 제공하고자 합니다.
일반적으로 EC2 인스턴스는 테이블2와 같이 사이즈에 따라, 코어(vCPU), 메모리, 네트워크 등의 속도가 서로 다르며 이에 따라 비용도 서로 다릅니다. 인스턴스의 사이즈가 한 단계씩 증가할수록 일반적으로 vCPU 및 메모리의 사이즈가 두배 씩 증가하며 가격 또한 비례하여 증가합니다.
그러나 Hpc7g 인스턴스의 경우, 테이블1에서 확인할 수 있는 것처럼, 물리적인 코어의 개수를 제외하고는 3가지 타입의 인스턴스에 대한 엔지니어링 스펙은 모두 동일합니다. 무엇보다 가격 또한, 3가지 타입에 대해 동일하게 적용됩니다.
<테이블2. 일반적인 EC2 인스턴스(c6in)의 엔지니어링 스펙 (서울 AWS 리전) >
이글을 읽고 있는 여러분이 CAE 엔지니어라면, 시뮬레이션을 위해 어떤 인스턴스 타입을 선택 하시겠습니까? 아마도 거의 대부분의 고객들이 비용 절감을 위해서라도 직관적으로 가장 많은 코어를 탑재한 Hpc7g.16xlarge 인스턴스를 선택할 것입니다. 그러나 이러한 선택은 때로는 잘못된 판단이 될 수도 있습니다. 이번 블로그에서는 이와 관련되어 여러분들이 주의해야 할 점들에 대해 언급하고자 합니다.
해석을 위해 항상 많은 코어를 탑재한 HPC 전용 인스턴스를 선택하는 것이 적절한 선택일까?
여러분이 512개의 코어로 시뮬레이션을 수행해야하는 CAE 엔지니어라고 가정해 보겠습니다. HPC 클러스터 구성을 위해 Hpc7g 인스턴스를 사용하려고 합니다. Hpc7g.16xlarge 인스턴스로 구성할 경우에는 클러스터 구성을 위해 8개의 인스턴스가 필요하고, Hpc7g.4xlarge 인스턴스로 구성할 경우에는 32개의 인스턴스가 필요합니다. 비용은 모두 동일하기 때문에, 많은 경우 비용 절감을 위해 Hpc7g.16xlarge 인스턴스를 선택하고자 할 것입니다.
그러나 다른 관점에서 생각해보면, 코어의 개수가 작을 수록 코어당 메모리와 코어당 메모리의 대역폭이 증가하기 때문에, 성능 관점에서 오히려 유리할 수 있습니다. 또한 ISV의 상용 소프트웨어를 구매해서 사용하는 경우, 라이선스 정책상 코어당 라이선스 비용이 부과되는 경우가 많습니다. 따라서 적은 코어수로 최대의 성능을 낼 경우 오히려 비용이 절감될 수 있습니다.
Hpc7g를 이용한 OpenFOAM 성능 평가
따라서 실제로 이러한 가정이 적절한지에 대한 평가 작업을 진행하기 위해, 대표적인CFD(Computational Fluid Dynamics) 해석 툴인 OpenFOAM을 사용하여 테스트를 진행해 보도록 하겠습니다. OpenFOAM은 오픈소스 기반의, 자동차/선박/항공/에너지/ 헬스케어 등에서 사용되는 대표적인 CFD 툴입니다.
우선 그림1은, 64개의 물리 코어를 포함하는 한 개의 Hpc7g.16xlarge 인스턴스를 가지고, 코어의 개수를 최대 64개까지 증가시키면서 4M 셀(Cell)을 갖는 모터바이크 케이스의 코어당 스케일링 성능을 보여주고 있습니다. 그림에서 볼 수 있듯이 일반적인 생각과는 다르게, 코어의 개수가 16개 이상이 되면 성능이 더 이상 선형적으로 증가하지 않는다는 사실을 확인할 수 있습니다. 이것은 hpc7g.16xlarge 인스턴스의 상대적으로 적은 코어당 메모리 비율(2GB) 때문입니다.
<그림1. 한 개의 Hpc7g.16xlarge 인스턴스를 이용한 스케일링 테스트 결과 >
이번에는 그림2와 같이, 세가지 Hpc7g 인스턴스 모두를 사용하여 상대적으로 대형인 100M 셀을 갖는 모터바이크 케이스의 솔버 성능 테스트를 진행하였습니다. x축은 역시 코어의 개수를 의미하며, y축은 성능(높을수록 좋음)을 의미합니다. 그림에서 볼 수 있듯이 고정된 코어 수로 한정할 경우, 인스턴스 크기가 작을수록 절대 성능이 더 높습니다. 예를 들어, 128개 코어 기준으로 Hpc7g.8xlarge 인스턴스는 Hpc7g.16xlarge 인스턴스 보다 성능이 1.68배 더 우수하고, Hpc7g.4xlarge 인스턴스는 Hpc7g.16xlarge 인스턴스 보다 성능이 2.64배 더 우수합니다. 즉 가장 작은 코어를 탑재한 Hpc7g.4xlarge 인스턴스가 가장 성능이 좋을 것을 확인할 수 있습니다. 이것은 이미 언급한 것처럼, Hpc7g.4xlarge 인스턴스가 다른 타입의 인스턴스에 비해 코어당 메모리 비율이 가장 높기 때문입니다.
<그림2. 인스턴스 사이즈 별 Hpc7g 인스턴스의 성능 테스트 결과 >
Hpc7g를 이용한 OpenFOAM 비용 평가
다음으로는 비용 관점에서 세가지 인스턴스 타입을 비교 검토해 보도록 하겠습니다. 비용 관점에서는 아무래도 Hpc7g.4xlarge 인스턴스의 코어 개수가 상대적으로 적기 때문에 가장 불리할 것이라는 것은, 굳이 테스트를 진행하지 않더라도 직관적으로 알 수 있습니다.
<그림3. 인스턴스 사이즈 별 Hpc7g 인스턴스의 비용 테스트 결과 >
그림3은 Amazon EC2 온디맨드 요금을 사용하여 세 가지 다른 Hpc7g 인스턴스 크기 (Hpc7g.16xlarge, Hpc7g.8xlarge, Hpc7g.4xlarge) 에 대한 대형의 100M 셀 오토바이 케이스의 시뮬레이션당 비용을 보여줍니다. 예측한 바와 같이 고정 된 코어 수에 대해, 인스턴스 크기가 작을 수록 시뮬레이션 절대 비용이 높아집니다. 예를 들어, 128코어에서는 다음과 같은 비용 계산이 가능합니다.
<테이블3. Hpc7g 인스턴스 사이즈 별 비용 결과>
Hpc7g를 이용한 OpenFOAM 가격 대비 성능 평가
그림4는 3개의 서로 다른 HPC7g 인스턴스 사이즈에 대해, 고정된 128개의 코어에 대한 모터바이크 100M 셀 케이스의 성능 향상 및 비용 증가 비율을 보여줍니다. 파란색 막대는 성능 향상을 나타내고 주황색 막대는 비용 증가를 나타냅니다. 그림에서 볼 수 있듯이 128개 코어에서 Hpc7g.8xlarge 인스턴스는 Hpc7g.16xlarge 인스턴스 대비, 성능이 1.68배 향상되나 대신 비용은 약 20% 증가합니다. 또한 Hpc7g.4xlarge인스턴스는 Hpc7g.16xlarge 인스턴스 대비, 성능은 2.64배 증가하나, 비용은 약 50% 상승하게 됩니다. 즉, 가장 적은 코어를 포함하는 Hpc7g.4xlarge 인스턴스를 사용하는 것이 가격 대비 성능 관점에서 가장 유리하다는 것이 테스트를 통해 확인되었습니다. 따라서 처음 예상과는 다르게, 가장 많은 코어를 포함하는 Hpc7g.16xlarge 인스턴스가 가격 대비 성능 측면에서 가장 불리한 것을 알 수 있습니다.
<그림4. Hpc7g 인스턴스에 대한 가격 대비 성능 평가 결과 >
맺음말
이 블로그에서는 ARM 기반의 HPC 전용 인스턴스인 Hpc7g 인스턴스에 대해, 성능 및 비용 관점에서 CAE 사용자 분들이 고려해야 할 것들에 대해 설명하였습니다. 코어가 많은 인스턴스를 선택하는 것은 많은 장점을 가져올 수 있습니다. 하지만 비용 대비 성능 관점에서 접근하면, 항상 많은 코어가 더 좋은 선택이 되는 것 만은 아닙니다 OpenFOAM과 같은 메모리 대역폭에 민감한 워크로드의 경우, 더 작은 사이즈의 인스턴스를 여러 개 사용하는 것이 가격 대비 성능 관점에서 오히려 이득이 될 수 있다는 사실을 이 블로그를 통해 소개하였습니다.
특히 Hpc7g 또는 Hpc7a 처럼 여러 HPC 전용 인스턴스 크기를 제공하는 경우, 코어 수를 제외하고는 동일한 엔지니어링 스펙을 제공하고 있으며, 비용 또한 모두 동일합니다. 따라서 PoC 등을 통해서 반드시 우리 워크로드에 최적화된 인스턴스를 선택하는 작업이 필수입니다. 이 블로그에서는 OpenFOAM에 국한하여 설명하였으나, 다른 ISV 솔버를 사용하는 다양한 시뮬레이션 환경에서도 모두 동일하게 적용될 수 있습니다.