From T3_KR_KNU
Jump to: navigation, search
(Apptainer 사용법)
(컨테이너내에서 데이터 전송 오류가 발생할 때)
 
(60 intermediate revisions by 2 users not shown)
Line 14: Line 14:
 
** 이 부분에서 가상화 환경의 이미지와 비슷해보이나 월등이 작은 저장공간만을 사용하고 실행 속도 또한 빠릅니다.
 
** 이 부분에서 가상화 환경의 이미지와 비슷해보이나 월등이 작은 저장공간만을 사용하고 실행 속도 또한 빠릅니다.
 
* OS 환경과 독립적인 실행환경을 구축할 수 있습니다.  
 
* OS 환경과 독립적인 실행환경을 구축할 수 있습니다.  
** ex) Scientific Linux 6 환경에서 Centos 7 환경에서 컴파일된 프로그램을 실행할 수 있습니다. 그 반대도 가능
+
** ex) Scientific Linux 6 환경에서 Centos 7 환경에서 컴파일된 프로그램을 실행할 수 있습니다. 그 반대도 가능합니다.
 
* 격리 환경이므로 사용자 프로그램간의 간섭을 최소화 할 수 있습니다.
 
* 격리 환경이므로 사용자 프로그램간의 간섭을 최소화 할 수 있습니다.
  
Line 25: Line 25:
 
==== exec ====
 
==== exec ====
  
  Apptainer exec 컨테이너이미지 실행명령
+
  apptainer exec 컨테이너이미지 실행명령
  
 
* 준비된 이미지를 이용하여 단일 프로그램이나 스크립트를 실행합니다.
 
* 준비된 이미지를 이용하여 단일 프로그램이나 스크립트를 실행합니다.
Line 31: Line 31:
 
==== shell ====
 
==== shell ====
  
  Apptainer shell 컨테이너이미지
+
  apptainer shell 컨테이너이미지
  
 
* 컨테이너 안에 interactive shell을 생성합니다.
 
* 컨테이너 안에 interactive shell을 생성합니다.
Line 37: Line 37:
 
=== 사용 예제 ===
 
=== 사용 예제 ===
  
 +
==== <u>apptainer를 이용하여 cc7 프로그램 실행하기</u> ====
  
 +
$ source /cvmfs/cms.cern.ch/cmsset_default.sh
 +
$ cmssw-
 +
cmssw-alma8  cmssw-cc7    cmssw-cs8    cmssw-el5    cmssw-el7    cmssw-el9    cmssw-fc39    cmssw-slc6
 +
cmssw-cc6    cmssw-cc8    cmssw-cs9    cmssw-el6    cmssw-el8    cmssw-env    cmssw-rocky8  cmssw-ubi8
 +
 +
$ cmssw-cc7
 +
Singularity> cat /etc/redhat-release
 +
CentOS Linux release 7.9.2009 (Core)
  
 +
* cmssw-el8, cmssw-el9 등 본인이 원하는 환경을 실행할 수 있습니다.
 +
* 처음 실행할 때는 이미지를 다운로드 받기 때문에 시간이 걸릴수 있습니다.
  
==== <u>CentOS 7 환경에서 Scientific Linux 6 프로그램 실행하기</u> ====
+
==== crab3 실행 ====
  
===== cmssw-cc7 =====
+
===== <u># CMSSW 설치</u> =====
 +
$ set SCRAM_ARCH=slc7_amd64_gcc12  // 아키텍쳐 설정
 +
$ source /cvmfs/cms.cern.ch/cmsset_default.sh
 +
$ scramv1 list CMSSW | grep CMSSW_13_ // CMSSW 조회
 +
$ scramv1 project CMSSW CMSSW_13_3_3  // CMSSW 설치
  
 +
===== <u># crab 환경 설정</u> =====
 
  $ source /cvmfs/cms.cern.ch/cmsset_default.sh
 
  $ source /cvmfs/cms.cern.ch/cmsset_default.sh
  $ cmssw-slc6
+
  $ cmsenv
  Singularity> cat /etc/redhat-release
+
  $ source /cvmfs/cms.cern.ch/crab3/crab.sh
CentOS release 6.10 (Final)
+
  
===== <u>crab3</u> =====
+
===== <u># 작업 설정</u> =====
 +
