JavaScriptを有効にしてください

ABCIで任意のDockerイメージを使用する

 ·  ☕ 3 min read

前提: ABCIとは

AI橋渡しクラウド(AI Bridging Cloud Infrastructure、以下「ABCI」という)は、国立研究開発法人 産業技術総合研究所が構築・運用する、AI技術開発・橋渡しのためのオープンな計算インフラストラクチャです。ABCIは、2018年8月に本格運用を開始し、2021年5月にABCI 2.0にアップグレードされました。
引用: https://docs.abci.ai/ja/

TL;DR

  • abciではSingularityしか使えない
    • Dockerはroot権限が奪われる危険性があるため,共用サーバでの使用は忌避される
    • しかし,どうしてもDockerイメージが使いたい場合ってあるよね
    • Singularity Imageに変換して使いましょう
      • 変換の仕方には2パターンある
        • パターン1. GitLabを使ってabci上で変換する
        • パターン2. ローカルで変換



引用: https://abci.ai/ja/how_to_use/data/ABCI-MiniCamp_Singularity_202105.pdf

最低知識

  • Docker Image は Singularity Imageに変換できる
  • GitLabはDocker Hubとは異なり,private projectsを無料で無制限に使える

ABCIで任意のDockerイメージを使用する (パターン1)

  • 流れ
    • ローカルからGitLabに当該Docker Imageをpush
    • abci上でsingularity remote loginでGitLabに接続
    • abci上で Docker Image を Singularity Imageに変換
    • Singularityでコンテナを立ち上げる

step0a. 当該Dockerfileをビルド

1
2
3
4
$ cd $M1
$ ls | grep Dockerfile
Dockerfile
$ docker build . -t m1project

step0b. GitLabにログイン (2FAで弾かれる場合はこちらを参照)

1
2
3
4
5
6
7
8
$ docker login registry.gitlab.com
Username: yuigawada
Password:
WARNING! Your password will be stored unencrypted in /home/initial/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

step1. ローカルからGitLabに当該Docker Imageをpush

1
2
docker tag m1project registry.gitlab.com/yuigawada/m1project
docker push registry.gitlab.com/yuigawada/m1project




step2. abci上でimageをpull
注: m1projectyuigawadaを適宜自分のものに切り替えてください.

1
2
3
module load singularitypro 
singularity remote login --username yuigawada docker://registry.gitlab.com
singularity pull m1project.sif  docker://registry.gitlab.com/yuigawada/m1project:latest


FATAL ERROR: Out of memory (cache_alloc)で怒られる場合 (パターン2)

  • パターン1だと,原因不明だがabci上だとメモリが足りないと言われることがある
  • そういうときは,ローカルでsifファイルを作りましょう

step1. sifファイルに変換 / scpでsifファイルを転送

1
2
3
4
5
6
$ docker run -v /var/run/docker.sock:/var/run/docker.sock \
-v `pwd`:/output \
--privileged -t --rm \
quay.io/singularity/docker2singularity \
m1project
$ scp XXX.sif abci:<<dist>>

SIFの実体はsquashfsという圧縮ファイルシステムで、ローカルのメモリ上で展開します。そのため、 ホームディレクトリ内に展開したライブラリをimportしまくるよりもストレージの負荷が低く、環境 によってはアプリケーションの起動等が有意に速いことがあります。特に多数のジョブを同時展開す る場合は有利かもしれません。
引用: https://abci.ai/ja/how_to_use/data/ABCI-MiniCamp_Singularity_202105.pdf

step2. 実行してみる (とりあえずインタラクティブジョブで動作確認)

1
2
module load singularitypro
singularity run m1project.sif

step3. バインドしていないもの以外はread-onlyなので,workspaceをバインド

1
2
qrsh -l rt_F=1 -l h_rt=2:00:00
singularity run --nv -B `pwd`/workspace:/root/workspace m1project.sif


→ 成功です🎉🎉🎉🎉🎉🎉🎉

共有

YuWd (Yuiga Wada)
著者
YuWd (Yuiga Wada)
機械学習・競プロ・iOS・Web