Azure で HPC Pack Linux RDMA クラスターを作成する
ARM テンプレートを使用してクラスターをデプロイする
Linux ワークロード用の単一ヘッド ノード クラスターを使用してクラスターをデプロイする
クラスターが
Compute Node Image
RDMA 対応になるように、サフィックスHPC
Compute Node VM Size
を持つ ものにする必要があり、H シリーズでは またはStandard_H16mr
である必要Standard_H16r
があることに注意してください。
Intel MPI ベンチマーク Pingpong を実行する
ヘッド ノード hpc6267 にログオンし、ノードをオンラインにする
Linux コンピューティング ノード間で MPI Pingpong を実行するジョブを送信する
job submit /numnodes:2 "source /opt/intel/impi/`ls /opt/intel/impi`/bin64/mpivars.sh && mpirun -env I_MPI_FABRICS=shm:dapl -env I_MPI_DAPL_PROVIDER=ofa-v2-ib0 -env I_MPI_DYNAMIC_CONNECTION=0 -env I_MPI_FALLBACK_DEVICE=0 -f $CCP_MPI_HOSTFILE -ppn 1 IMB-MPI1 pingpong | tail -n30"
MPI タスクのホスト ファイルまたはマシン ファイルが自動的に生成されます
$CCP_MPI_HOSTFILE
環境変数は、タスク コマンドでファイル名を取得するために使用できます$CCP_MPI_HOSTFILE_FORMAT
環境変数は、ホスト ファイルまたはマシン ファイルの形式を指定するように設定できます既定のホスト ファイル形式は次のとおりです。
nodename1 nodename2 … nodenameN
の場合
$CCP_MPI_HOSTFILE_FORMAT=1
、形式は次のようになります。nodename1:4 nodename2:4 … nodenameN:4
の場合
$CCP_MPI_HOSTFILE_FORMAT=2
、形式は次のようになります。nodename1 slots=4 nodename2 slots=4 … nodenameN slots=4
の場合
$CCP_MPI_HOSTFILE_FORMAT=3
、形式は次のようになります。nodename1 4 nodename2 4 … nodenameN 4
HPC Pack 2016 クラスター マネージャーでタスクの結果を確認する
OpenFOAM ワークロードを実行する
Intel MPI をダウンロードしてインストールする
Intel MPI は Linux イメージ
CentOS_7.4_HPC
に既にインストールされていますが、OpenFOAM をビルドするには新しいバージョンが必要です。これは Intel MPI ライブラリからダウンロードできますclusrun を使用して Intel MPI をダウンロードしてサイレント インストールする
clusrun /nodegroup:LinuxNodes /interleaved "wget https://registrationcenter-download.intel.com/akdlm/irc_nas/tec/13063/l_mpi_2018.3.222.tgz && tar -zxvf l_mpi_2018.3.222.tgz && sed -i -e 's/ACCEPT_EULA=decline/ACCEPT_EULA=accept/g' ./l_mpi_2018.3.222/silent.cfg && ./l_mpi_2018.3.222/install.sh --silent ./l_mpi_2018.3.222/silent.cfg"
OpenFOAM をダウンロードしてコンパイルする
OpenFOAM パッケージは、OpenFOAM ダウンロード ページからダウンロードできます
OpenFOAM をビルドする前に、Linux コンピューティング ノード (CentOS) に と をインストール
zlib-devel
Development Tools
し、OpenFOAM 環境設定ファイルで 変数WM_MPLIB
の値を からSYSTEMOPENMPI
にINTELMPI
変更し、Intel MPI 環境設定ファイルbashrc
と OpenFOAM 環境設定ファイルmpivars.sh
をソースする必要があります。bashrc
必要に応じて、環境変数
WM_NCOMPPROCS
を設定して、OpenFoam のコンパイルに使用するプロセッサの数を指定できます。これにより、コンパイルが高速化される可能性がありますclusrun を使用して上記のすべてを達成する
clusrun /nodegroup:LinuxNodes /interleaved "yum install -y zlib-devel && yum groupinstall -y 'Development Tools' && wget https://sourceforge.net/projects/openfoamplus/files/v1806/ThirdParty-v1806.tgz && wget https://sourceforge.net/projects/openfoamplus/files/v1806/OpenFOAM-v1806.tgz && mkdir /opt/OpenFOAM && tar -xzf OpenFOAM-v1806.tgz -C /opt/OpenFOAM && tar -xzf ThirdParty-v1806.tgz -C /opt/OpenFOAM && cd /opt/OpenFOAM/OpenFOAM-v1806/ && sed -i -e 's/WM_MPLIB=SYSTEMOPENMPI/WM_MPLIB=INTELMPI/g' ./etc/bashrc && source /opt/intel/impi/2018.3.222/bin64/mpivars.sh && source ./etc/bashrc && export WM_NCOMPPROCS=$((`grep -c ^processor /proc/cpuinfo`-1)) && ./Allwmake"
クラスターで共有を作成する
ヘッド ノードに という名前
openfoam
のフォルダーを作成し、アクセス許可を持つ フォルダーとRead/Write
共有しますEveryone
ディレクトリ
/openfoam
を作成し、clusrun を使用して Linux コンピューティング ノードに共有をマウントするclusrun /nodegroup:LinuxNodes "mkdir /openfoam && mount -t cifs //hpc6267/openfoam /openfoam -o vers=2.1,username=hpcadmin,dir_mode=0777,file_mode=0777,password='********'"
コピーするときは、上記のコードのユーザー名とパスワードを忘れずに置き換えてください。
MPI タスクを実行するための環境設定ファイルを準備する
コードを使用して共有にファイル
settings.sh
を作成します。#!/bin/bash # impi source /opt/intel/impi/2018.3.222/bin64/mpivars.sh export MPI_ROOT=$I_MPI_ROOT export I_MPI_FABRICS=shm:dapl export I_MPI_DAPL_PROVIDER=ofa-v2-ib0 export I_MPI_DYNAMIC_CONNECTION=0 # openfoam source /opt/OpenFOAM/OpenFOAM-v1806/etc/bashrc
ファイルがヘッド ノードで編集されている場合は、行末に注意してください。これは、
\n
\r\n
OpenFOAM ジョブのサンプル データを準備する
OpenFOAM tutorials ディレクトリのサンプル
sloshingTank3D
を共有にコピーするopenfoam
必要に応じて、 の値
deltaT
を from から0.05
に0.5
変更し、 のwriteInterval
値を から0.05
に/openfoam/sloshingTank3D/system/controlDict
変更して0.5
、データ処理を高速化します使用するコア番号の観点からファイル
/openfoam/sloshingTank3D/system/decomposeParDict
を変更します。詳細については、「OpenFOAM ユーザー ガイド: 3.4 アプリケーションを並列で実行する」を参照してください/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: v1806 | | \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; object decomposeParDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // numberOfSubdomains 32; method hierarchical; coeffs { n (1 1 32); //delta 0.001; // default=0.001 //order xyz; // default=xzy } distributed no; roots ( ); // ************************************************************************* //
でサンプル データを準備します
/openfoam/sloshingTank3D
。 以下のコードは、Linux コンピューティング ノードで手動で実行するときに使用できます。cd /openfoam/sloshingTank3D source /openfoam/settings.sh source /home/hpcadmin/OpenFOAM/OpenFOAM-v1806/bin/tools/RunFunctions m4 ./system/blockMeshDict.m4 > ./system/blockMeshDict runApplication blockMesh cp ./0/alpha.water.orig ./0/alpha.water runApplication setFields
上記のすべてを達成するためにジョブを送信する
set CORE_NUMBER=32 job submit "cp -r /opt/OpenFOAM/OpenFOAM-v1806/tutorials/multiphase/interFoam/laminar/sloshingTank3D /openfoam/ && sed -i 's/deltaT 0.05;/deltaT 0.5;/g' /openfoam/sloshingTank3D/system/controlDict && sed -i 's/writeInterval 0.05;/writeInterval 0.5;/g' /openfoam/sloshingTank3D/system/controlDict && sed -i 's/numberOfSubdomains 16;/numberOfSubdomains %CORE_NUMBER%;/g' /openfoam/sloshingTank3D/system/decomposeParDict && sed -i 's/n (4 2 2);/n (1 1 %CORE_NUMBER%);/g' /openfoam/sloshingTank3D/system/decomposeParDict && cd /openfoam/sloshingTank3D/ && m4 ./system/blockMeshDict.m4 > ./system/blockMeshDict && source /opt/OpenFOAM/OpenFOAM-v1806/bin/tools/RunFunctions && source /opt/OpenFOAM/OpenFOAM-v1806/etc/bashrc && runApplication blockMesh && cp ./0/alpha.water.orig ./0/alpha.water && runApplication setFields"
日付を処理する MPI タスクを含むジョブを作成する
ジョブを作成し、依存する 4 つのタスクを追加する
タスク名 依存タスク コア コマンド 環境変数 task1 該当なし 1 source /openfoam/settings.sh && decomposePar -force 該当なし task2 task1 32 source /openfoam/settings.sh && mpirun -machinefile $CCP_MPI_HOSTFILE interFoam -parallel CCP_MPI_HOSTFILE_FORMAT=1 task3 task2 1 source /openfoam/settings.sh && 再構築Par 該当なし task4 task3 32 source /openfoam/settings.sh && mpirun -machinefile $CCP_MPI_HOSTFILE foamToEnsight -parallel CCP_MPI_HOSTFILE_FORMAT=1 作業ディレクトリを に
/openfoam/sloshingTank3D
設定し、標準出力を各タスクの に${CCP_JOBID}.${CCP_TASKID}.log
設定しますコマンドを使用して上記のすべてを実現します。
set CORE_NUMBER=32 job new job add !! /workdir:/openfoam/sloshingTank3D /name:task1 /stdout:${CCP_JOBID}.${CCP_TASKID}.log "source /openfoam/settings.sh && decomposePar -force" job add !! /workdir:/openfoam/sloshingTank3D /name:task2 /stdout:${CCP_JOBID}.${CCP_TASKID}.log /depend:task1 /numcores:%CORE_NUMBER% /env:CCP_MPI_HOSTFILE_FORMAT=1 "source /openfoam/settings.sh && mpirun -machinefile $CCP_MPI_HOSTFILE interFoam -parallel" job add !! /workdir:/openfoam/sloshingTank3D /name:task3 /stdout:${CCP_JOBID}.${CCP_TASKID}.log /depend:task2 "source /openfoam/settings.sh && reconstructPar" job add !! /workdir:/openfoam/sloshingTank3D /name:task4 /stdout:${CCP_JOBID}.${CCP_TASKID}.log /depend:task3 /numcores:%CORE_NUMBER% /env:CCP_MPI_HOSTFILE_FORMAT=1 "source /openfoam/settings.sh && mpirun -machinefile $CCP_MPI_HOSTFILE foamToEnsight -parallel" job submit /id:!!
結果を取得する
HPC Pack 2016 クラスター マネージャーでジョブの結果を確認する
サンプル sloshingTank3D の結果は、Ensight で表示できるファイル
\\hpc6267\openfoam\sloshingTank3D\EnSight\sloshingTank3D.case
として生成されます。