次の方法で共有


HB VM と HC VM を使用するためのベスト プラクティス

概要

H シリーズ仮想マシン (VM) は、Azure 上の最新の HPC オファリングです。 HBシリーズのVMは60コアAMD EPYCプロセッサを提供し、明示的な有限要素分析、流体力学、気象モデリングなど、高いメモリ帯域幅要件を持つアプリケーションを実行するために最適化されています。 HC シリーズ VM には 44 コアの Intel Xeon Skylake プロセッサがあり、分子ダイナミクスや暗黙的な有限要素分析など、集中的な CPU 計算を必要とするアプリケーション向けに最適化されています。 HB および HC VM は 100 Gb/秒の EDR InfiniBand を備え、最新の MPI の種類とバージョンをサポートします。 HPC アプリケーションのスケーリング ガイドには、HB および HC VM で HPC アプリケーションをスケーリングする方法の詳細が記載されています。

Azure CycleCloud では、新しい H シリーズ VM がすぐにサポートされますが、最適なエクスペリエンスとパフォーマンスを実現するには、このページのガイドラインとベスト プラクティスに従ってください。

CentOS 7.6 HPC Marketplace イメージ

CentOS 7.6 HPC Marketplace イメージには、InfiniBand インターフェイスを有効にするためのすべてのドライバーと、 /opt にインストールされているすべての一般的な MPI バリアントの事前コンパイル済みバージョンが含まれています。 画像が提供する必要がある正確な内容の詳細については、 このブログ記事を参照してください。

クラスターの作成時に CentOS 7.6 HPC イメージを使用するには、[詳細設定] パラメーターの [カスタム イメージ] ボックスをオンにし、値OpenLogic:CentOS-HPC:7.6:latestを入力します。

CentOS HPC イメージ

古い H16r VM シリーズをサポートし、クラスター ヘッド ノードを同じバージョンの CentOS にロックし続けるために、基本 OS ドロップダウンの既定の "Cycle CentOS 7" イメージでは CentOS 7.4 がデプロイされます。 ほとんどの VM シリーズでは問題ありませんが、HB/HC VM には CentOS 7.6 以降と別の Mellanox ドライバーが必要です。

CycleCloud < 7.7.4 で SElinux を無効にする

既定では、SElinux は /root/home のみをホーム ディレクトリの有効なパスと見なします。 これらのパス以外のホーム ディレクトリを持つユーザーは、SElinux によって、ユーザーのホーム ディレクトリ内の SSH キーペアを使用する SSH をブロックします。 CycleCloud クラスターでは、ユーザー のホーム ディレクトリが /shared/home に作成されます。 7.7.4 より新しい CycleCloud バージョンでは、有効な SElinux homedir コンテキストとして /shared/home パスが自動的に設定されますが、古いバージョンではこれをサポートしていません。 クラスター上のユーザーに対して SSH が正しく機能することを確認するには、クラスター テンプレートで SElinux を無効にする必要があります。

[[node defaults]]
    [[[configuration]]]
    cyclecloud.selinux.policy = permissive

Slurm を使用した MPI ジョブの実行

HB/HC VM で実行されている MPI ジョブは、同じ VM スケールセット (VMSS) で実行する必要があります。 Slurm で実行されている MPI ジョブ用の VM の適切な自動スケール配置を確実に行うには、クラスター テンプレートで次の属性を設定してください。

[[nodearray execute]]
Azure.SingleScaleset = true
Azure.MaxScalesetSize = 300
Azure.Overprovision = true

OpenMPI および MPICH で使用する pkey の取得

一部の MPI バリアントでは、ジョブの実行時に InfiniBand PKEY を指定する必要があります。 次の Bash 関数を使用して PKEY を決定できます。

get_ib_pkey()
{
    key0=$(cat /sys/class/infiniband/mlx5_0/ports/1/pkeys/0)
    key1=$(cat /sys/class/infiniband/mlx5_0/ports/1/pkeys/1)

    if [ $(($key0 - $key1)) -gt 0 ]; then
        export IB_PKEY=$key0
    else
        export IB_PKEY=$key1
    fi

    export UCX_IB_PKEY=$(printf '0x%04x' "$(( $IB_PKEY & 0x0FFF ))")
}