Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Singularity/Spack どこでもだれでもHPC

Singularity/Spack どこでもだれでもHPC

HPCを使うユーザーにとって、多彩なアプリケーションとその実行環境を保持するため、必須技能となったSingularity。アプリケーションビルドの準備と検証の労力を最小化できる Spack。それぞれの特徴を簡単に解説し、AWS の最新CPU Graviton4 を用いた r8g インスタンスで実際に動かしてみた。

Kenji Morimoto

September 17, 2024
Tweet

Other Decks in Technology

Transcript

  1. ©︎2020 - Pacific Teck Japan G.K. ©︎2024 - Pacific Teck

    Japan G.K. 背景 • 多彩なアプリケーションとその実行環境が高頻度に更新されていくようになり、 従来行われてきたような全要件を包含するHPCシステム構築は非現実的です。 • コンテナを用いると、システムに手を入れることなく多彩な実行環境が用意できます。 • 複数システムを併用する場合、再現性を担保するには相応のスキルが必要です。 • 多くのコンテナ実装があります。(Docker, Singularity, Podman, Shifter…) • Singularity は、米国Lawrence Berkeley National Laboratoryのスパコン で生まれ、スパコン利用者が直感的に使えるつくりになっています。 • アプリケーションを直接実行できるため、ジョブスケジューラとの連携が容易です。
  2. ©︎2024 - Pacific Teck Japan G.K. 従来型のHPC環境構築の問題点 • 多様化する用途に合わせ、多彩なア プリケーションが登場。それらが高頻

    度でアップデートを繰り返すように。 • システム全体にそれらを共存させる すり合わせコストは、既に現実的でな くなっている。 • NGCをはじめ、コンテナを用いて実 装をデリバリーする仕組みの充実。 • ユーザーの方が管理者より、アプリの 実行環境の詳細に詳しい。 準備 • ユーザーが使うアプリケーション を事前に募り、必要なランタイム をリストアップして、共存できる ようにすり合わせを行う。 導入 • リストアップしたアプリケーション、 ランタイムに対し、それぞれ必要な バージョンを並存させ、切り替えて 使う機構を用意する。 運用 • アップデートが必要になった際は、 管理者に要望を出し、メンテナンス のタイミングで追加してもらう。
  3. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample 異なる環境の混在利用を実現 Python 3.12 Python 3.6 24.04 20.04 Python 3.12 Python 3.6 24.04 20.04 Singularity前 Singularity後
  4. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample リソースの扱いと目的の違い 共有・統合 Singularity リソース 名前空間 隔離・制限 OCI(Docker) • コンテナをホスト環境の一部として捉え、各リソースを共有して使えることを目指した。 • シェルからのHPCアプリケーションの起動に特化した使い勝手。 • イメージをシングルファイル内で固定して再現性を担保。 Singularity • ホストとコンテナを別システムとして隔離することを求めた。特にマルチテナント環境では必須要件。 • 複数コンテナを組み合わせて、特定用途向けサービスのシステム構築に用いられることが多い。 • いくつもレイヤーを重ねて1つのイメージを作る。差分アップデートを容易にした配布形態。 OCI(Docker) • デフォルトの動作や設定に違いがあるだけで、実の処コンテナエンジンがやってること自体は、 大きくは変わらない。。むしろイメージハンドリングで運用方法に差が出る。 • オーケストレーション環境でSingularityを使う優位性を活かしたい等、相互利用を考えるメ リットが出て来ています。Singularityとしても、OCIのエコシステムを利用したい。
  5. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample シングルファイル • 独自のSIFフォーマットで、コンテナを1ファイルに集約。 • 通常のファイルコピーだけでハンドリング可能。 • 電子署名によりイメージの改変防止と高い再現性を実現。 ホストのリソースやネームスペースを共有 • 起動したユーザーと同一 ID でアプリケーションが稼働。 • プロセス空間とデバイス・ネットワークを完全共有。 • 事前のデータ転送やネットワーク設定が不要。 Root権限と無縁の運用が可能 • コンテナ実行やコンテナ内でもroot権限を使わない運用が可能。 • イメージ作成にもroot権限が不要にできる。 • イメージの保存や展開にローカルストレージが不要。 Singularityの際立った特徴
  6. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample 「共有ファイルシステムは常に高負荷。 ありがとうPython。 もうAnacondaは禁止したい。」 TACC Dr. Stanzione @ BeeGFS BoF SC22 SIF利用による優位性 高い可搬性 • シングルファイルで保存するため、 持ち運びが用意。 • 通常のNASでの管理も可能。 • リポジトリに依存せず、電子署名 による同一性を保証。 低フットプリント • 内部はSquashFS。tar+gzipを 直接マウントしているイメージ。 • オンメモリでアクセスでき、事前に 展開する必要がない。メモリや CPU負荷も極めて小さい。 ハイパフォーマンス • ファイルアクセスはローカルのオン メモリで行われ、共有ファイルシス テムへの、メタデータアクセス負荷 を極小化できる。 通信負荷も下げられる。 PythonベースのAIフレームワークのため、 様々な環境がホームディレクトリに展開される。 これが共有ファイルシステム上で高負荷を生み、 大きな問題となっている。 例)PyTorchはimportするだけで1000回も ファイルをオープンする。 参考:弊社ブログ Singularity利用による共有ファイルシステムの負荷軽減 Singularityという概念は、「ソフトウエアとしてのSingularity」と「規格としてのSIF」、両方からなります。 コンテナエンジンとしてのSingularityのみならず、SIF自体にも際立った優位性があります。
  7. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample イメージのカスタマイズ ー定義ファイルの利用ー イメージのカスタム内容を記述してビルド時に環境構築をさせます。定義ファイルにはビルドが正しく行われたか確認する テストやイメージの情報を記述したり、実行時にコンテナ内で設定される環境変数や処理を記述することができます。 $ cat sd.def Bootstrap: docker From: ubuntu:latest %post mkdir -p /opt/example/bin apt update; apt install -y curl curl https://raw.githubusercontent.com/fumiyas/home-commands/master/echo-sd > /opt/example/bin/echo-sd chmod 755 /opt/example/bin/echo-sd apt remove –y curl; apt clean all %environment export PATH=/opt/example/bin:$PATH %runscript echo-sd $* $ singularity build -f sd.sif sd.def $ ./sd.sif “See you at SC24!” SIFはイメージが直接実行可能です。 ビルド環境が実行時には不要の場合など、マルチステージビルドが利用できます。 ベースイメージの種別や取得先の指定 実行時の環境やコマンドの埋め込み ベースイメージをsandboxとし、 コンテナ起動後に実行する内容 イメージのカスタムを行う
  8. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample アプリケーション環境の構築 準備 • ソースコード入手 • コンパイラ、ライブラリ、MPI、CUDA・・・ • 依存関係?OS標準?サードパーティ? • 事例?ベンチマーク結果? • HWとの相性? 導入 • ビルド、相性確認、動作テスト、ベンチマー ク、最適化、チューニング・・・ • 他のアプリとのすり合わせ、module • 要件を満たすまで繰り返し 運用 • 不具合・バージョンアップ対応 • 他環境への移植、再現性の確認 • メンテナンスのタイミングで環境のアップ デートして(しないで)もらう。 • ビルド方法や手順をレシピとして公開、 ソースの取得からビルド/インストール 管理を半自動化。 • 動作確認されたアプリケーション環境 を迅速に再現。 • 必要パッケージは全て内製するため、 ディストリビューションやバージョン違 いで使えないことがない。 • コンパイラやライブラリの組合わせを 自由に選んで、独自環境を作ることも できる。
  9. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample まっ・たく・カン・タ・ン! lammps 環境を作って使うのに必要なのはこれだけ・・・ r8g でやってます。 $ git clone -c feature.manyFiles=true https://github.com/spack/spack.git $ spack/share/spack/setup-env.sh $ spack install lammps <<ビルドが終わるまで、しばらく待つ>> $ spack load lammps@20240829 使ってみる。 $ which lmp /home/ubuntu/spack/opt/spack/linux-ubuntu24.04-neoverse_v2/gcc-13.2.0/lammps-20240829- qft3oudpjirbz5jogn4m6gygnldr3wtx/bin/lmp $ lmp -in lj.inp ubuntu@ip-172-31-50-105:~$ lmp -in lj.inp LAMMPS (29 Aug 2024) using 8 OpenMP thread(s) per MPI task Created orthogonal box = (0 0 0) to (1 1 1) 1 by 1 by 1 MPI processor grid WARNING: No fixes with time integration, atoms won't move (src/src/verlet.cpp:60) Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... <<後略>>
  10. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample まっ・たく・カン・タ・ン! アプリの情報や依存関係、デフォルトのビルドオプションも確認できる。 $ spack info lammps CMakePackage: lammps Description: LAMMPS stands for Large-scale Atomic/Molecular Massively Parallel Simulator. Homepage: https://www.lammps.org/ Preferred version: 20240829 https://github.com/lammps/lammps/archive/stable_29Aug2024.tar.gz Safe versions: develop [git] https://github.com/lammps/lammps.git on branch develop 20240829 https://github.com/lammps/lammps/archive/stable_29Aug2024.tar.gz <<中略>> Variants: asphere [false] false, true Activate the asphere package body [false] false, true Activate the body package build_system [cmake] cmake Build systems supported by the package colloid [false] false, true Activate the colloid package compress [false] false, true Activate the compress package coreshell [false] false, true Activate the coreshell package cuda [false] false, true Build with CUDA <<中略>> Build Dependencies: adios2 cuda ffmpeg gsl hipcub jpeg lapack llvm-amdgpu n2p2 opencl py-cython py-pip python voropp blas curl fftw-api hdf5 hipfft kim-api latte mkl netcdf-c plumed py-mpi4py py-setuptools python-venv vtk cmake eigen gmake hip hsa-rocr-dev kokkos libpng mpi ninja py-build py-numpy py-wheel rocm-openmp-extras Link Dependencies: adios2 cmake curl ffmpeg gsl hip hipfft jpeg kokkos latte llvm-amdgpu mpi netcdf-c plumed voropp blas cuda eigen fftw-api hdf5 hipcub hsa-rocr-dev kim-api lapack libpng mkl n2p2 opencl python vtk Run Dependencies: py-mpi4py py-numpy py-setuptools python python-venv Licenses: GPL-2.0-only どんなオプションがあるのかも、それらを有効・無効化 したり調整が可能。ドキュメントを読まなくても、ある 程度わかる。
  11. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample
  12. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample センパイ マジっすか・・ しょうがないですね・・ いいこと思いついた。 俺がお前のこと 吞み込むから 俺のおなかの中で 環境つくれ。 the こんてなーず 先輩ん家でまるごと圧縮 しておいとけば、 そのまま車でどこにでも 持ってけるしな・・ 平和な世界
  13. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample spack で OpenFOAM-2312 環境を作る Singularity def ファイルを出力してみる。r8g です。 ubuntu@ip-172-31-50-105:~$ cat spack.yaml spack: specs: - openfoam container: format: singularity ubuntu@ip-172-31-50-105:~$ spack containerize > openfoam-2312.def ubuntu@ip-172-31-50-105:~$ sudo singularity build of2312.sif openfoam-2312.def <<だいぶ待つ>> ubuntu@ip-172-31-50-105:~$ singularity shell of2312.sif Singularity> source /opt/view/etc/bashrc # これも %runscript/%environment に記載可能 Singularity> export PATH=/opt/view/bin:$PATH # これはなぜ含まれてないのか要確認 Singularity> cp -a /opt/view/tutorials/incompressible/simpleFoam/motorBile ~ # SIF イメージ内は ReadOnly Singularity> cd ~/motorBile Singularity> ./Allrun Running surfaceFeatureExtract on /home/ubuntu/motorBike Running blockMesh on /home/ubuntu/motorBike Running decomposePar on /home/ubuntu/motorBike やってみた 結果 Singularity> $ cat log.simpleFoam /*---------------------------------------------------------------------------*¥ | ========= | | | ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox | | ¥¥ / O peration | Version: 2312 | | ¥¥ / A nd | Website: www.openfoam.com | | ¥¥/ M anipulation | | ¥*---------------------------------------------------------------------------*/ Build : _1d8f0d55f7-20231221 OPENFOAM=2312 version=v2312 Arch : "LSB;label=32;scalar=64" Exec : simpleFoam -parallel -decomposeParDict system/decomposeParDict.6 <<後略>>
  14. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample $ cat openfoam-2312.def Bootstrap: docker From: spack/ubuntu-jammy:develop Stage: build %post # Create the manifest file for the installation in /opt/spack-environment mkdir /opt/spack-environment && cd /opt/spack-environment cat << EOF > spack.yaml spack: specs: - openfoam concretizer: unify: true config: install_tree: /opt/software view: /opt/views/view EOF # Install all the required software . /opt/spack/share/spack/setup-env.sh spack -e . concretize spack -e . install spack gc -y spack env activate --sh -d . >> /opt/spack- environment/environment_modifications.sh # Strip the binaries to reduce the size of the image find -L /opt/views/view/* -type f -exec readlink -f '{}' ¥; | ¥ xargs file -i | ¥ grep 'charset=binary' | ¥ grep 'x-executable¥|x-archive¥|x-sharedlib' | ¥ awk -F: '{print $1}' | xargs strip どんなDEFファイルが作成される? Bootstrap: docker From: ubuntu:22.04 Stage: final %files from build /opt/spack-environment /opt /opt/software /opt /opt/views /opt /opt/spack-environment/environment_modifications.sh /opt/spack- environment/environment_modifications.sh %post # Symlink the old view location ln -s /opt/views/view /opt/view # Modify the environment without relying on sourcing shell specific files at startup cat /opt/spack-environment/environment_modifications.sh >> $SINGULARITY_ENVIRONMENT • 個別バージョンの Spack 入り docker image を dockerhub に用意してあり、 %postの中で spack install を行っている。 • 開発環境を実行環境から排除するため、マルチステージビルドを行い、インストール先 のディレクトリを持ち込んで実行環境のイメージとして出力している。 • 派生版を使う場合、それをセットアップしたイメージを用意しておく必要がある。 • 既存バイナリの再利用が効かないため、全部作り直す必要があり時間がかかる。 • ハードウエアの状態に合わせたビルド時チューニングが行われる場合あり。
  15. ©︎2024 - Pacific Teck Japan G.K. YYYY MM DD Pacific

    Teck / Event name – Tokyo, Japan Subheading Sample HPC & Machine Learning Experts Subheading Sample まとめ • Singularity を使って、ホスト環境を自由に選べるようにしましょう。 • イメージを持ち寄って、即時計算を開始できるようにしましょう。 • 共有できる実行環境(SIFイメージ)で、同じ結果が得られるようにしましょう。 • Spack との連携は、直接 Spack を使う場合と比べ、運用上のメリット(SIF利用)が大きい 一方、使い勝手としては失われるメリット(再利用)もあります。 • (注意) Ubuntu/Redhat 等 OS の微妙な違いや、CPUアーキテクチャの差異などで、バイナリ互換 がない可能性があり、 Illegal Instruction 等のエラーとなることがあります。Python等で は問題ないと思われます。 • 今後のイベント参加予定 お声がけください。 • IEEE CLUSTER 2024 @神戸 9月24-27日 • オープンCAEシンポジウム 2024 @九大 11月6-8日 • SC24 @Atlanta 11月16-23日