この記事は、インテルのウェブサイトで公開されている「Intel® oneAPI DPC++/C++ Compiler Boosts PyTorch* Inductor Performance on Windows* for CPU Devices」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
はじめに
PyTorch ベースの AI アプリケーションのパフォーマンスと広範囲なプラットフォームにわたるスケーラビリティーは、ハードウェアの機能を最大限に活用するネイティブ C++ カーネルから大きな恩恵を受けることができます。最新のアーキテクチャー拡張とコードパス最適化をサポートするコンパイラーによってこれらのネイティブカーネルを構築することで、選択したハードウェア・プラットフォームで、AI アプリケーションの必要なレベルのパフォーマンスと応答性を確保できます。
この記事では、Microsoft Windows を実行する第 12 世代インテル® Core™ プロセッサー・ベースのマシンでこれを達成する方法について説明します。Microsoft Visual C++ コンパイラーとインテル® oneAPI DPC++/C++ コンパイラーを使用して、Python リファレンス・ベンチマーク・アプリケーションをビルドします。
TorchInductor は、PyTorch 2.x[1] コンパイルのデフォルトのコンパイラー・バックエンドであり、PyTorch プログラムを CPU 向けの C++ カーネルにコンパイルします。デフォルトの Inductor バックエンドを利用したグラフレベルの最適化により、Eager モード実行よりも大幅に高速化されます。TorchInductor の C++ カーネルに適用されるコンパイラーは、計算集約型の AI および ML ワークロードを高速化し、x86 プラットフォームでスケーリングする上で重要な役割を果たします。
この記事では、インテル® oneAPI DPC++/C++ コンパイラー[2] を使用して、CPU デバイス向けに Windows 上で TorchInductor (C++ カーネル) を高速化する手順を紹介します。また、典型的な x86 クライアント・マシンでの一般的な PyTorch ベンチマーク (Torchbench、HuggingFace、および TIMM モデル) のパフォーマンス・テスト結果も示します。
ソフトウェアのインストール
Microsoft Visual Studio Community 2022 をダウンロードしてインストールします。
以下のリンクから Microsoft Visual C++ のランタイム・ライブラリーをインストールします。
[Desktop development with C++ (C++ によるデスクトップ開発)] をオンにしてインストールします。
https://visualstudio.microsoft.com/downloads/以下のリンクから、インテル® oneAPI DPC++/C++ コンパイラーをダウンロードしてインストールします。
[Intel oneAPI Base Toolkit for Windows* (64 Bit)] を選択してインストールします。
https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html (英語)
以下のリンクから、Windows 向けの Miniforge 64-bit 版をダウンロードしてインストールします。
[Miniforge3 Windows] を選択してインストールします。
https://conda-forge.org/miniforge/ (英語)
インテル® oneAPI DPC++/C++ コンパイラーと PyTorch 環境のセットアップ
ビルドコンソールを起動します。
[Intel oneAPI command prompt for Intel 64 for Visual Studio 2022] コンソールを起動します。Conda-Forge をアクティベーションします。
Conda-Forge は、Windows 上で実行されるパッケージおよび環境管理用の強力なコマンドライン・ツールです。
インテル® oneAPI DPC++/C++ コンパイラーで使用する Conda-Forge スペースを作成します。
PyTorch をインストールするため、別のコンパイラー環境を作成します。
conda create -n icx python==3.11 conda activate icx
PyTorch 2.5 以降 (英語) をインストールします。
注: バージョン 2.5 以降のみ Windows PyTorch Inductor をサポートします。
pip install torch
インテル® oneAPI DPC++/C++ コンパイラーを使用した PyTorch の実行
以下に示すように、環境変数「CXX」を使用して、インテル® oneAPI DPC++/C++ コンパイラーを Windows Inductor C++ コンパイラーとして設定します。Microsoft Visual C++ コンパイラーは PyTorch のデフォルトのコンパイラーであり、PyTorch は Windows のコンパイラー・フラグ構文がこのデフォルトと同じであると想定しています。したがって、『インテル® oneAPI DPC++/C++ コンパイラー・デベロッパー・ガイドおよびリファレンス』 (英語) で説明されているように、「icx-cl」コンパイラー・コマンドライン・ドライバーを使用する必要があります。
Windows システムでインテル® oneAPI DPC++/C++ コンパイラーを使用して TorchInductor を使用します。以下は、TorchInductor でインテル® oneAPI DPC++/C++ コンパイラーを利用する方法を示す簡単な例です。
インテル® oneAPI DPC++/C++ コンパイラーを使用して PyTorch のパフォーマンスを向上
インテル® oneAPI DPC++/C++ コンパイラーは、最先端のコンパイラー・テクノロジーにより x86 向けに最適化されたバイナリーを生成し、PyTorch Inductor のパフォーマンスを向上させます。以下は、一般的な PyTorch ベンチマークの Torchbench、HuggingFace、および TIMM モデルでテストした結果です。
スピードアップ = Inductor パフォーマンス/Eager パフォーマンス
Eager モードに対するデフォルトのラッパーのスピードアップ (値が大きいほうが良い) |
||
---|---|---|
ワークロード | Microsoft Visual C++ Compiler (デフォルト) | インテル® oneAPI DPC++/C++ コンパイラー |
Torchbench | 1.132 | 1.389 |
HuggingFace | 0.911 | 1.351 |
Timm_models | 1.365 | 1.720 |
- Torchbench パフォーマンス結果:
- HuggingFace パフォーマンス結果:
- Timm_models パフォーマンス結果:
製品および性能に関する情報
テスト実施日: 性能の測定結果は 2024年10月11日時点のインテルの社内テストに基づいています。また、現在公開中のすべてのセキュリティー・アップデートが適用されているとは限りません。
システム構成:
OS バージョン: Windows 11 Enterprise バージョン 22H2 (OS ビルド 22621.4169)
コンパイラー・バージョン:
Microsoft Visual C++ コンパイラー: 19.41.34120
インテル® oneAPI DPC++/C++ コンパイラー: 2024.2.1
Python バージョン: 3.11.0
Torch バージョン: 2.5.0+cpu
ハードウェア構成:
第 12 世代インテル® Core™ i9-12900K プロセッサー、Performance-core 基本周波数: 3.20GHz、ソケット数: 1、コア総数: 16、スレッド総数: 24、インテル® バーチャライゼーション・テクノロジー: 有効、L1 キャッシュ: 1.40MB、L2 キャッシュ: 14MB、L3 キャッシュ: 30MB、メモリー: 32GB、速度: 4800MT/s、使用スロット: 4 個中 2 個、フォームファクター: DIMM
まとめ
この記事では、インテル® oneAPI DPC++/C++ コンパイラーを使用して、Windows 上の CPU デバイスで PyTorch Inductor を高速化する方法を説明しました。さらに、Microsoft Visual C++ コンパイラーとインテル® oneAPI DPC++/C++ コンパイラーの両方を使用して、典型的な x86 Windows クライアント・マシンで一般的な PyTorch ベンチマーク (Torchbench、HuggingFace、TIMM* モデル) のパフォーマンス・テストを実施した結果を紹介しました。
コンパイラーのダウンロード
インテル® oneAPI DPC++/C++ コンパイラーは、インテル® oneAPI ソフトウェア開発ツールのページからダウンロードできます。
また、基本ツール、ライブラリー、解析、デバッグ、コード移行ツールの高度なセットとともに、インテル® oneAPI ベース・ツールキットにも含まれています。
LLVM コンパイラー・プロジェクトへの貢献は、GitHub (英語) を参照してください。
関連情報
[1] get-started pytorch-2.0, https://pytorch.org/get-started/pytorch-2.0/ [2] Intel® oneAPI DPC++/C++ Compiler, https://www.xlsoft.com/jp/products/intel/compilers/dpcpp/index.html [3] Get the Intel® oneAPI Base Toolkit, https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html [4] Intel oneAPI DPC++/C++ Compiler Developer Guide and Reference, https://www.intel.com/content/www/us/en/docs/dpcpp-cpp-compiler/developer-guide-reference/2024-2/overview.html法務上の注意書き
性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。性能の測定結果はシステム構成の日付時点のテストに基づいています。また、現在公開中のすべてのセキュリティー・アップデートが適用されているとは限りません。 構成の詳細は、補足資料を参照してください。 絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。実際の費用と結果は異なる場合があります。インテルのテクノロジーを使用するには、対応したハードウェア、ソフトウェア、またはサービスの有効化が必要となる場合があります。
© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
AI に関する免責条項:
AI 機能は、ソフトウェアまたはプラットフォーム・プロバイダーによるソフトウェアの購入、サブスクリプション、または有効化を必要とする場合があり、また、特定の構成要件または互換性要件がある場合もあります。詳細については、http://www.intel.com/AIPC (英語) を参照してください。結果は異なることがあります。
製品および性能に関する情報
1 性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。