$ vi crab3config.py
 +
$ vi job.py
  
$ source /cvmfs/cms.cern.ch/cmsset_default.sh
+
===== <u># Grid proxy 생성</u> =====
$ cmssw-slc6
+
  $ voms-proxy-init --voms cms
Singularity> # CMSSW 설치
+
 
Singularity> ...
+
===== <u># 작업 실행</u> =====
  Singularity> # Grid 환경 설정
+
  $ crab submit -c crab3config.py
Singularity> source /cvmfs/grid.cern.ch/emi-ui-3.7.3-1_sl6v2/etc/profile.d/setup-emi3-ui-example.sh
+
 
Singularity> # Crab3 환경 설정
+
===== <u># 작업 조회</u> =====
Singularity> source /cvmfs/cms.cern.ch/crab3/crab.sh
+
$ crab status
  Singularity> crab submit -c crab3config.py
+
  
 
==== tensorflow 실행하기 ====
 
==== tensorflow 실행하기 ====
Line 65: Line 81:
 
===== shell =====
 
===== shell =====
  
  $ singularity shell \
+
  $ apptainer shell \
 
  >            --home $PWD:/srv \
 
  >            --home $PWD:/srv \
 
  >            --bind /cvmfs \
 
  >            --bind /cvmfs \
 
  >            --contain --ipc --pid \
 
  >            --contain --ipc --pid \
  >               /cvmfs/singularity.opensciencegrid.org/opensciencegrid/tensorflow:latest
+
  >             /cvmfs/singularity.opensciencegrid.org/opensciencegrid/tensorflow-gpu:1.4
  Singularity: Invoking an interactive shell within container...
+
  Singularity :~>
   
+
  Singularity :~> python3
$ python
+
  Python 3.6.9 (default, Jan 26 2021, 15:33:00)
  Python 2.7.12 (default, Dec  4 2017, 14:50:18)
+
  [GCC 8.4.0] on linux
  [GCC 5.4.0 20160609] on linux2
+
 
  Type "help", "copyright", "credits" or "license" for more information.
 
  Type "help", "copyright", "credits" or "license" for more information.
 
  >>>
 
  >>>
Line 81: Line 96:
 
  >>>
 
  >>>
 
  >>> import tensorflow as tf
 
  >>> 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!')
 
  >>> hello = tf.constant('Hello, TensorFlow!')
  >>> sess = tf.Session()
+
  >>> print(hello.numpy())
>>> print sess.run(hello)
+
  b' Hello, TensorFlow!'
  Hello, TensorFlow!
+
 
  >>>
 
  >>>
 
  >>> a = tf.constant(15)
 
  >>> a = tf.constant(15)
 
  >>> b = tf.constant(10)
 
  >>> b = tf.constant(10)
  >>> print sess.run(a+b)
+
  >>> result = a + b
 +
>>> print(result.numpy())
 
  25
 
  25
>>> quit
 
Use quit() or Ctrl-D (i.e. EOF) to exit
 
 
  >>> quit()
 
  >>> quit()
 +
Singularity :~>
 +
Singularity :~> exit
 
  $
 
  $
$ exit
 
/bin/sh: 3: Cannot set tty process group (No such process)
 
  
 
* 위의 각 명령 실행시 cvmfs local cache에 관련 파일들이 다운로드 되어있지 않다면 많은 시간이 소요될 수 있습니다. 파일을 받았다면 두번째 부터는 빠르게 실행됩니다.
 
* 위의 각 명령 실행시 cvmfs local cache에 관련 파일들이 다운로드 되어있지 않다면 많은 시간이 소요될 수 있습니다. 파일을 받았다면 두번째 부터는 빠르게 실행됩니다.
Line 104: Line 116:
  
 
  $ cat HelloTensorflow.py
 
  $ cat HelloTensorflow.py
  #!/usr/bin/python
+
  #!/usr/bin/python3
 
   
 
   
 
  import os
 
  import os
Line 111: Line 123:
 
  import tensorflow as tf
 
  import tensorflow as tf
 
  hello = tf.constant('Hello, TensorFlow!')
 
  hello = tf.constant('Hello, TensorFlow!')
  sess = tf.Session()
+
  print(hello.numpy())
