Singularityでdefファイルをリモートでビルドする方法 (MacOS向け)


はじめに

この記事は、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の生成ができるという保証もできません。上で挙げた方法でうまくいかないケース等ありましたらお教えいただけますと幸いです。ご一読いただきありがとうございました。