6.3.2. Spackの環境構築方法
ユーザ領域へのSpackのインストール方法#
本章ではユーザ領域にSpackをインストールする方法を記述します。また、インストールしたspackを使ってosu-micro-benchmarksを例にインストール及び実行方法を紹介します。
Spackのダウンロード#
-
spackをインストールするディレクトリを設定します。以下は${HOME}/spack-local配下にspackをインストールする例となります。
$ SPACKDIR=${HOME}/spack-local $ mkdir -p ${SPACKDIR}
-
spackをダウンロードし、先ほど作成したディレクトリで展開します。
$ cd ${SPACKDIR} $ curl -RLO https://github.com/spack/spack/releases/download/v0.18.0/spack-0.18.0.tar.gz $ tar xf spack-0.18.0.tar.gz
-
spackの環境設定用のスクリプトを実行し、spackのバージョンが「0.18.0」と表示されることを確認します。
$ . ${SPACKDIR}/spack-0.18.0/share/spack/setup-env.sh $ spack --version
x86システム用のSpackの環境設定#
-
「Fujitsu クラウドサービス HPC」 にインストールされているSpackの環境設定用ファイル(compilers.yamlとpackage.yaml)をコピーします。
$ cp -rp /fefs1/app/spack/spack-0.18.0/etc/spack/compilers.yaml ${SPACK_ROOT}/etc/spack/ $ cp -rp /fefs1/app/spack/spack-0.18.0/etc/spack/packages.yaml ${SPACK_ROOT}/etc/spack/
-
以下のコマンドでfj、gcc、intel、oneapiが表示されることを確認します。
$ spack compilers
-
spackミラーディレクトリを設定します。
$ mkdir ${SPACK_ROOT}/spack-mirror $ spack mirror add --scope site local_filesystem 'file://$spack/spack-mirror' $ spack mirror list
-
以下のコマンドでBootstrapを実行します。
$ mkdir ${SPACK_ROOT}/spack-bootstrap $ spack config --scope site add 'bootstrap:root:$spack/spack-bootstrap' $ spack spec zlib $ spack --bootstrap find
ARMシステム用のSpackの環境設定#
Warning
ARMシステムのみを使用する場合も、前節に記載の「x86システム用のSpackの環境設定」を必ず実施してください。前節の手順を省略するとエラーになります。
-
事前にログインノード上でARMシステム用のBootstrapをダウンロードしておきます。
$ mkdir ${SPACK_ROOT}/spack-bootstrap-mirror $ spack bootstrap mirror --binary-packages ${SPACK_ROOT}/spack-bootstrap-mirror
-
ARM計算ノード上でSpackの環境設定をするためのJOBスクリプトを用意し、ARM計算ノードに投入します。
$ vi spack_setup_arm.sh $ cat spack_setup_arm.sh #!/bin/sh -xe #PJM -L "rscunit=rscunit_ft01" #PJM -L "rscgrp=arm-small" #PJM -L "node=1" #PJM -L "elapse=1:00:00" #PJM -j SPACKDIR=${HOME}/spack-local . ${SPACKDIR}/spack-0.18.0/share/spack/setup-env.sh spack compilers # ARMシステム用のBootstrap実行 spack bootstrap add --scope site --trust local-sources '$spack/spack-bootstrap-mirror/metadata/sources' spack bootstrap add --scope site --trust local-binaries '$spack/spack-bootstrap-mirror/metadata/binaries' spack spec zlib spack --bootstrap find $ pjsub spack_setup_arm.sh
-
pjstatコマンドでジョブが完了していることが確認できたら、ジョブ実行時の標準出力ファイルに以下のログが含まれていることを確認します。
-- linux-centos7-aarch64 / gcc@10.2.1 --------------------------- clingo-bootstrap@spack python@3.6 -- linux-centos7-x86_64 / gcc@10.2.1 ---------------------------- clingo-bootstrap@spack python@3.6
プライベートインスタンスからパブリックインスタンスを参照するための手順#
- ここまでの手順で構築したプライベートインスタンスから 「Fujitsu クラウドサービス HPC」 にインストール済みのパブリックインスタンスを参照可能とする場合は、以下の手順でupstreams.yamlを作成してください。
$ vi ${HOME}/.spack/upstreams.yaml upstreams: spack-public-instance: install_tree: /fefs1/app/spack/spack-0.18.0/opt/spack $ . ${SPACKDIR}/spack-0.18.0/share/spack/setup-env.sh $ spack find -x #「Fujitsu クラウドサービス HPC」にインストールされているOSSの情報も出力される
Spackを用いたアプリのインストール例#
前節までの手順で構築したSpackを使ってアプリをインストールする例として、x86システム用にosu-micro-benchmarksをインストールする手順を示します。
-
ログインノード上で、以下のコマンドを実行し、インストールに必要なファイルを事前にダウンロードします。
$ SPACKDIR=${HOME}/spack-local $ . ${SPACKDIR}/spack-0.18.0/share/spack/setup-env.sh $ spack mirror create -d ${SPACK_ROOT}/spack-mirror -D osu-micro-benchmarks
-
x86計算ノード上でosu-micro-benchmarksをインストールするためのJOBスクリプトを用意し、x86計算ノードに投入します。
$ vi install_osu_x86.sh $ cat install_osu_x86.sh #!/bin/sh -x #PJM -L "rscunit=rscunit_pg01" #PJM -L "rscgrp=x86-small" #PJM -L "elapse=1:00:00" #PJM -j SPACKDIR=${HOME}/spack-local . ${SPACKDIR}/spack-0.18.0/share/spack/setup-env.sh spack clean -a spack spec osu-micro-benchmarks %oneapi spack install -j 8 osu-micro-benchmarks %oneapi $ pjsub install_osu_x86.sh
-
pjstatコマンドでジョブが完了していることが確認できたら、出力ファイルからエラーがなくインストールが完了したことを確認します。
Spackでインストールしたアプリの実行例#
前節でインストール例を示したosu-micro-benchmarksを実行して計算ノード間のレイテンシーやバンド幅等を測定する手順を示します。
-
x86計算ノード上でosu-micro-benchmarksを実行するためのJOBスクリプトを用意し、x86計算ノードに投入します。
$ vi exec_osu_x86.sh $ cat exec_osu_x86.sh #!/bin/sh -x #PJM -L "elapse=00:10:00" #PJM -L "node=2" #PJM -L "rscunit=rscunit_pg01" #PJM -L "rscgrp=x86-medium" #PJM -j SPACKDIR=${HOME}/spack-local . ${SPACKDIR}/spack-0.18.0/share/spack/setup-env.sh spack load osu-micro-benchmarks@5.9 %oneapi export I_MPI_PERHOST=1 export I_MPI_HYDRA_BOOTSTRAP=rsh export I_MPI_HYDRA_BOOTSTRAP_EXEC=/bin/pjrsh export I_MPI_HYDRA_HOST_FILE="${PJM_O_NODEINF}" export I_MPI_DEBUG=5 mpirun osu_latency mpirun osu_bw $ pjsub exec_osu_x86.sh
-
pjstatコマンドでジョブが完了していることが確認できたら、出力ファイルからレイテンシーやバンド幅の性能を確認します。
Reference
- 以下はosu_latencyを実行した出力例です。
# OSU MPI Latency Test v5.9 # Size Latency (us) 0 1.22 1 1.22 2 1.22 4 1.23 8 1.23 16 1.23 32 1.26 64 1.33 128 1.37 256 1.66 512 1.66 1024 1.80 2048 2.33 4096 2.88 8192 3.41 16384 5.86 32768 7.10 65536 9.82 131072 15.12 262144 25.74 524288 47.02 1048576 89.97 2097152 174.99 4194304 345.52
- 以下はosu_bwを実行した出力例です。
# OSU MPI Bandwidth Test v5.9 # Size Bandwidth (MB/s) 1 6.43 2 12.95 4 25.66 8 50.31 16 100.70 32 197.97 64 375.98 128 745.13 256 1402.81 512 2611.98 1024 4453.53 2048 7346.75 4096 9848.35 8192 10952.64 16384 11242.73 32768 11787.94 65536 12058.40 131072 12199.68 262144 12272.36 524288 12309.05 1048576 12327.01 2097152 12336.32 4194304 12341.00
ユーザ領域からインストール済みSpackの削除方法#
ユーザ領域にインストールしたSpackを削除する際は本節に記載の手順でSpack環境を削除します。
- ${SPACKDIR}配下にSpackをインストールしている場合、以下の通りそのディレクトリを削除します。
$ rm -rf ${SPACKDIR}/spack-0.18.0
- ${HOME}配下の.spackのキャッシュファイルも削除します。
$ rm -rf ${HOME}/.spack