高性能コンテナのアプテイナー

1. Apptainer の概要

Apptainer は、シンプル、高速、安全になるように設計されたオープンソースのコンテナプラットフォームです。利用可能なコンテナ プラットフォームは多数ありますが、Apptainer は共有システムやハイ パフォーマンス コンピューティング (HPC) 環境で簡単に使用できるように設計されています。特徴は次のとおりです。

  1. 暗号署名と暗号化をサポートする不変の単一ファイルのコンテナー イメージ形式。
  2. デフォルトでは、分離よりも統合が優先されます。GPU、高速ネットワーク、クラスター、サーバー上の並列ファイル システムを簡単に活用できます。
  3. コンピューティング モビリティ。単一ファイルの SIF コンテナ形式は、転送と共有が簡単です。
  4. シンプルで効果的なセキュリティ モデル。コンテナ内でも外部でも同じユーザーであるため、ホスト システム上で他の権限違反が発生することはありません。

2. SingularityとApptainerの違い

Singularity は、プロジェクトの当初の設計目標をすべて超えたため、本格的なオープンソース プロジェクトになりました。プロジェクトを新たな成熟レベルに引き上げる時期が来ました。Singularity プロジェクトはLinux Foundation に正式に参加し、直ちに発効します。この一環として、他のプロジェクトや同名の商用製品と区別するために、プロジェクトの名前を「Apptainer」に変更しました。

バージョン 2.1 の違い:

Apptainer の最初のバージョンは 1.0 となり、https://github.com/apptainer/apptainer の新しいリポジトリに存在します。Singularity リポジトリは移動しました リポジトリはhttps://github.com/apptainer/singularityに移動しまし た リポジトリはアーカイブとして残り、Apptainer の最初のリリース後は読み取り専用になります。  

2.2 Sylabs にはまだ特異点がありますが、Apptainer はそれとどのような関係があるのでしょうか?

Sylabs が Singularity プロジェクトをフォークしたとき、彼らはフォークの名前を変更しないことを選択しました。これはコミュニティにかなりの混乱を引き起こし、時間が経つにつれて状況はさらに悪化しました。私たちはこの問題を自分たちで修正してブランド変更の影響を受けることにしました。これにより、混乱が解決され、Sylabs が商用製品ライン全体で Singularity の名前を使用し続ける権利が得られます。

2.3 下位互換性

Apptainer はコマンド ライン リンクとして利用でき、可能な限り多くの CLI および環境機能を維持します。ユーザーの観点から見ると、Singularity からほとんど変わっていません。

2.4 Sylabs は Apptainer プロジェクトに再び参加しますか?

私たちは確かにそう願っていますが、それは彼ら次第です。他の組織と同様に、Apptainer に PR を提出することは歓迎されており、時間の経過とともに TSC への参加が検討される可能性があります。理想的には、Sylabs は Apptainer をアップストリーム ソースとみなして、このコミュニティに PR を提供し、その後、自社の商用製品用にこのプロジェクトのスナップショットを取得し、Apptainer デバイスなどに独自の付加価値 (ライブラリ、リモート ビルドなど) を追加することになります。 )。

2.5 公式文書

Singularity官方文档:GitHub - apptainer/singularity: プロジェクトを Linux Foundation に移行する一環として、Singularity は Apptainer に名前変更されました。このリポジトリは、変更の直前にスナップショットとして保存されています。

Apptainer 公式ドキュメント: https://github.com/apptainer/apptainer

3. Docker と Apptainer の違い

Apptainer は比較的新しいコンテナ ソフトウェアで、docker に比べて root 権限を必要としないため、科学研究アプリケーションに適しています (共有サーバーの一般ユーザーは通常 root 権限を持たないため)。

ドッカー

Apptainer (Singularity を使用している場合は、コマンド内の apptainer を Singularity に置き換えます)

鏡像

もつ

なし (Apptainer にはミラーリングの概念がなく、ユーザーがコンテナを 1 つずつ作成して実行します)

