From T3_KR_KNU
Jump to: navigation, search

1 Singularity 사용법

1.1 컨테이너란?

  • vmware로 대표되는 가상화 기술과는 다른 모듈식으로 프로그램을 격리하여 운영할 수 있는 기술입니다.
  • 해상 운송에서 사용하는 컨테이너에서 이름을 따왔으며 OS 환경과 독립적으로 모듈식으로 설치하고 실행할 수 있습니다.
  • 하드웨어 및 OS 계층을 두지 않고 프로세스만 격리하기 때문에 기존의 가상화 기술에 비해 실행속도가 월등히 빠릅니다.
  • 대표적인 컨테이너 프로그램으로 docker(https://www.docker.com) 가 있습니다.

1.2 컨테이너의 장점?

  • 프로그램의 배포 및 설치가 쉽습니다.
    • 해당 프로그램용으로 이미 구축된 이미지를 배포하고 그 이미지를 이용해서 바로 원하는 프로그램을 실행할 수 있습니다.
    • 이 부분에서 가상화 환경의 이미지와 비슷해보이나 월등이 작은 저장공간만을 사용하고 실행 속도 또한 빠릅니다.
  • OS 환경과 독립적인 실행환경을 구축할 수 있습니다.
    • ex) Scientific Linux 6 환경에서 Centos 7 환경에서 컴파일된 프로그램을 실행할 수 있습니다. 그 반대도 가능
  • 격리 환경이므로 사용자 프로그램간의 간섭을 최소화 할 수 있습니다.

1.3 Singularity란?

Singularity(https://www.sylabs.io) 과학 연산에 적합하게 만들어진 컨테이너 프로그램입니다. 과학연산 작업을 수행할때 docker보다 더 빠른 속도를 보여줍니다.

1.4 기본 사용법

1.4.1 exec

singularity exec 컨테이너이미지 실행명령
  • 준비된 이미지를 이용하여 단일 프로그램이나 스크립트를 실행합니다.

1.4.2 shell

singularity shell 컨테이너이미지
  • 컨테이너 안에 interactive shell을 생성합니다.

1.5 사용 예제

1.5.1 Scientific Linux 6 환경에서 Centos 7 프로그램 실행하기 1

1.5.1.1 cmssw-cc7
$ source /cvmfs/cms.cern.ch/cmsset_default.sh
$ cmssw-cc7
Singularity> cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)


1.5.2 Scientific Linux 6 환경에서 Centos 7 프로그램 실행하기 2

1.5.2.1 shell
singularity shell \
           --home $PWD:/srv \
           --bind /cvmfs \
           --contain --ipc --pid \
           /cvmfs/singularity.opensciencegrid.org/library/centos:centos7
  • --home $PWD:/srv ----> 현재 디렉토리를 컨테이너 안 /srv 디렉토리에 마운트하고 홈디렉토리로 지정
  • --bind /cvmfs ----> /cvmfs 디렉토리를 컨테이너 안 /cvmfs 디렉토리에 마운트
  • --contain ----> 호스트 머신에서 사용자가 쓰기 가능한 디렉토리를 자동마운트 하는 것을 비활성화 (ex. $HOME, /tmp)
  • --ipc ----> 새로운 IPC 네임스페이스로 컨테이너 실행
  • --pid ----> 새로운 PID 네임스페이스로 컨테이너 실행
  • /cvmfs/singularity.opensciencegrid.org/library/centos:centos7 ----> centos7 이미지
$ ls
aa  bb  cc

$ pwd
/u/user/test/test1

$ cat /etc/redhat-release
Scientific Linux release 6.8 (Carbon)

$ singularity shell \
>             --home $PWD:/srv \
>             --bind /cvmfs \
>             --contain --ipc --pid \
>               /cvmfs/singularity.opensciencegrid.org/library/centos:centos7
Singularity: Invoking an interactive shell within container...

sh-4.2$ pwd
/srv

sh-4.2$ ls
aa  bb  cc

sh-4.2$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
  • shell 명령은 centos7 이미지를 이용하여 interactive shell을 생성합니다.
  • 호스트 머신의 현재 디렉토리가 컨테이너 안에서 /srv 디렉토리로 마운트되어 있는 것을 확인할 수 있습니다.
  • 컨테이너 머신의 OS 버전이 CentOS 7.5.1804 인것을 확인할 수 있습니다.