print sess.run(hello)
+
 
   
 
   
 
  a = tf.constant(15)
 
  a = tf.constant(15)
 
  b = tf.constant(10)
 
  b = tf.constant(10)
  print sess.run(a+b)
+
  result = a + b
 +
print(result.numpy())
  
  $ singularity exec \
+
 
 +
  $ apptainer exec \
 
  >            --home $PWD:/srv \
 
  >            --home $PWD:/srv \
 
  >            --bind /cvmfs \
 
  >            --bind /cvmfs \
 
  >            --contain --ipc --pid \
 
  >            --contain --ipc --pid \
  >               /cvmfs/singularity.opensciencegrid.org/opensciencegrid/tensorflow:latest \
+
  >             /cvmfs/singularity.opensciencegrid.org/opensciencegrid/tensorflow-gpu:1.4 \
  >               ./HelloTensorflow.py
+
  >             ./HelloTensorflow.py
  WARNING: Container does not have an exec helper script, calling './HelloTensorflow.py' directly
+
  'Hello, TensorFlow!'
/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
 
  25
 +
$
  
* shell 예제와 동일한 python 코드들 파일로 만들어 실행합니다.
+
* shell 예제와 동일한 python 코드를 파일로 만들어 실행합니다.
  
=== CVMFS singularity.opensciencegrid.org repository에서 제공하고 있는 singularity 이미지 ===
+
=== CVMFS singularity.opensciencegrid.org repository에서 제공하고 있는 Apptainer 이미지 ===
  
2018년 11월 현재 CVMFS singularity.opensciencegrid.org repository에서 제공하고 있는 singularity 이미지는 다음과 같습니다. 계속해서 업데이트 되니 본인에게 필요한 이미지가 있는지 확인해보세요.
+
2025년 4월 현재 CVMFS singularity.opensciencegrid.org repository에서 제공하고 있는 Apptainer 이미지는 다음과 같습니다.  
 +
 
 +
※주의 : 계속해서 업데이트 되니, 본인에게 필요한 이미지가 있는지 확인해보시고 활용하시기 바랍니다. (ls -Rt /cvmfs/singularity.opensciencegrid.org/)
  
 
  $ ls -Rt /cvmfs/singularity.opensciencegrid.org/
 
  $ ls -Rt /cvmfs/singularity.opensciencegrid.org/
 
  /cvmfs/singularity.opensciencegrid.org/:
 
  /cvmfs/singularity.opensciencegrid.org/:
  pycbc          poldracklab     jborrel00          rynge      ssthapa        dcshrum    atlas          whit2333
+
  lscsoft     pystamp     eic      eicweb      opencarp      htc     library     pycbc
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:
+
  /cvmfs/singularity.opensciencegrid.org/cwinpy:
  kimetrica:latest  ankush:latest  pihm:latest  dssat:latest  cycles:latest
+
  cwinpy-containers
 
   
 
   
  /cvmfs/singularity.opensciencegrid.org/evolinc:
+
  /cvmfs/singularity.opensciencegrid.org/cwinpy/cwinpy-containers:
  osg-rmta:2.1  evolinc-i:1.6  rmta:1.6
+
  cwinpy-dev-python38:latest
 
   
 
   
  /cvmfs/singularity.opensciencegrid.org/anniesoft:
+
  /cvmfs/singularity.opensciencegrid.org/matthew-pitkin:
  toolanalysis:latest
+
  cwinpy-containers
 
   
 
   
  /cvmfs/singularity.opensciencegrid.org/library:
+
  /cvmfs/singularity.opensciencegrid.org/matthew-pitkin/cwinpy-containers:
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:
+
  /cvmfs/singularity.opensciencegrid.org/patrickrmiles:
clas12simulations:production
+
 
   
 
   
  /cvmfs/singularity.opensciencegrid.org/jbustamante35:
+
  /cvmfs/singularity.opensciencegrid.org/scipp-atlas:
  testphytoshell:phytoshell
+
  mario-mapyde
 
   
 
   
  /cvmfs/singularity.opensciencegrid.org/poldracklab:
+
  /cvmfs/singularity.opensciencegrid.org/scipp-atlas/mario-mapyde:
fmriprep:latest
+
 
   
 
   
  /cvmfs/singularity.opensciencegrid.org/opensciencegrid:
