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

HPCでの業界標準コンテナランタイムSingularityを知っていますか?

 HPCでの業界標準コンテナランタイムSingularityを知っていますか?

Container Runtime Meetup #4 LT

森本賢治

August 20, 2022
Tweet

Other Decks in Technology

Transcript

  1. Singularityとは • 米国Lawrence Berkeley National Laboratoryのスパコンで生まれ、HPC環境 での利用に即して開発されたコンテナ実装。類似のものに Shifter, CharieCloud 等。

    • 修正BSDライセンスで配布されるオープンソースのコンテナ実装であると共に、同じく オープンな開発が進むイメージフォーマットの規格を含む。 • 開発を開始したのはCentOS創始者の一人Gregory Kurtzerで、当初はC++で記述 されていたが、その後Goで全面的に書き直し。 • 有償版を販売するSylabs社がコミュニティ主導で開発を行って配布している SingularityCE(https://github.com/sylabs/singularity )と、 元コミュニティから The Linux Foundation に移管され名称を変更した Apptainer(https://github.com/apptainer/apptainer ) に分かれている。 • それぞれ開発の方向性/優先順位等が微妙に異なっているが、コンテナランタイムの動 作としては後方互換。 • 主要Linuxディストリビューションの他、WSL2でも動作。
  2. 典型的なスパコン(HPCクラスタ)の構造 • 多数のサーバーを高速インターコネクト (1~200GbE,Infiniband等)で接続。 • 共有ファイルストレージを計算ノードの同一 ディレクトリにマウント。速度・容量重視のよう に用途毎に用意している場合もある。 • 直接ログインするノードをホストノードと呼

    び、実行したい処理をシェルスクリプトで記 述、バッチジョブスケジューラに投入する。 • スケジューラは空いた計算ノードに、ユーザー の権限でジョブ(スクリプト)を実行していく。 短いもので数秒、長いと数か月。 • 使うアプリケーションは各計算ノードや共有 ファイルシステム内にセットアップしておく必 要がある。
  3. HPCでコンテナに求められる要件(事情) • ウェブ系:システム構築して、サービス提 供。 HPC系:自分だけのアプリを使いたい。 • マルチテナント対応はほぼ不要。 • パフォーマンスが最重要。オーバーヘッドを 極限まで減らし、使える全リソースをシーム

    レスに使いたい。 • アプリケーションと、必要なランタイム、OS のユーザーランドをまとめて個別保存し、 再利用したり、使い分けたりしたい。 • 構成の異なる複数サイトで同じイメージを 直感的に使いまわしたい。 • 結論:ユーザーランド+アプリケーションを カプセル化した、着せ替えツールが欲しい。
  4. Singularityの特徴 独自イメージ構造(Singularity Image Format) • SquashFSを用いたシングルファイルのイメージ、かつ イメージファイルを直接実行可能。ハンドリングが容易。 • PGPで電子署名を付けられ、改ざんや混入を防止。 ホスト側リソースにシームレスにアクセス可能

    • 起動したUIDがコンテナ内で有効で、ホームディレクトリや/tmpを デフォルトでマウント済み。ファイル持ち込み処理不要。 • ネットワーク、デバイス(/dev)、プロセス空間(/proc)も共有。 運用中 root権限を必要としない • ホスト側でDaemonを稼働させておく必要がない。 • コンテナ内外で、root権限を要求・発生しない使い方。 • 一般的な使い方ではイメージをローカルに展開しない。
  5. 使ってみる-1- [pteck@sing01 ~]$ singularity pull jammy.sif docker://ubuntu:latest INFO: Converting OCI

    blobs to SIF format INFO: Starting build… Getting image source signatures Copying blob d19f32bd9e41 done Copying config 3f892a8eb9 done Writing manifest to image destination Storing signatures 2022/08/14 18:49:36 info unpack layer: sha256:d19f32bd9e4106d487f1a703fc2f09c8edadd92db4405d477978e8e466ab290d INFO: Creating SIF file… [pteck@sing01 ~]$ ls -l jammy.sif -rwxrwxr-x 1 pteck pteck 29810688 Aug 14 18:49 jammy.sif [pteck@sing01 ~]$ singularity exec jammy.sif head -n 4 /etc/os-release PRETTY_NAME="Ubuntu 22.04.1 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.1 LTS (Jammy Jellyfish)" [pteck@sing01 ~]$ ./ubuntu_latest.sif Singularity> grep `whoami` /etc/passwd pteck:x:1000:1000:pteck:/home/pteck:/bin/bash Singularity> pwd /home/pteck Singularity> ps ef PID TTY STAT TIME COMMAND 698 pts/0 Ss 0:00 -bash HOSTTYPE=x86_64 LANG=en_US.UTF-8……… 819 pts/0 Sl 0:00 ¥_ Singularity runtime parent 838 pts/0 S 0:00 ¥_ /bin/bash --norc BASH_FUNC_which%%=() {……… • CentOS7の環境でDockerHub からUbuntuイメージを取得して SIFに変換。 • SquashFSではデフォルトでgzip 圧縮がかかり、SIFファイルサイズは 30MB以下に抑えられている。 • コンテナ内のアプリケーションを直接 実行。Ubuntuであることを確認。 • SIFイメージを直接起動するとシェル が起動する。UIDやGID、ホームディ レクトリが引き継がれていることが 判る。
  6. 使ってみる-2- [pteck@sing01 ~]$ cat a-s.def Bootstrap: docker From: ubuntu:latest %post

    apt update && apt clean all %runscript apt search $* [pteck@sing01 ~]$ singularity build -f apt-search a-s.def INFO: Starting build... <<中略>> INFO: Adding runscript INFO: Creating SIF file... INFO: Build complete: apt-search [pteck@sing01 ~]$ ./apt-search nginx-core Sorting... Done Full Text Search... Done nginx-core/jammy-updates,jammy-security 1.18.0-6ubuntu14.1 amd64 nginx web/proxy server (standard version) [pteck@sing01 ~]$ head -n 2 ./apt-search #!/usr/bin/env run-singularity kbkboci-config.json@PPkbkb02Bootstrap: dockerMkbkbinspect- metadata.json@¥ [pteck@pteck02 ~]$ singularity exec ./apt-search touch /hoge /usr/bin/touch: cannot touch '/hoge': Read-only file system • 定義ファイルを用いてSIFをビルド。 • 定義ファイル内で、ビルド時に必要な処理と、 実行時に必要な処理を記述。 • 特に%runscriptはイメージを直接実行し た際に実行する内容を記述できる。 • CentOS7から、Ubuntu22.04のapt searchができるコマンドが作れたりする。 • できたイメージをPATHが通ったところに 置けば、スタティックリングしたバイナリのよ うな使い勝手。コンテナを使っていることを 意識せずに使える。 • イメージファイルはスクリプトになっている。 • イメージの中はデフォルトでRead-onlyな ので、後付けでapt install等はできない。
  7. Singularityの現在と今後 • Kubernetesのような、オーケストレーション実装が存在しない。 • DockerHubやORAS互換のリポジトリからイメージを取得するのは最初期からできて いたが、ランタイムとしてはOCIとは無縁の状況が続いていた。少なくともHPCのユーザー は必要としてこなかった面がある。 • OCI互換の動作をさせるociサブコマンドがあり、例えば singularity

    oci mount ubuntu.sif /var/tmp/jammy のようにするとbundleが展開される。以前は独自 実装をしていたが、直近でリリースされた3.10でruncを呼び出すよう変更。 • OCIイメージを直接動作させたり(現在はblobのダウンロード後、SIFへ変換を行って いる)、OCIイメージをそのままカプセル化できるようSIF規格の拡張も進められており、 来年リリース予定の4.0で本格利用ができるようにするとのこと。 • podmanがSIFイメージを扱うことができるようになった(内部でイメージ変換)
  8. Q&A? Thank you for your attention and interest. • Github:

    https://github.com/sylabs/singularity • Slack: https://singularityce.slack.com • GoogleGroup: https://groups.google.com/g/singularity-ce • Mail: [email protected]