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