1.5.2.2 exec
$ singularity exec \
>             --home $PWD:/srv \
>             --bind /cvmfs \
>             --contain --ipc --pid \
>               /cvmfs/singularity.opensciencegrid.org/library/centos:centos7 \
>               cat /etc/redhat-release
WARNING: Container does not have an exec helper script, calling 'cat' directly
CentOS Linux release 7.5.1804 (Core)
  • centos7 컨테이너에서 “cat /etc/redhat-release” 명령을 실행하고 결과를 표시합니다

1.5.3 CentOS 7 환경에서 Scientific Linux 6 프로그램 실행하기

1.5.3.1 cmssw-cc7
$ source /cvmfs/cms.cern.ch/cmsset_default.sh
$ cmssw-slc6
Singularity> cat /etc/redhat-release
CentOS release 6.10 (Final)
1.5.3.2 crab3
$ source /cvmfs/cms.cern.ch/cmsset_default.sh
$ cmssw-slc6
Singularity>  # CMSSW 설치
Singularity>  ...
Singularity> # Grid 환경 설정
Singularity> source /cvmfs/grid.cern.ch/emi-ui-3.7.3-1_sl6v2/etc/profile.d/setup-emi3-ui-example.sh
Singularity> # Crab3 환경 설정 
Singularity> source /cvmfs/cms.cern.ch/crab3/crab.sh
Singularity> crab submit -c crab3config.py

1.5.4 tensorflow 실행하기

1.5.4.1 shell
$ singularity shell \
>             --home $PWD:/srv \
>             --bind /cvmfs \
>             --contain --ipc --pid \
>               /cvmfs/singularity.opensciencegrid.org/opensciencegrid/tensorflow:latest
Singularity: Invoking an interactive shell within container...

$ python
Python 2.7.12 (default, Dec  4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import os
>>> os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
>>>
>>> import tensorflow as tf
/usr/local/lib/python2.7/dist-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 ==   np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)
Hello, TensorFlow!
>>>
>>> a = tf.constant(15)
>>> b = tf.constant(10)
>>> print sess.run(a+b)
25
>>> quit
Use quit() or Ctrl-D (i.e. EOF) to exit
>>> quit()
$
$ exit
/bin/sh: 3: Cannot set tty process group (No such process)
  • 위의 각 명령 실행시 cvmfs local cache에 관련 파일들이 다운로드 되어있지 않다면 많은 시간이 소요될 수 있습니다. 파일을 받았다면 두번째 부터는 빠르게 실행됩니다.
1.5.4.2 exec
$ cat HelloTensorflow.py
#!/usr/bin/python

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print sess.run(hello)

a = tf.constant(15)
b = tf.constant(10)
print sess.run(a+b)
$ singularity exec \
>             --home $PWD:/srv \
>             --bind /cvmfs \
>             --contain --ipc --pid \
>               /cvmfs/singularity.opensciencegrid.org/opensciencegrid/tensorflow:latest \
>               ./HelloTensorflow.py
WARNING: Container does not have an exec helper script, calling './HelloTensorflow.py' directly
/usr/local/lib/python2.7/dist-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 ==  np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
Hello, TensorFlow!
25
  • shell 예제와 동일한 python 코드들 파일로 만들어 실행합니다.

1.6 CVMFS singularity.opensciencegrid.org repository에서 제공하고 있는 singularity 이미지

2018년 11월 현재 CVMFS singularity.opensciencegrid.org repository에서 제공하고 있는 singularity 이미지는 다음과 같습니다. 계속해서 업데이트 되니 본인에게 필요한 이미지가 있는지 확인해보세요.

$ ls -Rt /cvmfs/singularity.opensciencegrid.org/
/cvmfs/singularity.opensciencegrid.org/:
pycbc          poldracklab      jborrel00          rynge       ssthapa        dcshrum     atlas          whit2333
mintproject    opensciencegrid  continuumio        ligo        econtal        cathrine98  leofang        centos
evolinc        discoenv         clelange           cyverse     ankushumn      ucatlas     dmbala
anniesoft      dajunluo         agladstein         nipy        markito3       shilpac     nkern
library        bbockelm         efajardo           wipac       biocontainers  argonneeic  djw8605
maureeungaro   drtmfigy         pegasus            kreczko     jamessaxon     rjones30    dbcooper
jbustamante35  jasoncpatton     researchcomputing  blaylockbk  adwasser       chekanov    lincolnbryant

