本システムでは、Singularity 3.7を用いた、コンテナによるプログラム実行環境を整えることが可能です。本項では、コンテナイメージの準備、およびコンテナのカスタマイズとビルドの方法について説明します。
 

事前準備

    Singularityをwork領域を使用する場合は実行前に必ずnewgrpコマンドを実行してください。
    初期状態では、homeディレクトリ配下にSingularityのキャッシュデータが置かれます。homeディレクトリの容量は10GBとなりますので、大容量のデータとなる場合は以下の環境変数を指定し、work領域にキャッシュデータを置いてください。
    キャッシュデータを削除する場合は以下のコマンドを実施してください。

コンテナイメージの準備

    コンテナイメージの取得方法について説明します。コンテナイメージは、SQUID内のローカルレジストリ(HPDAフロントエンドからのみ)や、インターネット上の公開レジストリから取得することが可能です。また、ご自身で作成したコンテナイメージをSQUID内にアップロードすることもできます。
     

    ローカルレジストリからの取得

      ローカルレジストリのsingularityコンテナイメージを取得し、sandboxを作成します。本操作はHPDAフロントエンドでのみ可能です。例として、ローカルレジストリ/master_imageに登録したtestというコンテナイメージを取得する場合には、sandboxを作成したいディレクトリに移動し、以下のコマンドを実行します。

      コンテナイメージの取得に成功すると、カレントディレクトリにsandbox(上記の例ではtest)が作成されます。
       

    Singularity Libraryからの取得

      singularity libraryからsingularityコンテナイメージを取得し、sandboxを作成します。
      例として、singularity libraryより、centosのコンテナイメージを取得する場合には、sandboxを作成したいディレクトリに移動し、以下のコマンドを実行します。

      コンテナイメージの取得が成功すると、カレントディレクトリにsandbox(上記の例ではcentos)が作成されます。
       

    Docker Hubからの取得

      Docker HubからDockerコンテナイメージを取得し、singularityのsandboxを作成します。
      例として、Docker Hubより、centosのコンテナイメージを取得する場合には、sandboxを作成したいディレクトリに移動し、以下のコマンドを実行します。

      コンテナイメージの取得に成功すると、カレントディレクトリにsandbox(上記の例ではcentos)が作成されます。

     

コンテナイメージのカスタマイズ・ビルド

    コンテナイメージのカスタマイズ、およびビルドの方法について説明します。SQUIDでコンテナイメージをビルドするには、sandboxを直接カスタマイズしビルドする方法と、defファイルにカスタマイズ内容を記載しビルド時にカスタマイズする方法の二種類があります。
     

    sandboxを直接カスタマイズする方法

      sandboxを直接カスタマイズし、ビルドする方法について説明します。まずは、カスタマイズしたいベースコンテナイメージの取得を行い、予めsandboxを作成しておきます。次に、sandboxをコンテナとして起動します。例として、testというsandboxをカスタマイズするには、以下のコマンドを実行します。
      コンテナの起動に成功すると、Singularityのプロンプトが表示されます。上記のプロンプトより、dnf、pipによるパッケージの追加などを実施します。(パッケージの操作に使用するコマンドは、コンテナに格納したOSのディストリビューションにより異なります。)コンテナイメージのカスタマイズ完了後、exitコマンドでコンテナを停止します。
      続いて、コンテナイメージのビルドを行い、sifファイルを生成します。例として、testというsandboxをビルドし、test.sifを作成するには、以下のコマンドを実行します。
      ビルドに成功すると、カレントディレクトリにsifファイルが作成されます。
       

    defファイルにカスタマイズ内容を記載する方法

      defファイルにカスタマイズ内容を記載し、ビルド時にカスタマイズする方法について説明します。まずは、ビルドに使用するdefファイルを作成します。
      例として、ローカルレジストリに登録されたtestをベースコンテナイメージとしてカスタマイズを行う場合、defファイルは以下のようになります。

      defファイルの概要 ※詳細はsingularityのマニュアルをご参照ください。
      Bootstrap、From ベースイメージの種類、場所を記載します。
      %file ホストOSからコンテナにコピーしたいファイルを記載します。
      %post カスタマイズ用のコマンドを記載します。
      %runscript コンテナ起動時に自動実行する処理を記載します。

      defファイルの作成完了後、コンテナイメージのビルドを行い、sifファイルを生成します。例として、test.defというdefファイルを使用してビルドを行い、test.sifを作成するには、以下のコマンドを実行します。

      ビルドに成功すると、カレントディレクトリにsifファイルが作成されます。
       

コンテナイメージの利用

    以下はNVIDIAの提供するNGCからPytorchのコンテナイメージを取得し、SQUIDの計算ノードで実行する手順です。
    フロントエンドでPytorchのコンテナイメージを取得します。

    SQUIDで実行するためのジョブスクリプトを作成します。以下はPytorchのexample:mnistを使用しています。SQUIDの計算ノードはインターネットに接続されておりません。学習に必要なデータはフロントエンドで予めダウンロードしてください。
    環境変数SINGULARITY_BINDには、実行に必要なデータを置いているパスを設定する必要があります。以下の例ではwork領域とジョブ投入時のディレクトリを指定しています。


    qsubコマンドで上記のジョブスクリプトをSQUIDに転送すると、Singularityを使ってPytorchが実行されます。
     

参考資料