画像(コンテナ)の取得

docker pull ビジーボックス:最新

apptainer pull ./busybox.sif docker://busybox:latestまたはapptainer build ./busybox.sif docker://busybox:latest

容器

もつ

はい (Apptainer コンテナーは SIF とサンドボックスの 2 つの形式で存在します。SIF は読み取り専用で、主にユーザー プログラムの実行に使用されます。サンドボックスは変更でき、新しいコンテナーの開発と作成に使用できます)

実行中のコンテナを表示する

ドッカーps

Apptainer インスタンスのリスト

コンテナを実行する

docker run ビジーボックス ping www.baidu.com

apptainer execbusybox.sif ping www.baidu.com

マウントディレクトリ

-v ホストパス:コンテナパス

-B または --bind

コンテナを対話的に実行する

docker run -it ビジーボックス

apptainerシェルbusybox.sif

4. Singularity コンテナ Apptainer と比較した新機能

4.1ライブラリ API レジストリ

Apptainer を使用すると、ユーザーは、ライブラリ API Container Registry を使用して、コンテナをSIF イメージにプッシュしたり、他の人が作成した SIF イメージをプルしたりできます。

多くのライブラリ API レジストリでは、コンテナ イメージのプッシュやプライベートの可能性があるコンテナ イメージのプルなどのアクションを実行するために認証が必要です。コマンド グループは、ライブラリ API の認証レジストリを制御します。リモート エンドポイントを使用して追加およびログインする方法については、手順を参照してくださいリモート

認証されると、コンテナをプッシュできるようになります。

特定の操作については、次のドキュメントを参照してください。ライブラリ API レジストリ — Apptainer ユーザー ガイドのメイン ドキュメント

4.2コンテナリソースの制限

多くの場合、コンテナーが消費するリソースを制限すると便利です。たとえば、コンテナーが 1 つの CPU またはシステム上の RAM の 50% のみを使用できるようにします。HPC クラスターでは、ジョブごとに制限を設定できるジョブ スケジューラーを使用してコンテナーを開始するのが一般的ですが、次のシナリオは、より直接的な制御が役立つ例です。

  1. HPC ジョブで複数のコンテナー化されたアプリケーションを実行する場合、各アプリケーション ジョブのコンテナーには異なるリソース制限が必要です。
  2. ワークステーションで HPC コードをテストする場合は、デスクトップ環境やその他のアプリケーションをダウンさせる可能性がある過剰な CPU/RAM の使用を避けてください。
  3. ベンチマーク コードが内部メソッドの制限数を提供していない場合、CPU の量が使用されます。

実行中のコンテナ アプリケーションに制限を適用するには、次の 3 つの方法があります。

  1. 以下で説明するリソースごとのコマンドライン制限フラグを使用します。
  2. このフラグが適用されたファイルはリソース制限を定義します。--apply-cgroupscgroups.toml
  3. ツールなどの外部ツールを使用して制限を適用し、systemd-runapptainer を呼び出します。

コンテナリソースの制限 — Apptainer ユーザーガイドのメインドキュメント

4.3 アプリケーションのチェックポイント

チェックポイント機能を使用すると、ユーザーはコンテナ化されたアプリケーションを実行時に透過的に保存し、保存された状態から再開できます。これは、一時的な環境障害、ランダムなハードウェア障害、またはジョブの前処理の影響を最小限に抑える必要があるユースケースに役立ちます。

チェックポイント機能 — Apptainer ユーザーガイドのメインドキュメント

4.4 特異点の互換性

プロジェクトを Linux Foundation に移行するというコミュニティの決定により、ユーザー ベースへの影響を最小限に抑えるためのプロジェクト名の変更に制限が設けられました。制作中の移動に問題がある場合は、コミュニティにご連絡ください。お手伝いいたします。

Singularity の互換性 — Apptainer ユーザー ガイドのメイン ドキュメント

5.Apptainerのインストール

5.1 ソースコードのインストール

5.1.1 システムの依存関係をインストールする