/cvmfs/singularity.opensciencegrid.org/pycbc:
pycbc-el7:latest   pycbc-el7:v1.7.3   pycbc-el7:v1.7.11  pycbc-el7:v1.10.0  pycbc-el7:v1.11.4   pycbc-el7:v1.11.13
pycbc-el7:v1.13.1  pycbc-el7:v1.7.4   pycbc-el7:v1.8.1   pycbc-el7:v1.10.1  pycbc-el7:v1.11.2   pycbc-el7:v1.11.14
pycbc-el7:v1.13.0  pycbc-el7:v1.7.5   pycbc-el7:v1.8.2   pycbc-el7:v1.11.0  pycbc-el7:v1.11.5   pycbc-el7:v1.12.3
pycbc-el7:v1.12.4  pycbc-el7:v1.7.6   pycbc-el7:v1.9.0   pycbc-el7:v1.11.1  pycbc-el7:v1.11.8
pycbc-el7:v1.7.0   pycbc-el7:v1.7.8   pycbc-el7:v1.9.1   pycbc-el7:v1.12.0  pycbc-el7:v1.12.2
pycbc-el7:v1.7.1   pycbc-el7:v1.7.9   pycbc-el7:v1.9.2   pycbc-el7:v1.12.1  pycbc-el7:v1.11.9
pycbc-el7:v1.7.2   pycbc-el7:v1.7.10  pycbc-el7:v1.9.4   pycbc-el7:v1.11.3  pycbc-el7:v1.11.11

/cvmfs/singularity.opensciencegrid.org/mintproject:
kimetrica:latest  ankush:latest  pihm:latest  dssat:latest  cycles:latest

/cvmfs/singularity.opensciencegrid.org/evolinc:
osg-rmta:2.1  evolinc-i:1.6  rmta:1.6

/cvmfs/singularity.opensciencegrid.org/anniesoft:
toolanalysis:latest

/cvmfs/singularity.opensciencegrid.org/library:
ubuntu:latest  python:3.4     openjdk:8       debian:unstable  debian:latest  centos:centos7  alpine:latest
gcc:latest     python:latest  openjdk:latest  debian:testing   fedora:latest  centos:centos6  openjdk:9
python:2.7     r-base:latest  julia:latest    debian:stable    centos:latest  busybox:latest

/cvmfs/singularity.opensciencegrid.org/maureeungaro:
clas12simulations:production

/cvmfs/singularity.opensciencegrid.org/jbustamante35:
testphytoshell:phytoshell

/cvmfs/singularity.opensciencegrid.org/poldracklab:
fmriprep:latest

/cvmfs/singularity.opensciencegrid.org/opensciencegrid:
osgvo-ubuntu-18.04:latest  osgvo-el7:latest         npjoodi:latest              osgvo-blaylockbk:latest
osgvo-el6:latest           osgvo-biomedinfo:latest  tensorflow:latest           osgvo:el7
osg-wn:3.3-el7             tensorflow-gpu:latest    tensorflow-gpu:1.4          osgvo:el6
osg-wn:3.3-devel-el7       osgvo-beagle:latest      osgvo-el6-feltus:latest     osg-3.3-wn-el7:latest
osg-wn:3.3-testing-el7     osgvo-r:3.5              osgvo-torch:latest          osg-3.3-wn-el6:latest
osg-wn:3.3-el6             osgvo-el6-cuda:latest    osgvo-ubuntu-xenial:latest

/cvmfs/singularity.opensciencegrid.org/discoenv:
osg-word-count:1.0.0

/cvmfs/singularity.opensciencegrid.org/dajunluo:
deepvariant:latest

/cvmfs/singularity.opensciencegrid.org/bbockelm:
cms:rhel7  cms:rhel6

/cvmfs/singularity.opensciencegrid.org/drtmfigy:
hjets_herwig7:latest  fbps:latest  herwig_hjets:latest

