From T3_KR_KNU
Revision as of 02:47, 11 September 2020 by Hanbi (Talk | contribs) (→Singularity를 이용하여 tensorflow 사용하기)
Contents
Singularity 사용법
컨테이너란?
- vmware로 대표되는 가상화 기술과는 다른 모듈식으로 프로그램을 격리하여 운영할 수 있는 기술입니다.
- 해상 운송에서 사용하는 컨테이너에서 이름을 따왔으며 OS 환경과 독립적으로 모듈식으로 설치하고 실행할 수 있습니다.
- 하드웨어 및 OS 계층을 두지 않고 프로세스만 격리하기 때문에 기존의 가상화 기술에 비해 실행속도가 월등히 빠릅니다.
- 대표적인 컨테이너 프로그램으로 docker(https://www.docker.com) 가 있습니다.
컨테이너의 장점?
- 프로그램의 배포 및 설치가 쉽습니다.
- 해당 프로그램용으로 이미 구축된 이미지를 배포하고 그 이미지를 이용해서 바로 원하는 프로그램을 실행할 수 있습니다.
- 이 부분에서 가상화 환경의 이미지와 비슷해보이나 월등이 작은 저장공간만을 사용하고 실행 속도 또한 빠릅니다.
- OS 환경과 독립적인 실행환경을 구축할 수 있습니다.
- ex) Scientific Linux 6 환경에서 Centos 7 환경에서 컴파일된 프로그램을 실행할 수 있습니다. 그 반대도 가능
- 격리 환경이므로 사용자 프로그램간의 간섭을 최소화 할 수 있습니다.
Singularity란?
Singularity(https://www.sylabs.io) 과학 연산에 적합하게 만들어진 컨테이너 프로그램입니다. 과학연산 작업을 수행할때 docker보다 더 빠른 속도를 보여줍니다.
기본 사용법
exec
singularity exec 컨테이너이미지 실행명령
- 준비된 이미지를 이용하여 단일 프로그램이나 스크립트를 실행합니다.
shell
singularity shell 컨테이너이미지
- 컨테이너 안에 interactive shell을 생성합니다.
사용 예제
Scientific Linux 6 환경에서 Centos 7 프로그램 실행하기 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)
Scientific Linux 6 환경에서 Centos 7 프로그램 실행하기 2
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 인것을 확인할 수 있습니다.
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” 명령을 실행하고 결과를 표시합니다
CentOS 7 환경에서 Scientific Linux 6 프로그램 실행하기
cmssw-cc7
$ source /cvmfs/cms.cern.ch/cmsset_default.sh $ cmssw-slc6 Singularity> cat /etc/redhat-release CentOS release 6.10 (Final)
tensorflow 실행하기
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에 관련 파일들이 다운로드 되어있지 않다면 많은 시간이 소요될 수 있습니다. 파일을 받았다면 두번째 부터는 빠르게 실행됩니다.
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 코드들 파일로 만들어 실행합니다.
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
경북대 UI에서 사용시 주의사항
- 보안문제로 cvmfs 외의 이미지는 현재 지원하고 있지 않습니다.
- 따라서 이미지 생성 및 다운로드 등 이미지 사용과 관련된 명령어는 현재 사용할 수 없습니다.
- cvmfs의 특성상 원하는 이미지가 로컬 cache에 저장되어 있지 않다면 파일 다운로드로 인하여 초기 실행에 많은 시간이 필요할 수도 있습니다.
참고문서
- Singularity 2.6 사용자 가이드 : https://www.sylabs.io/guides/2.6/user-guide/
- Singularity 2.6 관리자 가이드 : https://www.sylabs.io/guides/2.6/admin-guide/
- Singularity 3.0 사용자 가이드 : https://www.sylabs.io/guides/3.0/user-guide/
- Singularity 3.0 관리자 가이드 : https://www.sylabs.io/guides/3.0/admin-guide/