Supershipグループ Advent Calendar 2020 - Qiitaの12/8の記事です。
この記事は、2020年10月22日に行われたオンラインイベント Compute x AWS Graviton2 「Armプロセッサによるコスト最適化」の登壇内容を元に加筆・抜粋したものです。
ざっくりまとめ
- AWS EC2で64bit Arm CPUのインスタンスを使用できるようになりました
- 検証した結果、安くて概ね速くて非常にコスパに優れています
- 一部不向きなタスクもあります
- 積極的に使っていきます
AWS Gravitonプロセッサ
AWSが作ったArmアーキテクチャのCPUです。
サーバのCPUといえばIntelかAMDが作るx86_64 CPUという状態が10年以上続いてきました。AWSもずっとIntel Xeonを採用し続けてきましたが、2015年にAnnapurna Labsを買収してから独自にCPUの開発を進め、2018年11月にArmベースのGravitonプロセッサを使用したA1インスタンスを発表、2019年12月には性能を向上させたGraviton2プロセッサを発表しました。現在では一般用途のm6g、コンピュート最適化のc6g、メモリ最適化のr6g、バースト可能インスタンスのt4gと、よく使う一通りのインスタンスタイプでGraviton2プロセッサを利用できるようになっています。
価格
Gravtionプロセッサの利点は、なんといってもCPUあたりの価格が安いことです。詳細な価格は公式の価格表に譲るとして、メモリ量 = vCPU数 * 2 GB のインスンタンスの2020-12-07時点のオンデマンド価格をAsia Pacific(Tokyo)で比較してみましょう。
インスタンスタイプ | CPU | メモリ(GB) | vCPU数 | 価格($/h) |
---|---|---|---|---|
c5.large | Intel Xeon (Skylake) | 4 | 2 | 0.107 |
a1.large | Graviton | 4 | 2 | 0.0642 |
c6g.large | Graviton2 | 4 | 2 | 0.0856 |
vCPUあたりの価格はGraviton, Graviton2のほうが安価です。しかも、c5の2vCPUは物理1core 2threadなのに対しa1とc6gは物理2coreとなっており、物理CPU単価では半額以下です。
性能
a1インスタンスは性能が低いという記事を見たため検証しなかったのですが、Graviton2はAWSが自信ありそうな推し方をしていたので、業務を想定して様々な処理の性能を計測してみました。色々計測した結論としては、
- 全CPUコアを使い切って処理する場面ではGraviton2インスタンスのほうがスループットが高い
- シングルスレッド性能は既存のIntel CPUインスタンスのほうが高い
です。詳細はこちらのスライドをご覧ください。ここでは特徴的な結果だけ抜粋して掲載します。
Go1.14.4で実装されたバッチをc6g、c5、c5aの12xlarge(48vCPU)インスタンスで実行し、並行処理のスレッド(goroutine)数を1から48まで変化させてデータ処理量(higher is better)を計測した結果がこちらです。全てのCPUを使い切る設定の時、最も安価なc6gが最も高いスループットを示しました。スレッド数を増やしていくと、c5とc5aはスレッド数がvCPU数の半分=物理core数に達するあたりから処理量が伸びづらくなりますが、vCPU=物理coreのc6gはスレッド数がvCPU数に達するまで処理量が伸び続けます。
上記のような12xlargeという大きなインスタンスだけでなく、largeのような比較的小さなインスタンスでも同様の結果となります。m6g、m5、c5aのlarge(2vCPU)インスタンスにJSONを返却するWebサーバとWebアプリケーションを構築し、捌ける限界リクエスト数(higher is better)を計測したところ、物理2coreを生かしてm6gが最も良い結果を示しました。
一方、シングルスレッドでいくつかの処理の実行時間(lower is better)を計測した時は、Intel CPUのインスタンスが良好な値を示しました。m系インスタンスどうしで比較すると差が小さいのですが、c系インスタンスで比較するとc5の速さが目立ちます。
Graviton2の良さが光るのは、「CPU性能が求められず、コスト削減を優先したい」「全CPUコアを使い切った時のスループットが重要」どちらかの場面だと言えるでしょう。シングルスレッド性能が重要な場面には不向きです。
使用感
これまでサーバサイドコンピューティングの世界はx86_64を前提として回ってきたため、arm64では実行できないソフトウェアが続出するのでは…と懸念していました。実際に使ってみると、Linuxのディストリビューションが同じであればx86_64でもarm64でも同じ手順で構築でき、同じように使えて拍子抜けすることが多かったです。機械学習を除けば。
Graviton2上でPythonを使い機械学習をやってみた時は、ライブラリのインストールが失敗したりコンパイルに時間がかかったりと、環境構築面で苦労が多い印象でした。また、GPUインスタンスは用意されていません。Graviton2登場当初と比べるとライブラリの対応は進んできており、将来的には問題なく使えるようになることを期待しています。
なお、x86_64で構築済みのサーバのインスタンスタイプをarm64に変更することはできません。既にx86_64で作成済みのサーバをarm64に切り替えるには、サーバをarm64で一から作り直す必要があります。Dockerを使っている場合は、arm64向けにDocker Imageを作り直す必要があります。検証の際はサーバを新規作成して比較したので問題ありませんでしたが、実業務ではこの点がハードルになる場面があるかもしれません。
おわりに
検証結果を受けて、新しくサーバを構築する際はGraviton2を選ぶことが多くなりました。既存のサーバも積極的にGraviton2に置き換えてコストパフォーマンスを向上させるべく、準備を進めています。
Graviton2の登場はもちろん、macがArmベースのM1チップを採用したりArmを採用した富岳がスパコンランキングで1位になったりと、2020年はArm躍進の年でした。モバイルと組込機器はArm、PCとサーバはx86_64という棲み分けが一気に崩れた感があります。このまま世界のCPUがArmに支配されていくのか、IntelとAMDが奮起して巻き返すのか、競争による製品の改善に期待を持って見守っていきます。