/cvmfs/singularity.opensciencegrid.org/jasoncpatton:

/cvmfs/singularity.opensciencegrid.org/rynge:
osg-mcf10-mod:latest      osgvo-el7-testing:latest   einsteintoolkit:latest  osgvo:el6
osgvo-el6-testing:latest  osg-tensorflow-gpu:latest  osgvo:el7

/cvmfs/singularity.opensciencegrid.org/ligo:
software:el7  software:jessie  software:jessie-proposed

/cvmfs/singularity.opensciencegrid.org/cyverse:
osg-gl:1.0  rsem-prepare:latest

/cvmfs/singularity.opensciencegrid.org/nipy:
mindboggle:latest

/cvmfs/singularity.opensciencegrid.org/wipac:
npx-el6:latest  npx-el6:test  skylab:1.0.0  skylab_smancina:1.0.0  fasig_scalable_radio_array:latest

/cvmfs/singularity.opensciencegrid.org/kreczko:
workernode:centos7  workernode:centos6

/cvmfs/singularity.opensciencegrid.org/blaylockbk:
miniconda3_osg:latest

/cvmfs/singularity.opensciencegrid.org/ssthapa:
freesurferosg:5.1  freesurferosg:5.3  freesurferosg:6.0  freesurferosg:latest
 
/cvmfs/singularity.opensciencegrid.org/econtal:
numpy-mkl:latest

/cvmfs/singularity.opensciencegrid.org/ankushumn:
rsatest:latest

/cvmfs/singularity.opensciencegrid.org/markito3:
gluex_docker_prod:latest  gluex_docker_devel:latest

/cvmfs/singularity.opensciencegrid.org/biocontainers:
blast:latest

/cvmfs/singularity.opensciencegrid.org/jamessaxon:
postgres-routing:a0  postgres-routing:latest

/cvmfs/singularity.opensciencegrid.org/adwasser:
slomo:latest

/cvmfs/singularity.opensciencegrid.org/dcshrum:
singularity:cowsay

/cvmfs/singularity.opensciencegrid.org/cathrine98:
bbmap:latest

/cvmfs/singularity.opensciencegrid.org/ucatlas:
xah:21.2.4-latest

/cvmfs/singularity.opensciencegrid.org/shilpac:
my_mindboggle:latest

/cvmfs/singularity.opensciencegrid.org/argonneeic:
fpadsim:v1.4.1  evochain:v0.1  fpadsim:v1.4  fpadsim:v1.3  fpadsim:flat

/cvmfs/singularity.opensciencegrid.org/rjones30:
gluextest:latest  gluex6:latest  gluex:latest

/cvmfs/singularity.opensciencegrid.org/chekanov:
centos7hepsim:latest

/cvmfs/singularity.opensciencegrid.org/atlas:
athanalysis:21.2.4  analysisbase:21.2.4

/cvmfs/singularity.opensciencegrid.org/leofang:
cthyb-ohmic:latest

/cvmfs/singularity.opensciencegrid.org/dmbala:
r-ebcrimage:latest  r-3.4.1:latest

/cvmfs/singularity.opensciencegrid.org/nkern:
21cmfast_env:latest  21cmfast:latest

/cvmfs/singularity.opensciencegrid.org/djw8605:
gluexprod:latest

/cvmfs/singularity.opensciencegrid.org/dbcooper:
fpadsim:singularity

/cvmfs/singularity.opensciencegrid.org/lincolnbryant:
atlas-wn:latest

/cvmfs/singularity.opensciencegrid.org/whit2333:
eic-slic:latest

/cvmfs/singularity.opensciencegrid.org/centos:
python-34-centos7:latest

1.7 경북대 UI에서 사용시 주의사항

  • 보안문제로 cvmfs 외의 이미지는 현재 지원하고 있지 않습니다.
  • 따라서 이미지 생성 및 다운로드 등 이미지 사용과 관련된 명령어는 현재 사용할 수 없습니다.
  • cvmfs의 특성상 원하는 이미지가 로컬 cache에 저장되어 있지 않다면 파일 다운로드로 인하여 초기 실행에 많은 시간이 필요할 수도 있습니다.

1.8 참고문서