コンテナの利用
この章ではコンテナの利用方法を説明します。
データ解析システムではワークサーバとLSFのバッチジョブでコンテナ環境であるApptainerが利用可能です。
Note
一般的なApptainerの使い方は以下のリンクをご参照ください。
Link to "Apptainer User Guide"
コンテナイメージ作成環境の準備
コンテナイメージの作成には管理者(root)権限が必要です。そのため利用するイメージをApptainerが導入された別のシステムで作成し、ワークサーバに転送する必要があります。
Note
Apptainerを導入する手順は以下のリンクをご参照ください。Linux、Windows、Macに導入することができます。
Link to "Installing Apptainer"
コンテナイメージの作成
Apptainerを導入したシステムでコンテナイメージを作成します。イメージの作成には定義ファイルの利用が便利です。 以下は、Docker Hubからダウンロードした最新版AlmaLinuxのイメージを元に、開発環境やmoduleコマンドが利用可能なイメージを作成する定義ファイルの例(ファイル名:almalinux9.def)です。
Note
moduleコマンドについてはこちらのページをご参照ください。
# cat almalinux9.def
Bootstrap: docker
From: almalinux:9
%post
dnf groupinstall -y 'Development Tools'
dnf -y install \
environment-modules \
which
以下のコマンドでコンテナイメージ(ファイル名:almalinux9.sif)を作成します。
# apptainer build almalinux9.sif almalinux9.def
SIF形式のイメージファイルは内容を変更することができません。ファイルの追加などが必要な場合は代わりに以下のコマンドで一旦sandbox形式にします。
# apptainer build --sandbox --fix-perms almalinux9 almalinux9.def
この例ではカレントディレクトリに"almalinux9"というディレクトリが出来ます。そのディレクトリ配下にファイルを追加します。 また、以下のコマンドでコンテナ内でシェルを起動することができます。
# apptainer shell --writable almalinux9
Apptainer>
"Apptainer>"はコンテナ内で起動したシェルのプロンプトです。dnfコマンドでのパッケージの追加などが可能です。
Note
使用できるコマンドはコンテナのLinuxディストリビューションに依存します。
内容の変更が終わったらexitでコンテナのシェルを終了し、以下のコマンドでsandbox形式をSIF形式に変換します。
# apptainer build almalinux9.sif almalinux9
作成されたSIFファイルをscp等でワークサーバに転送します。
コンテナで実行するプログラムのコンパイル
上記手順で用意したコンテナイメージを使用してプログラムをコンパイルする例を紹介します。 ここではIntelコンパイラとIntel MPIを使用してIntel MPI Benchmarksをコンパイルします。
Note
Intel MPI Benchmarksのソースは以下のリンクから入手可能です。
Link to "Intel MPI Benchmarks"
入手したアーカイブをワークサーバのホームディレクトリ配下で展開します。
$> tar xf IMB-v2019.6.tar.gz
$> cd mpi-benchmarks-IMB-v2019.6
以下のコマンドでコンテナのシェルを起動します。
$> apptainer shell --bind /opt,/opt/Modules/modulefiles /path/to/almalinux9.sif
"apptainer shell"で起動されたコンテナのシェルでは以下がそのまま引き継がれ利用可能です。
- ユーザID
- ホームディレクトリ
- カレントディレクトリ
また"--bind"オプションを使用して、指定したディレクトリをコンテナからも利用可能にすることができます。 上記例ではIntelコンパイラとIntel MPIを使用するために/optを、moduleコマンドを使用するために/opt/Modules/modulefilesをそれぞれ指定しています。
Note
コンテナ起動時に以下の通知が表示されます。 これはKEKコンテナ環境にgocryptfsを導入していないために表示されます。 コンテナの利用には影響はありませんので、無視して頂いて問題ありません。
INFO: gocryptfs not found, will not be able to use gocryptfs
コンテナのシェルで以下のコマンドを実行しIntel MPI Benchmarksをコンパイルします。
Apptainer> source /usr/share/Modules/init/bash
Apptainer> module load intel/2020
Apptainer> export LANG=C
Apptainer> make IMB-MPI1
Apptainer> ls IMB-MPI1
IMB-MPI1
Apptainer> exit