この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® VTune™ Profiler Performance Analysis Cookbook」の「Profiling High Bandwidth Memory Performance on Intel® Xeon® CPU Max Series」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
インテル® VTune™ プロファイラーを使用して、高帯域幅メモリー (HBM) を利用するハイパフォーマンス・コンピューティング (HPC) および人工知能 (AI) アプリケーションのメモリー依存のワークロードをプロファイルできます。
HPC および AI アプリケーションが複雑になるにつれて、メモリー依存のワークロードでは、メモリー帯域幅が大きな課題になります。インテル® Xeon® CPU マックス・シリーズに搭載されている高帯域幅メモリー (HBM) テクノロジーは、帯域幅の課題を解決するのに役立ちます。この記事では、インテル® VTune™ プロファイラーを使用して、メモリー依存のアプリケーションにおける HBM パフォーマンスのプロファイル方法を説明します。
コンテンツ・エキスパート: Vishnu Naikawadi、Min Yeol Lim、Alexander Antonov
この記事では、インテル® VTune™ プロファイラーを使用して、HBM メモリーを搭載したシステム上でメモリー依存のアプリケーションをプロファイルします。インテル® VTune™ プロファイラーは、ワークロードによる HBM メモリーの利用状況を理解するのに役立つ HBM 固有のパフォーマンス・メトリックを示します。この情報を基に、HBM メモリーに関連したワークロードのパフォーマンスを解析できます。
HBM のメモリーモード
インテル® Xeon® CPU マックス・シリーズは、3 つの HBM メモリーモードを提供します。
HBM のみ | HBM フラットモード | HBM キャッシュモード | |
---|---|---|---|
メモリー構成 | HBM メモリー。DRAM なし。 |
HBM と DRAM を備えたフラットメモリー領域 |
HBM キャッシュ DRAM |
ワークロード・サイズ | 64GB 以下 | 64GB 以上 | 64GB 以上 |
コード変更 | コード変更なし。 | パフォーマンスの最適化にはコード変更が必要になることがあります。 | コード変更なし。 |
使用法 | システムは HBM のみで起動して動作します。 | 大容量メモリーを必要とするアプリケーションに柔軟性を提供します。 | HBM のみと HBM フラットモードの組み合わせ。アプリケーション全体が HBM キャッシュに収まる可能性があります。このモードは、キャッシュとメモリーの境界線を曖昧にします。 |
HBM モードの切り替え
DRAM を搭載しない場合、プロセッサーは [HBM Only (HBM のみ)] モードで動作します。このモードでは、HBM は OS とすべてのアプリケーションで利用できる唯一のメモリーです。OS は搭載されている HBM のすべての領域にアクセスできますが、アプリケーションは OS によって公開された領域にしかアクセスできません。
DRAM を搭載する場合、BIOS のメモリーモードの設定を変更することで、異なる HBM メモリーモードを選択できます。
[EDK II] メニューを開きます。
[Socket Configuration] オプションで [Memory Map] を選択します。
[Volatile Memory] を開きます。
注: BIOS 設定を変更する UI は、システムで動作する BIOS によって異なります。
HBM モードを変更します。
[HBM Flat (HBM フラット)] モードを選択するには、1LM (1 レベルモード) を選択します。このモードでは、ソフトウェアは HBM および DRAM メモリーのみ参照ができます。各メモリーは個別のアドレス空間 (NUMA ノード) として使用できます。
[HBM Cache (HBM キャッシュ)] モードを選択するには、2LM (2 レベルモード) を選択します。このモードでは、DRAM アドレス空間のみ参照できます。HBM は、DRAM の透過的なメモリー・サイド・キャッシュとして機能します。
BIOS によっては、追加の変更が必要な場合があります。メモリーモードの切り替えに関する詳細は、「インテル® Xeon® CPU マックス・シリーズの設定およびチューニング・ガイド」を参照してください。
使用するもの
以下は、このパフォーマンス解析シナリオで使用するハードウェアとソフトウェアのリストです。
システム構成
この記事では、以下のシステム構成を使用します。
- 2 ソケット、224 論理 CPU、インテル® ハイパースレッディング・テクノロジー有効
- 16 x 32GB DRAM DIMM (ソケットごとに 8 DIMM)
- HBM フラットモード、SNC4 有効
以下の表に示すように、この記事で使用するシステムは、ソケットあたり 8 NUMA ノードを搭載しています。
ソケット 0 | ソケット 1 | |
---|---|---|
DRAM |
ノード 0、1、2、3 |
ノード 4、5、6、7 |
HBM |
ノード 8、9、10、11 |
ノード 12、13、14、15 |
メモリーアクセス解析を実行する
この記事では、インテル® VTune™ プロファイラーを使用して、STREAM ベンチマークのメモリーアクセス解析を行います。インテル® VTune™ プロファイラーのスタンドアロン・アプリケーションをターゲット・システムで実行するか、インテル® VTune™ プロファイラー・サーバーを実行してウェブブラウザーから GUI にアクセスできます。
この例では、インテル® VTune™ プロファイラー・サーバーを使用します。サーバーをセットアップするには、ターゲット・プラットフォームで次のコマンドを実行します。
/opt/intel/oneapi/vtune/latest/bin64/vtune-backend --web-port <port_id> --allow-remote-access --data-directory /home/stream/results --enable-server-profiling
説明:
- –web-port は、ウェブサーバー UI およびデータ API の HTTP/HTTPS ポートです。
- –allow-remote-access は、ウェブブラウザーを介したリモートアクセスを有効にします。
- –data-directory は、プロジェクトと結果を保存するルート・ディレクトリーです。
- –enable-server-profiling は、プロファイル・ターゲットとしてホストサーバーを選択できるようにします。
このコマンドはトークンと URL を返します。これで、解析を開始する準備が整いました。
この記事では、インテル® VTune™ プロファイラーが HBM NUMA ノードのみを使用して、STREAM アプリケーションをプロファイルする方法を説明します。この特定のシステム構成の場合、解析では NUMA ノード 8 ~ 15 が使用されます。
コマンドプロンプトで返された URL を開きます。
インテル® VTune™ プロファイラー・サーバーを使用するためのパスワードを設定します。
[Welcome (ようこそ)] 画面から、新しいプロジェクトを作成します。
[Configure Analysis (解析の設定)] ウィンドウで以下のオプションを設定します。
ペイン オプション 設定 WHERE (どこを) – インテル® VTune™ プロファイラー・サーバー WHAT (何を) ターゲット Launch Application (アプリケーションを起動) アプリケーション numactl アプリケーションのパス 注: 実際にプロファイルされるアプリケーションは STREAM ですが、STREAM ベンチマークの NUMA アフィニティーを設定するため numactl ツールをアプリケーションとして指定し、代わりに [Application parameters (アプリケーション・パラメーター)] フィールドに STREAM ベンチマークを入力します。
Application parameters (アプリケーション・パラメーター) HBM NUMA ノード 8~15 STREAM ベンチマークのパス
Working directory (作業ディレクトリー) アプリケーション・ディレクトリーのパス HOW (どのように) Analysis type (解析タイプ) Memory Access Analysis (メモリーアクセス解析) -
[Start (開始)] をクリックして、解析を開始します。
このデフォルト構成では、インテル® VTune™ プロファイラーは DRAM 帯域幅に加えて HBM 帯域幅のデータも収集します。追加の設定は必要ありません。
注: コマンドラインからメモリーアクセス解析 (英語) を実行するには、次のコマンドを使用します。
vtune -collect memory-access --app-working-dir=/home/stream -- /usr/bin/numactl -m “8-15” /home/stream/stream_app
結果を確認する
データ収集が完了し、インテル® VTune™ プロファイラーが結果を表示したら、[Summary (サマリー)] ウィンドウを開いて実行に関する一般的な情報を確認します。情報はいくつかのセクションに分類されています。
Elapsed Time (経過時間)
このセクションには、次の統計が含まれます。
パイプライン・スロットまたはクロック数 (英語) ベースのアプリケーション実行時間
Total Elapsed Time (合計経過時間) – アイドル時間を含みます。
CPU Time (CPU 時間) – すべてのスレッドの CPU 時間と、アプリケーションが (GUI、CLI、またはユーザー API からのコマンドによって) 一時停止された合計時間を示す Paused Time (一時停止時間) の合計です。
HBM Bound (HBM 依存) – ロードによる高帯域幅メモリー (HBM) アクセスによって CPU がストールした頻度を推定します。このメトリックは、CPU サイクルまたはクロック数で測定されます。選択したワークロードによっては、HBM のみおよび HBM フラットモードでのデータ収集では、このメトリックの精度が低くなることがあります。
HBM Bandwidth Bound (HBM 帯域幅依存) – HBM 帯域幅を使用した Elapsed Time (経過時間) の割合を示します。このメトリックは経過時間で測定されます。
Platform Diagram (プラットフォーム図)
次に、Platform Diagram (プラットフォーム図) (英語) で以下の情報を確認します。
- システムトポロジー
- 各パッケージの平均 DRAM 帯域幅と平均 HBM 帯域幅
- インテル® ウルトラ・パス・インターコネクト (インテル® UPI) のクロスソケット・リンクと物理コアの利用率メトリック
最適ではないアプリケーション・トポロジーでは、クロスソケット・トラフィックが発生する可能性があり、その結果、アプリケーション全体のパフォーマンスが制限される可能性があります。
Bandwidth Utilization (帯域幅利用率)
このセクションでは、異なるドメインの帯域幅利用率を確認します。この例では、システムは DRAM、UPI、および HBM ドメインを使用しています。
注: DRAM および HBM ドメインのソケットごとの帯域幅情報を確認できます。
システム全体の HBM 利用率を表示するには、[Bandwidth Domain (帯域幅ドメイン)] プルダウンメニューで HBM, GB/sec を選択します。この情報は、帯域幅利用率 (GB/秒) と各帯域幅利用率グループの合計経過時間 (秒) のヒストグラムで表示されます。
この例では、HBM 利用率が高く、実行期間の大部分で 1200GB/秒を超えています。これは、STREAM ベンチマークがメモリー帯域幅を最大限に利用するように設計されているためです。
注: HPC パフォーマンス特性解析 (英語) および入出力解析 (英語) でも同じ帯域幅情報を確認できます。その場合、解析を実行する前に、必ず [Analyze memory bandwidth (メモリー帯域幅の解析)] オプションをオンにしてください。
タイムライン
最後に、[Bottom-up (ボトムアップ)] ウィンドウに切り替えてタイムラインを確認します。タイムラインでは、次の帯域幅を経時的に調査できます。
- DRAM 帯域幅 (チャネルごとに分類)
- HBM 帯域幅 (パッケージごとに分類)
- インテル® UPI リンク (リンクごとに分類)
この情報から、不必要な UPI または DRAM 帯域幅につながる可能性のある構成ミスなどの潜在的な問題を特定します。
グラフ上にマウスをホバーすると、選択した部分の結果が表示され、その時点の帯域幅を確認できます。
[Grouping (グループ化)] ペインで [Bandwidth Domain/Bandwidth Utilization/Type/Function/Call Stack (帯域幅ドメイン/帯域幅利用率/タイプ/関数/コールスタック)] グループ化を選択します。このグループを使用して、HBM 帯域幅ドメインで利用率の高い関数を特定します。
アプリケーションのパフォーマンスをさらに最適化するには、次の解析を実行します。
- メモリーアクセス解析 (英語)
- 入出力解析 (英語)
これらの解析手順に従って、ほかのパフォーマンス問題を特定します。
この記事では、HBM フラットモードで STREAM アプリケーションを実行する場合のパフォーマンス測定方法を説明しました。HBM キャッシュモードと HBM のみモードのパフォーマンスを比較するには、HBM モードを切り替えて (英語) パフォーマンス分析を繰り返します。そして、経過時間が最も短いモードを見つけます。DRAM と HBM の帯域幅を比較して、より高い全体の帯域幅を探すこともできます。