ECS Yitian instance deep learning reasoning performance measurement
近年、ディープラーニングは画像処理、自然言語処理、検索広告レコメンデーションなど、さまざまな産業分野で広く導入されています。ディープラーニングモデルのパラメータ数の指数関数的な増加、および新規ビジネスにおける複雑なモデルの需要により、クラウドベンダーのエラスティックコンピューティングに対して、計算コストの削減と計算効率の向上が求められています。特にディープラーニングの推論が最適化の焦点となっています。このような背景のもと、Alibaba Cloud の Pingtouge チームは、世界初の 5 nm ARM サーバーチップである Yitian 710 を発表しました。このチップは ARM Neoverse N2 アーキテクチャをベースに、最新の ARMv9 命令セットをサポートし、i8mm や bf16 などの拡張命令セットを含んでいます。科学技術計算/AI コンピューティングの分野でパフォーマンス上の優位性を発揮します。
本稿では、Yitian 710 チップを搭載した ECS インスタンス g8y に焦点を当て、ディープラーニング推論タスクのパフォーマンスをテストし、比較します。
01 ワークロード
今回の分析では、画像分類および認識、物体検出、自然言語処理、検索レコメンデーションの各分野をカバーする、4 つの一般的なディープラーニング推論シナリオを選定しました。
02 プラットフォーム
インスタンスタイプ
Alibaba Cloud の ECS g8y (Yitian 710) と ECS g7 (Ice Lake) の 2 種類のインスタンスをテストしました。いずれも 8 vCPU 構成です。
深層学習フレームワーク
すべてのプラットフォームで TensorFlow v2.10.0 および PyTorch 1.12.1 を使用しています。
Arm デバイスでは、TensorFlow は 2 種類のバックエンドをサポートしており、ここでは OneDNN バックエンドを使用しています。OneDNN はオープンソースのクロスプラットフォーム深層学習ライブラリで、Arm Compute Library (Arm デバイス向けの機械学習コンピューティングライブラリ) を統合できます。Arm デバイスでこのバックエンドを使用すると、より高いパフォーマンスを実現できます。
PyTorch の OneDNN サポートはまだ実験段階のため、PyTorch フレームワークではデフォルトの OpenBLAS バックエンドを使用しています。
BFloat16
BFloat16 (BF16) は浮動小数点数の表現形式です。指数部は単精度浮動小数点数 (IEEE FP32) と同じですが、仮数部は 7 ビットのみです。そのため、BF16 の表現範囲は FP32 とほぼ同じですが、精度は低くなります。BF16 はディープラーニングに非常に適しています。一般的に、精度の低下がモデルの予測精度を大きく低下させることはなく、16 ビットのデータ形式によりメモリを節約し、計算を高速化できるからです。
03 TensorFlow パフォーマンス比較
新しい BF16 命令の活用により、g8y はディープラーニングモデルの推論パフォーマンスを大幅に向上させ、複数のシナリオで g7 を上回る結果を記録しました。さらに、独自開発チップである Yitian 710 は、g7 と比べて最大 30% の価格優位性を有しています。
以下の 4 つの図は、ResNet50、SSD、BERT、DIN モデルでの比較結果です。ResNet50、SSD、BERT はいずれも MLPerf Conference Benchmark プロジェクトのモデルで、DIN は Alibaba が提案したヒット率予測モデルです。青いバーは直接のパフォーマンス比較、オレンジのバーは単価あたりのパフォーマンス比較を示しています。たとえば ResNet50 では、g8y のパフォーマンスは g7 の 1.43 倍、単価あたりのパフォーマンスは g7 の 2.05 倍です。
注: バッチサイズ = 32、テスト画像サイズは 224 × 224 です
注: バッチサイズ = 1、テスト画像サイズは 1200 × 1200 です
04 PyTorch パフォーマンス比較
Arm 上の OneDNN バックエンドの PyTorch サポートはまだ実験段階のため、本実験ではデフォルトの OpenBLAS バックエンドを使用しています。OpenBLAS はオープンソースの線形代数ライブラリです。Arm Neoverse N2 向けに、BFloat16 行列乗算の最適化実装を追加しました。
OpenBLAS BFloat16 行列乗算の最適化
行列乗算とディープラーニングには密接な関係があります。たとえば、深層学習でよく使われる全結合層と畳み込み層は、最終的に行列乗算に変換されます。したがって、行列乗算を高速化することで、モデルの計算を最終的に高速化できます。
OpenBLAS は広く使用されている計算ライブラリで、デフォルトでは Numpy や PyTorch などのライブラリのバックエンドとして機能しています。調査の結果、OpenBLAS が Yitian 710 の bf16 命令拡張に対応していないことが判明しました。コミュニティと協議の上、Yitian 710 がサポートする BFMMLA などのベクトル命令を使用して、bf16 データ形式に対応する行列乗算を実装しました。実装後、大幅なパフォーマンス向上を実現しました。パフォーマンス比較を図 5 に示します。この実装は既にオープンソースコミュニティに貢献済みであり、OpenBLAS の最新バージョン 0.3.21 にも取り込まれています。
図 5: OpenBLAS 行列乗算パフォーマンス比較
注: 演算対象の行列の行数および列数は 1000 です。
PyTorch CNN パフォーマンス
OpenBLAS は PyTorch のデフォルトバックエンドです。行列乗算の最適化は、PyTorch で実装された深層学習モデルにも反映されます。畳み込み計算の割合が高い VGG19 モデルを例に取ります。モデルの推論中、すべての畳み込み演算子は行列乗算に変換され、OpenBLAS によって計算されます。以下の図は VGG19 のパフォーマンス比較を示しています。
05 結論
本稿の分析から、Alibaba Cloud の Yitian 710 インスタンス g8y において、複数のディープラーニングモデルの推論パフォーマンスが、同一仕様の g7 を上回ることが示されました。これは主に Arm Neoverse N2 の新命令と、ソフトウェアサポートの継続的な更新 (OneDNN、ACL、OpenBLAS) によるものです。この過程で、Alibaba Cloud のコンパイラチームはソフトウェア最適化の一部を貢献しました。今後は、この分野におけるソフトウェアとハードウェアの最適化を継続的に推進し、ARM シリーズインスタンスの ML/AI 分野での競争力を高めていく予定です。
本稿では、Yitian 710 チップを搭載した ECS インスタンス g8y に焦点を当て、ディープラーニング推論タスクのパフォーマンスをテストし、比較します。
01 ワークロード
今回の分析では、画像分類および認識、物体検出、自然言語処理、検索レコメンデーションの各分野をカバーする、4 つの一般的なディープラーニング推論シナリオを選定しました。
02 プラットフォーム
インスタンスタイプ
Alibaba Cloud の ECS g8y (Yitian 710) と ECS g7 (Ice Lake) の 2 種類のインスタンスをテストしました。いずれも 8 vCPU 構成です。
深層学習フレームワーク
すべてのプラットフォームで TensorFlow v2.10.0 および PyTorch 1.12.1 を使用しています。
Arm デバイスでは、TensorFlow は 2 種類のバックエンドをサポートしており、ここでは OneDNN バックエンドを使用しています。OneDNN はオープンソースのクロスプラットフォーム深層学習ライブラリで、Arm Compute Library (Arm デバイス向けの機械学習コンピューティングライブラリ) を統合できます。Arm デバイスでこのバックエンドを使用すると、より高いパフォーマンスを実現できます。
PyTorch の OneDNN サポートはまだ実験段階のため、PyTorch フレームワークではデフォルトの OpenBLAS バックエンドを使用しています。
BFloat16
BFloat16 (BF16) は浮動小数点数の表現形式です。指数部は単精度浮動小数点数 (IEEE FP32) と同じですが、仮数部は 7 ビットのみです。そのため、BF16 の表現範囲は FP32 とほぼ同じですが、精度は低くなります。BF16 はディープラーニングに非常に適しています。一般的に、精度の低下がモデルの予測精度を大きく低下させることはなく、16 ビットのデータ形式によりメモリを節約し、計算を高速化できるからです。
03 TensorFlow パフォーマンス比較
新しい BF16 命令の活用により、g8y はディープラーニングモデルの推論パフォーマンスを大幅に向上させ、複数のシナリオで g7 を上回る結果を記録しました。さらに、独自開発チップである Yitian 710 は、g7 と比べて最大 30% の価格優位性を有しています。
以下の 4 つの図は、ResNet50、SSD、BERT、DIN モデルでの比較結果です。ResNet50、SSD、BERT はいずれも MLPerf Conference Benchmark プロジェクトのモデルで、DIN は Alibaba が提案したヒット率予測モデルです。青いバーは直接のパフォーマンス比較、オレンジのバーは単価あたりのパフォーマンス比較を示しています。たとえば ResNet50 では、g8y のパフォーマンスは g7 の 1.43 倍、単価あたりのパフォーマンスは g7 の 2.05 倍です。
注: バッチサイズ = 32、テスト画像サイズは 224 × 224 です
注: バッチサイズ = 1、テスト画像サイズは 1200 × 1200 です
04 PyTorch パフォーマンス比較
Arm 上の OneDNN バックエンドの PyTorch サポートはまだ実験段階のため、本実験ではデフォルトの OpenBLAS バックエンドを使用しています。OpenBLAS はオープンソースの線形代数ライブラリです。Arm Neoverse N2 向けに、BFloat16 行列乗算の最適化実装を追加しました。
OpenBLAS BFloat16 行列乗算の最適化
行列乗算とディープラーニングには密接な関係があります。たとえば、深層学習でよく使われる全結合層と畳み込み層は、最終的に行列乗算に変換されます。したがって、行列乗算を高速化することで、モデルの計算を最終的に高速化できます。
OpenBLAS は広く使用されている計算ライブラリで、デフォルトでは Numpy や PyTorch などのライブラリのバックエンドとして機能しています。調査の結果、OpenBLAS が Yitian 710 の bf16 命令拡張に対応していないことが判明しました。コミュニティと協議の上、Yitian 710 がサポートする BFMMLA などのベクトル命令を使用して、bf16 データ形式に対応する行列乗算を実装しました。実装後、大幅なパフォーマンス向上を実現しました。パフォーマンス比較を図 5 に示します。この実装は既にオープンソースコミュニティに貢献済みであり、OpenBLAS の最新バージョン 0.3.21 にも取り込まれています。
図 5: OpenBLAS 行列乗算パフォーマンス比較
注: 演算対象の行列の行数および列数は 1000 です。
PyTorch CNN パフォーマンス
OpenBLAS は PyTorch のデフォルトバックエンドです。行列乗算の最適化は、PyTorch で実装された深層学習モデルにも反映されます。畳み込み計算の割合が高い VGG19 モデルを例に取ります。モデルの推論中、すべての畳み込み演算子は行列乗算に変換され、OpenBLAS によって計算されます。以下の図は VGG19 のパフォーマンス比較を示しています。
05 結論
本稿の分析から、Alibaba Cloud の Yitian 710 インスタンス g8y において、複数のディープラーニングモデルの推論パフォーマンスが、同一仕様の g7 を上回ることが示されました。これは主に Arm Neoverse N2 の新命令と、ソフトウェアサポートの継続的な更新 (OneDNN、ACL、OpenBLAS) によるものです。この過程で、Alibaba Cloud のコンパイラチームはソフトウェア最適化の一部を貢献しました。今後は、この分野におけるソフトウェアとハードウェアの最適化を継続的に推進し、ARM シリーズインスタンスの ML/AI 分野での競争力を高めていく予定です。
Related Articles
-
A detailed explanation of Hadoop core architecture HDFS
Knowledge Base Team
-
What Does IOT Mean
Knowledge Base Team
-
6 Optional Technologies for Data Storage
Knowledge Base Team
-
What Is Blockchain Technology
Knowledge Base Team
Explore More Special Offers
-
Short Message Service(SMS) & Mail Service
50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00
