Slide 1

Slide 1 text

HPCでの業界標準 コンテナランタイム Singularity を知っていますか? Container Runtime Meetup #4 LT session. 20 Aug 2022 KMorimoto

Slide 2

Slide 2 text

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でも動作。

Slide 3

Slide 3 text

典型的なスパコン(HPCクラスタ)の構造 • 多数のサーバーを高速インターコネクト (1~200GbE,Infiniband等)で接続。 • 共有ファイルストレージを計算ノードの同一 ディレクトリにマウント。速度・容量重視のよう に用途毎に用意している場合もある。 • 直接ログインするノードをホストノードと呼 び、実行したい処理をシェルスクリプトで記 述、バッチジョブスケジューラに投入する。 • スケジューラは空いた計算ノードに、ユーザー の権限でジョブ(スクリプト)を実行していく。 短いもので数秒、長いと数か月。 • 使うアプリケーションは各計算ノードや共有 ファイルシステム内にセットアップしておく必 要がある。

Slide 4

Slide 4 text

HPCでコンテナに求められる要件(事情) • ウェブ系:システム構築して、サービス提 供。 HPC系:自分だけのアプリを使いたい。 • マルチテナント対応はほぼ不要。 • パフォーマンスが最重要。オーバーヘッドを 極限まで減らし、使える全リソースをシーム レスに使いたい。 • アプリケーションと、必要なランタイム、OS のユーザーランドをまとめて個別保存し、 再利用したり、使い分けたりしたい。 • 構成の異なる複数サイトで同じイメージを 直感的に使いまわしたい。 • 結論:ユーザーランド+アプリケーションを カプセル化した、着せ替えツールが欲しい。

Slide 5

Slide 5 text

Singularityの特徴 独自イメージ構造(Singularity Image Format) • SquashFSを用いたシングルファイルのイメージ、かつ イメージファイルを直接実行可能。ハンドリングが容易。 • PGPで電子署名を付けられ、改ざんや混入を防止。 ホスト側リソースにシームレスにアクセス可能 • 起動したUIDがコンテナ内で有効で、ホームディレクトリや/tmpを デフォルトでマウント済み。ファイル持ち込み処理不要。 • ネットワーク、デバイス(/dev)、プロセス空間(/proc)も共有。 運用中 root権限を必要としない • ホスト側でDaemonを稼働させておく必要がない。 • コンテナ内外で、root権限を要求・発生しない使い方。 • 一般的な使い方ではイメージをローカルに展開しない。

Slide 6

Slide 6 text

使ってみる-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、ホームディ レクトリが引き継がれていることが 判る。

Slide 7

Slide 7 text

使ってみる-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等はできない。

Slide 8

Slide 8 text

どこで使われている? 有償・無償問わず 他にも利用者は多数。 理化学研究所 「富岳」 産業技術総合研究所 ABCI 2.0

Slide 9

Slide 9 text

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イメージを扱うことができるようになった(内部でイメージ変換)

Slide 10

Slide 10 text

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]