次の方法で共有


Azure HPC および AI 仮想マシンのパフォーマンスの最適化

ハイ パフォーマンス コンピューティング (HPC) と人工知能 (AI) の領域では、仮想マシン (VM) のパフォーマンスを最適化することが重要です。 Azure には、HPC ワークロードと AI ワークロードがプラットフォーム上で効率的に実行されるようにするための一連のツールと手法が用意されています。 この最適化の 2 つの重要な側面は、プロセスとスレッドのピン留めと、MPI プロセスの最適な配置です。

この記事では、Azure VM 上の HPC ワークロードと AI ワークロードのパフォーマンスを向上させる方法に関する詳細なガイダンスを提供します。 プロセスとスレッドのピン留め、MPI プロセスの最適な配置、およびこれらの最適化を実現するための checkapppinning.py などの Azure のツールの使用が重要であることを目的としています。 また、AZURE の HPC 専門 VM で HPC アプリケーションと AI アプリケーションを効率的かつ効果的に実行できるように、MPI プロセスの配置、パフォーマンス メトリックの収集、およびさまざまな MPI 実装の推奨事項に関する戦略についても説明します。

Azure HPC/AI VM のプロセス/スレッドの最適なピン留めを支援するツール

HPC アプリケーションのパフォーマンスを最大化するには、すべてのソケット、NUMA ドメイン、L3 キャッシュを使用して、プロセスとスレッドを VM 全体に均等に分散することが不可欠です。 この分散により、メモリ帯域幅と浮動小数点パフォーマンスが最適化されます。 ハイブリッド並列アプリケーションでは、各プロセスに複数のスレッドがあります。 データの共有と再利用を最大化するには、プロセスとそのスレッドを同じ L3 キャッシュに保持することをお勧めします。

Azure には、このプロセスに役立つ Check App Pinning というツールが用意されています。 VM CPU トポロジの表示、並列アプリケーション プロセスとスレッドの実行場所の確認、最適な MPI および Slurm スケジューラ プロセスのアフィニティ引数の生成に役立ちます。 このツールを使用して、HPC/AI アプリケーションが Azure HPC 専門 VM で最適な方法で実行されていることを確認します。

例: ツールの使用

  • VM CPU トポロジの表示
# python check_app_pinning.py --view-topology
  • プロセスとスレッドの配置を確認する
# python check_app_pinning.py --check-placement
  • アフィニティ引数を生成する
# python check_app_pinning.py --generate-affinity

このツールを利用することで、Azure 上の HPC ワークロードと AI ワークロードのパフォーマンスを向上させ、アプリケーションが効率的かつ効果的に実行されるようにすることができます。

Azure HB シリーズ VM の最適な MPI プロセス配置

MPI アプリケーションの場合、プロセスの最適なピン留めは、特にサブスクリプションが不足しているシステムのパフォーマンスが大幅に向上する可能性があります。 AMDs Chiplet 設計の導入により、このプロセスは複雑になります。 チップレット設計では、AMDは小さなCPUを一緒に統合して、64コアのソケットを提供します。 パフォーマンスを最大化するには、コアあたりの L3 キャッシュとメモリ帯域幅の量のバランスを取る必要があります。

HB60rs や HBv2 などの Azure HB シリーズ VM には、複数の NUMA ドメインとコアが付属しています。 たとえば、HB60rs VM には 60 個の AMD ナポリ コアがあり、各ソケットには 8 つの NUMA ドメインが含まれています。 VM のサブスクライブ中は、コア間で L3 キャッシュとメモリ帯域幅のバランスを取る必要があります。 これは、ノードごとに適切なコア数を選択し、特定の MPI プロセス配置戦略を使用することで実現できます。

例: MPI プロセスの配置

  • ノードあたりのコア数の選択
# mpirun -np 60 --map-by ppr:8:node --bind-to core my_mpi_application
  • NUMA ドメイン間で MPI プロセスを均等に分散する
# mpirun -np 60 --map-by ppr:8:node:pe=8 --bind-to numa my_mpi_application

パフォーマンス メトリックの収集

パフォーマンス メトリックの収集は、HPC ワークロードと AI ワークロードのパフォーマンスを理解して最適化するために不可欠です。 Azure には、これらのメトリックを収集するためのツールと方法がいくつか用意されています。

例: パフォーマンス メトリックの収集

  • Azure Monitor の使用:

    • CPU 使用率、メモリ使用量、ネットワーク帯域幅などのメトリックを収集するように Azure Monitor を設定します。
    • Log Analytics ワークスペースを作成し、メトリックをワークスペースに送信するように診断設定を構成します。
  • PerfCollect の使用:

    • VM に PerfCollect をインストールする
    # wget https://aka.ms/perfcollect -O perfcollect
    # chmod +x perfcollect
    # sudo ./perfcollect install
    
    • メトリックの収集を開始する
    # sudo ./perfcollect start mysession
    
    • メトリックの収集を停止し、レポートを生成する
    # sudo ./perfcollect stop mysession
    

MPI の実装

MPI の実装によって、Azure HPC/AI VM のパフォーマンス特性が異なる場合があります。 一般的な MPI 実装には、OpenMPI、MPICH、Intel MPI が含まれます。 各実装には長所があり、特定のワークロードと VM の構成に基づいて異なる方法で実行される場合があります。

MPI のセットアップとプロセスのピン留めに関する推奨事項

  • OpenMPI
    • --bind-to オプションと --map-by オプションを使用して、プロセスの配置を制御する例を次に示します。
    # mpirun -np 60 --bind-to core --map-by ppr:8:node my_mpi_application
    
  • MPICH
    • HYDRA_BIND環境変数とHYDRA_RANK環境変数を使用して、プロセス配置の例を制御します。
    # export HYDRA_BIND=core
    # export HYDRA_RANK=8
    # mpiexec -np 60 my_mpi_application
    
  • Intel MPI
    • プロセスの配置を制御するには、I_MPI_PINとI_MPI_PIN_DOMAIN環境変数を使用します。 例:
    # export I_MPI_PIN=1
    # export I_MPI_PIN_DOMAIN=socket
    # mpirun -np 60 my_mpi_application
    

これらの推奨事項に従い、Azure によって提供されるツールと手法を使用することで、HPC ワークロードと AI ワークロードのパフォーマンスを最適化し、Azure の HPC 専門 VM での効率的で効果的な実行を保証できます。

リソース