はじめに
この記事は、HPC向けのコンテナエンジンを非Linux環境(MacOS/Windows)のマシンで使う方向けです。とりわけ、自前でdefファイルを用意し、ビルドしてイメージファイルsifを作りたい方を対象としています。
想定されるのは、
- Singularity 3.3.0
- MacOS Calalina 10.15.6
です。上記のケース以外での動作の保証はできませんのでご了承ください。
Remote Buildの方法
HPC向けコンテナエンジンのSingularityで作業を行う際には、イメージファイル(SIF)を配置する必要が生じるケースがあります(参考: https://sc.ddbj.nig.ac.jp/ja/guide/software/singularity )
SIFは、自前で用意したDefinition File(def)をビルドすることで得られます。defファイルはDockerでいうところのDockerfileに相当します。自らでカスタマイズした環境でコードを動作させたい場合、defの用意とそのビルドは必須となります。
Linuxであれば、ビルドは、生成するイメージファイルをxxx.sif、ビルドするdefinitionファイルをzzz.defとすれば
$ sudo singularity build xxx.sif zzz.def
で可能です。MaxOSにおいては、ローカル環境でのビルドが(2020年8月時点では)不可能で、直接上の処理を実行すると、
FATAL: Only remote builds are supported on this platform
と言われてしまいます。リモートのビルドはSylabs CloudのGUIで実行することが可能ですが、コマンドを使ってのremote buildと比較して時間がかかってしまいます。そこで、コマンドのみでリモートビルトを行う方法を紹介します。
まず、Sylabs Cloudにサインインします。Google/GitHub/GitLab/Microsoftのアカウントで入ることができます。
次に、コマンドライン上でリモートログインの設定をします。
$ singularity remote login
を実行し、認証のためにAPI Keyの入力が求められることを確認します。
となります。https://cloud.sylabs.io/auth/tokens に移動すると、Access Tokenの生成を求められるので、"Enter Label as an alias of Token"の欄に任意のLabelを入力して、"Create a New Access Token"を実行します。
しばらくすると生成されたTokenが表示されるので、コピーして先ほどのコマンドラインでの"API Key: "にペーストします。
認証が成功すれば、コマンドラインでのRemote Buildが可能となります。
$ singularity build --remote xxx.sif zzz.def
を実行することで、SylabsのGUIなしでRemote Buildができるようになります。
生成されたSIFをコードを実行する環境に配置することで使えるようになります。一度認証をしてしまえば、これ以降はこのコマンドだけでビルドが可能です。
おわりに
MacOSユーザー向けにdefファイルのビルド方法を扱いました。Windowsでの動作検証等はできておらず、また任意のdefに対して確実にSIFの生成ができるという保証もできません。上で挙げた方法でうまくいかないケース等ありましたらお教えいただけますと幸いです。ご一読いただきありがとうございました。