+
  /cvmfs/singularity.opensciencegrid.org/rucio:
  osgvo-ubuntu-18.04:latest  osgvo-el7:latest        npjoodi:latest              osgvo-blaylockbk:latest
+
  igwn-rucio-client
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:
+
  /cvmfs/singularity.opensciencegrid.org/rucio/igwn-rucio-client:
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에서 사용시 주의사항 ===
 
=== 경북대 UI에서 사용시 주의사항 ===
Line 296: Line 185:
 
* 따라서 이미지 생성 및 다운로드 등 이미지 사용과 관련된 명령어는 현재 사용할 수 없습니다.
 
* 따라서 이미지 생성 및 다운로드 등 이미지 사용과 관련된 명령어는 현재 사용할 수 없습니다.
 
* cvmfs의 특성상 원하는 이미지가 로컬 cache에 저장되어 있지 않다면 파일 다운로드로 인하여 초기 실행에 많은 시간이 필요할 수도 있습니다.
 
* cvmfs의 특성상 원하는 이미지가 로컬 cache에 저장되어 있지 않다면 파일 다운로드로 인하여 초기 실행에 많은 시간이 필요할 수도 있습니다.
 +
 +
=== <u>컨테이너내에서 데이터 전송 오류가 발생할 때</u> ===
 +
 +
* xrdcp 나 데이터 전송시 다음과 같은 오류가 발생한다면
 +
Run: [FATAL] TLS error: resource temporarily unavailable: Unable to connect to cluster142.knu.ac.kr; error_ssl (destination)
 +
 +
* 컨테이너에서 xrdcp 실행전에 다음 환경변수를 추가해줘야합니다.
 +
export X509_CERT_DIR=/cvmfs/grid.cern.ch/etc/grid-security/certificates
 +
 +
=== HTCondor에서 apptainer를 이용하여 코드 실행하기 ===
 +
 +