開発ツールとライブラリは、最初にホスト マシンにインストールする必要があります。Ubuntu を含む Debian ベースのシステムの場合:

# Ensure repositories are up-to-date
sudo apt-get update
# Install debian packages for dependencies
sudo apt-get install -y \
    build-essential \
    libseccomp-dev \
    pkg-config \
    uidmap \
    squashfs-tools \
    squashfuse \
    fuse2fs \
    fuse-overlayfs \
    fakeroot \
    cryptsetup \
    curl wget git

CentOS/RHEL の場合:

# Install basic tools for compiling
sudo yum groupinstall -y 'Development Tools'
# Ensure EPEL repository is available
sudo yum install -y epel-release
# Install RPM packages for dependencies
sudo yum install -y \
    libseccomp-devel \
    squashfs-tools \
    squashfuse \
    fuse-overlayfs \
    fakeroot \
    /usr/*bin/fuse2fs \
    cryptsetup \
    wget git

SLE/openSUSE 上

# Install RPM packages for dependencies
sudo zypper install -y \
  libseccomp-devel \
  libuuid-devel \
  openssl-devel \
  cryptsetup sysuser-tools \
  gcc go

5.1.2 go エージェントのインストール

Apptainer は Go で書かれており、割り当てられたリポジトリで現在利用可能な Go バージョンよりも新しい Go バージョンが必要になる場合があります。公式バイナリから Go の最新バージョンをインストールすることをお勧めします。

まず、Go tar.gz アーカイブを にダウンロードし、次にアーカイブを に抽出します。/tmp/usr/local

注: Go を古いバージョンから更新する場合は、再インストールする前に /usr/local/go を必ず削除してください。

export GOVERSION=1.19.3 OS=linux ARCH=amd64  # change this as you need
wget -O /tmp/go${GOVERSION}.${OS}-${ARCH}.tar.gz \
  https://dl.google.com/go/go${GOVERSION}.${OS}-${ARCH}.tar.gz
sudo tar -C /usr/local -xzf /tmp/go${GOVERSION}.${OS}-${ARCH}.tar.gz

最後に、環境変数 /usr/local/go/binPATH に追加します。

echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc

6.Apptainerのインストール

6.1 リポジトリのクローンを作成する

Go モジュールの採用により、コンテナー リポジトリのクローンを特定の場所に作成する必要がなくなりました。

選択した場所にリポジトリのクローンを作成します: git

git clone https://github.com/apptainer/apptainer.git
cd apptainer

デフォルトでは、クローン作成は開発と同じブランチ上の Apptainer で行われます。Apptainer の特定のバージョンをビルドするには、コンパイル前にリリース タグを確認します。例: main

git チェックアウト v1.1.8

アプリをコンパイルするには、次のコマンドを使用して Apptainer を構成、ビルド、インストールします。

./mconfig
cd ./builddir
make
make install

それでおしまい!これで、次のコマンドを実行してアプリのバージョンを確認できます。

apptainer --version

このコマンドは、ビルドとインストールのオプションを変更できる申請者を受け入れます。たとえば、別のフォルダーにビルドし、インストール プレフィックスを他のパスに設定するには: mconfig

./mconfig -b ./buildtree -p /usr/local

setuid (以前はデフォルトでした) をインストールする場合は、そのオプションを使用します。--水付き

利用可能なオプションについては出力を参照してください。./mconfig -h

6.2 タール法

apptainer 圧縮パッケージをダウンロード

VERSION=1.1.8
wget https://github.com/apptainer/apptainer/releases/download/v${VERSION}/apptainer-${VERSION}.tar.gz

解凍してインストールする

tar xf apptainer-${VERSION}.tar.gz
cd apptainer-1.1.8
./mconfig
若要指定安装路径和支持suid:
(./mconfig --with-suid --prefix=/public/home/cluslab/software)
cd ./builddir
make
make install

おすすめ

転載: blog.csdn.net/lovebaby1689/article/details/130857055