この記事は、インテル® デベロッパー・ゾーンに掲載されている「Intel® CPU Outperforms NVIDIA* GPU on ResNet-50 Deep Learning Inference」(https://software.intel.com/en-us/articles/intel-cpu-outperforms-nvidia-gpu-on-resnet-50-deep-learning-inference) の日本語参考訳です。
インテルは、ディープラーニングのワークロードを加速するため、近年ハードウェアとソフトウェアの両方を急速に進化させてきました。最新のインテル® Xeon® スケーラブル・プロセッサーを搭載した ResNet-50 上で毎秒 7878 画素のパフォーマンス・リーダーシップを達成し、NVIDIA* Tesla* V100 上の毎秒 7844 画素 (T4 を含む NVIDIA* 社のウェブサイトで公開されている最高の GPU パフォーマンス) を上回ることができました。
これは、インテル® Xeon® スケーラブル・プロセッサーをクラウドおよびデータセンターで広く利用できるユーザーにとって、大きなマイルストーンです。CPU は汎用製品であり、幅広いアプリケーション向けに設計されています。ユーザーは、ビジネス上重要なワークロードをいつでも実行でき、さらに動的な計算要求に対応できます。アクセラレーターは、専用ハードウェアがコストに見合う特定のユーザーシナリオに適しています。インテルはまた、推論と訓練の両方で利用できるディープラーニング・アクセラレーターを開発中です。しかし、高度な学習機能を備えた CPU を利用することで、AI ユーザーは計算基盤を一元的に、かつ費用対効果の高い方法で管理できるようになります。
ディープラーニングは、画像/ビデオ処理、自然言語処理、個別推奨システム、および強化学習の分野で使用されます。ワークロードとアルゴリズムの種類は急速に拡大しています。汎用 CPU は、そのような動的に変化する環境にうまく対応できます。
第 2 世代インテル® Xeon® スケーラブル・プロセッサー (開発コード名 Cascade Lake)、具体的には高コアカウントのマルチチップ・パッケージのマルチプロセッサー・サーバーであるインテル® Xeon® Platinum 9283 プロセッサーでインテル® Optimization for Caffe* を使用して ResNet-50 のスループットを測定しました。バッチサイズ 11 を 4 つのコアでそれぞれ 28 のインスタンスを同時に実行することで、1 秒あたり 7878 画像を達成できました。NVIDIA* Tesla* V100 のパフォーマンスは、1 秒あたり 7844 画像で、NVIDIA* Tesla* T4 では 1 秒あたり 4944 画像です (この原文ドキュメントの発表日 2019 年 5 月 13 日の時点で公開 (英語) されている情報)。
2019 年 4 月に、インテルはインテル® Deep Learning Boost (インテル® DL Boost) テクノロジーをサポートする第 2 世代インテル® Xeon® スケーラブル・プロセッサーを発表しました。このテクノロジーには、整数ベクトル・ニューラル・ネットワーク命令 (VNNI) が含まれており、INT8 操作で 8 ビット推論の高いスループットを提供することで、理論上のピーク計算ゲインは FP32 操作に比べて 4 倍になります。
インテル® Optimization for Caffe* は、幅広いディープラーニング・コミュニティー向けにインテル社によって提供されているオープンソースのディープラーニング・フレームワークです。INT8 推論向けに、最近 4 つの汎用最適化が追加されました。1) 活性化メモリーの最適化、2) 重みの共有、3) 畳み込みアルゴリズムのチューニング、および 4) 最初の畳み込み変換。
まとめ
ここでは、最適化されたディープラーニング・ソフトウェアとインテル® Xeon® スケーラブル・プロセッサーの有効性を実証し、インテル® Xeon® Platinum 9282 プロセッサーを使用して ResNet-50 で 7878 画像/秒のスループットを達成し、NVIDIA* の最高の GPU を凌駕しました。
付記: 再現手順
ステップ 1: 以下のインテル® C++ コンパイラー (ICC) をインストール
https://github.com/intel/caffe/wiki/Build-Caffe-with-Intel–Compiler
ステップ 2: Caffe* ソースコードを入手
git clone https://github.com/intel/caffe.git caffe
cd caffe
ステップ 3: ICC でビルド
sh scripts/prepare_env.sh
source /opt/intel/compilers_and_libraries/linux/bin/compilervars.sh intel64
unset CPATH
CC=icc CXX=icpc cmake ../ -DCMAKE_BUILD_TYPE=Release -DBLAS=mkl -DCPU_ONLY=1 -DBOOST_ROOT=<caffe>/boost_1_64_0/install
CC=icc CXX=icpc make all -j262
ステップ 4: CLX-AP 向けの run.sh ヘッダーを若干変更
iterations=1200
skip=200
NUM_CORE=112
s_BS=11
e_BS=11
INSTANCE=28
ステップ 5: テストを実行
CAFFE_INFERENCE_MEM_OPT=1 ./run.sh
構成の詳細
2019 年 5 月 10 日現在のインテル社内での測定値。DL 推論: プラットフォーム: インテル® S2900WK 2 ソケット インテル® Xeon® Platinum 9282 プロセッサー (ソケットあたり 56 コア)、インテル® ハイパースレッディング・テクノロジー有効、インテル® ターボ・ブースト・テクノロジー有効、合計メモリー 768GB (24 スロット/32GB/2933MHz)、BIOS: SE5C620.86B.0D.01.0492.042220190420、CentOS* 7.6 3.10.0-957.10.1.el7.x86_64、ディープラーニング・フレームワーク: インテル® Optimization for Caffe* バ―ション: https://github.com/intel/caffe (英語) コミット ID: 1141d7f、ビルドに使用した ICC のバージョン 2019.2.187、インテル® MKL-DNN バージョン: v0.19 (コミットハッシュ: 9a865c2b935e611f4ea451a26bebe45ec5ef4160)、モデル: https://github.com/intel/caffe/blob/master/models/intel_optimized_models/int8/resnet50_int8_perf_clx_winograd.prototxt (英語)、BS=11、合成データ: 3x230x230、28 インスタンス/2 ソケット、データ型: INT8、スループット7878 画像/秒
性能の測定結果は 2019 年 5 月 10 日時点のテストに基づいています。また、現在公開中のすべてのセキュリティー・アップデートが適用されているとは限りません。絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。
最適化に関する注意事項: インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。
性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。SYSmark* や MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。詳細については、http://www.intel.com/performance/ (英語) を参照してください。
Intel、インテル、Intel ロゴ、Xeon は、アメリカ合衆国および / またはその他の国における Intel Corporation またはその子会社の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。