---
title: Apptainer
---
[toc]
## 利用環境{#enviroment}
### 利用できるバージョン・システム{#version}
以下の表に示すApptainer を利用することができます。
OSに付属するパッケージとして提供されているため、モジュールファイルによる環境設定は不要です。
|バージョン | モジュールファイル名 | システムB/C | システムG | クラウドシステム | 備考
|--- | --- | --- | --- | --- | ---
|1.1.2 | none | + | + | + | 旧名称:singularity
\+ : すべてのユーザが利用可能
\- : 利用不可
## 利用方法{#usage}
1. `ubuntu.sif` というコンテナイメージを用いて,ハイブリッド並列を行うプログラム(`a.out`)を実行するための,ジョブスクリプト(`test.sh`)を作成します
```nohighlight
#!/bin/bash
#============ Slurm Options ===========
#SBATCH -p gr19999b # ジョブキュー(パーティション)の指定。投入したいキュー名に適宜変更が必要。
#SBATCH -t 1:00:00 # 経過時間の指定(1時間を指定する例)。
#SBATCH --rsc p=2:c=40 # 要求リソースの指定(2プロセス,40コアを使用するハイブリッド並列の例)。
#SBATCH -o %x.%j.out # ジョブの標準出力ファイルの指定。%xはジョブ名、%j はジョブIDに置換されます。
#============ Shell Script ============
set -x
## GPUを使わない場合
srun apptainer exec --bind `pwd`,/opt/system,/usr/lib64 --env LD_LIBRARY_PATH=/usr/lib64 ubuntu.sif ./a.out
## GPUを使う場合(--nvを付加することでGPU対応になる)
srun apptainer exec --nv --bind `pwd`,/opt/system,/usr/lib64 --env LD_LIBRARY_PATH=/usr/lib64 ubuntu.sif ./a.out
```
#### 主要なオプション
|オプション | 意味 | 実行例
|---------- | ----------- | ----------- |
| --bind _MOUNT\_DIR_ | マウントするディレクトリを指定| --bind /LARGE0,LARGE1,/opt/system,/usr/lib64 |
| --env _ENVIRONMENT_ | 環境変数を指定 | --env LD_LIBRARY_PATH=/usr/lib64 |
| --nv | GPUを使用する場合に追記| --nv |
2. 1.で作成したジョブスクリプトを用いてジョブ投入.
```nohighlight
$ sbatch test.sh
Submitted batch job {jobid}
```
3. 実行結果確認.
```nohighlight
$ cat test.sh.{jobid}.out
================ Slrum Info ================
DATE = 2023-03-08T14:38:10+09:00
PARTITION = gr19999d
JOB_ID = {jobid}
JOB_NAME = test.sh
NNODES = 1
RSC_OPT = p=1:t=8:c=8:m=8G
============================================
_________
< hello!! >
---------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
```
## コンテナイメージの作成方法
### Apptainer(Singurarity)のコンテナイメージを新規作成
ここでは,ubuntu22.04のdockerイメージをベースパッケージとして
python3とtensorflowをインストールしたコンテナイメージを作ります.
1. コンテナを生成するためのレシピファイルを作成し,`ubuntu22_tensorflow.def` として保存する.
```nohighlight
Bootstrap: docker
From: ubuntu:22.04
%post
apt-get update
apt-get install -y python3 python3-pip
pip3 install tensorflow
```
2. 1.で生成したレシピファイル(`ubunutu22_tensorflow.def`)を使用して,コンテナイメージのビルドを実行する.コンテナイメージは.`ubuntu22_tensorflow.sif` として保存する.
```nohighlight
$ apptainer build --fakeroot {コンテナイメージの保存先} {コンテナイメージを生成するためのレシピファイル}
(例)
$ apptainer build --fakeroot ~/ubuntu22_tensorflow.sif ubuntu22_tensorflow.def
INFO: Starting build...
Getting image source signatures
(中略)
INFO: Creating SIF file...
INFO: Build complete: ubuntu22_tensorflow.sif
```
* コンテナイメージの保存先は,ホームディレクトリ配下に設定して下さい.
保存先を大容量ディスクにするとコンテナイメージのビルドに失敗します.
3. 動作確認
```nohighlight
## コンテナを起動する
$ apptainer shell ~/ubuntu22_tensorflow.sif
## Python3を立ち上げる
Apptainer> python3
Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
## Tensorflowの動作確認
>>> import tensorflow as tf
>>> tf.__version__
'2.11.0'
```
### DockerHubにアップロードされているコンテナイメージを使用
1. Apptainerのコンテナイメージを保存するディレクトリへ移動する
```nohighlight
$ cd container_image
```
2. DockerHubからコンテナイメージをダウンロードし,ビルドする
```nohighlight
$ apptainer build lolcow.sif docker://godlovedc/lolcow
INFO: Starting build...
Getting image source signatures
(中略)
INFO: Creating SIF file...
INFO: Build complete: lolcow.sif
```
* Build failed となった場合は,再度ビルドをお試しください.
3. コンテナイメージが作成されていることを確認
```nohighlight
$ ls lolcow.sif
lolcow.sif
```