* [[HTCondor#Apptainer.28Singularity.29.EB.A5.BC_.EC.9D.B4.EC.9A.A9.ED.95.98.EC.97.AC_.EC.BD.94.EB.93.9C_.EC.8B.A4.ED.96.89|HTCondor에서 apptainer를 이용하여 코드 실행하기]]
  
 
=== 참고문서 ===
 
=== 참고문서 ===
  
* Singularity 2.6 사용자 가이드 : https://www.sylabs.io/guides/2.6/user-guide/
+
* Apptainer 사용자 가이드 : https://apptainer.org/docs/user/main/
* Singularity 2.6 관리자 가이드 : https://www.sylabs.io/guides/2.6/admin-guide/
+
* Apptainer 관리자 가이드 : https://apptainer.org/docs/admin/main/
* Singularity 3.0 사용자 가이드 : https://www.sylabs.io/guides/3.0/user-guide/
+
* Singularity 3.0 관리자 가이드 : https://www.sylabs.io/guides/3.0/admin-guide/
+

Latest revision as of 02:32, 17 July 2025

Apptainer 사용법

컨테이너란?

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

컨테이너의 장점?

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

Apptainer란?

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

기본 사용법

exec

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

shell

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

사용 예제

apptainer를 이용하여 cc7 프로그램 실행하기

$ source /cvmfs/cms.cern.ch/cmsset_default.sh
$ cmssw-
cmssw-alma8   cmssw-cc7     cmssw-cs8     cmssw-el5     cmssw-el7     cmssw-el9     cmssw-fc39    cmssw-slc6
cmssw-cc6     cmssw-cc8     cmssw-cs9     cmssw-el6     cmssw-el8     cmssw-env     cmssw-rocky8  cmssw-ubi8

$ cmssw-cc7
Singularity> cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
  • cmssw-el8, cmssw-el9 등 본인이 원하는 환경을 실행할 수 있습니다.
  • 처음 실행할 때는 이미지를 다운로드 받기 때문에 시간이 걸릴수 있습니다.

crab3 실행

# CMSSW 설치
$ set SCRAM_ARCH=slc7_amd64_gcc12  // 아키텍쳐 설정
$ source /cvmfs/cms.cern.ch/cmsset_default.sh
$ scramv1 list CMSSW | grep CMSSW_13_ // CMSSW 조회
$ scramv1 project CMSSW CMSSW_13_3_3  // CMSSW 설치
# crab 환경 설정
$ source /cvmfs/cms.cern.ch/cmsset_default.sh
$ cmsenv
$ source /cvmfs/cms.cern.ch/crab3/crab.sh
# 작업 설정
$ vi crab3config.py
$ vi job.py
# Grid proxy 생성
$ voms-proxy-init --voms cms 
# 작업 실행
$ crab submit -c crab3config.py
# 작업 조회
$ crab status

tensorflow 실행하기

shell
$ apptainer shell \
>             --home $PWD:/srv \
>             --bind /cvmfs \
>             --contain --ipc --pid \
>             /cvmfs/singularity.opensciencegrid.org/opensciencegrid/tensorflow-gpu:1.4
Singularity :~>
Singularity :~> python3
Python 3.6.9 (default, Jan 26 2021, 15:33:00)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import os
>>> os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
>>>
>>> import tensorflow as tf
>>>
>>> hello = tf.constant('Hello, TensorFlow!')
>>> print(hello.numpy())
b' Hello, TensorFlow!'
>>>
>>> a = tf.constant(15)
>>> b = tf.constant(10)
>>> result = a + b
>>> print(result.numpy())
25
>>> quit()
Singularity :~> 
Singularity :~> exit
$
  • 위의 각 명령 실행시 cvmfs local cache에 관련 파일들이 다운로드 되어있지 않다면 많은 시간이 소요될 수 있습니다. 파일을 받았다면 두번째 부터는 빠르게 실행됩니다.
exec
$ cat HelloTensorflow.py
#!/usr/bin/python3

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

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

a = tf.constant(15)
b = tf.constant(10)
result = a + b
print(result.numpy())


$ apptainer exec \
>             --home $PWD:/srv \
>             --bind /cvmfs \
>             --contain --ipc --pid \
>             /cvmfs/singularity.opensciencegrid.org/opensciencegrid/tensorflow-gpu:1.4 \
>             ./HelloTensorflow.py
'Hello, TensorFlow!'
25
$ 
  • shell 예제와 동일한 python 코드를 파일로 만들어 실행합니다.

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

2025년 4월 현재 CVMFS singularity.opensciencegrid.org repository에서 제공하고 있는 Apptainer 이미지는 다음과 같습니다.

※주의 : 계속해서 업데이트 되니, 본인에게 필요한 이미지가 있는지 확인해보시고 활용하시기 바랍니다. (ls -Rt /cvmfs/singularity.opensciencegrid.org/)

$ ls -Rt /cvmfs/singularity.opensciencegrid.org/
/cvmfs/singularity.opensciencegrid.org/:
lscsoft      pystamp      eic      eicweb      opencarp      htc      library      pycbc

 ...
 <중략>
 ...

/cvmfs/singularity.opensciencegrid.org/cwinpy:
cwinpy-containers

/cvmfs/singularity.opensciencegrid.org/cwinpy/cwinpy-containers:
cwinpy-dev-python38:latest

/cvmfs/singularity.opensciencegrid.org/matthew-pitkin:
cwinpy-containers

/cvmfs/singularity.opensciencegrid.org/matthew-pitkin/cwinpy-containers:

/cvmfs/singularity.opensciencegrid.org/patrickrmiles:

/cvmfs/singularity.opensciencegrid.org/scipp-atlas:
mario-mapyde

/cvmfs/singularity.opensciencegrid.org/scipp-atlas/mario-mapyde:

/cvmfs/singularity.opensciencegrid.org/rucio:
igwn-rucio-client

/cvmfs/singularity.opensciencegrid.org/rucio/igwn-rucio-client:

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

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

컨테이너내에서 데이터 전송 오류가 발생할 때

  • xrdcp 나 데이터 전송시 다음과 같은 오류가 발생한다면
Run: [FATAL] TLS error: resource temporarily unavailable: Unable to connect to cluster142.knu.ac.kr; error_ssl (destination)
  • 컨테이너에서 xrdcp 실행전에 다음 환경변수를 추가해줘야합니다.
export X509_CERT_DIR=/cvmfs/grid.cern.ch/etc/grid-security/certificates

HTCondor에서 apptainer를 이용하여 코드 실행하기

참고문서