From T3_KR_KNU
Jump to: navigation, search
(경북대 UI에서 사용시 주의사항)
(컨테이너내에서 데이터 전송 오류가 발생할 때)
 
(90 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== Singularity 사용법 ==
+
== Apptainer 사용법 ==
  
 
=== 컨테이너란? ===
 
=== 컨테이너란? ===
Line 14: Line 14:
 
** 이 부분에서 가상화 환경의 이미지와 비슷해보이나 월등이 작은 저장공간만을 사용하고 실행 속도 또한 빠릅니다.
 
** 이 부분에서 가상화 환경의 이미지와 비슷해보이나 월등이 작은 저장공간만을 사용하고 실행 속도 또한 빠릅니다.
 
* OS 환경과 독립적인 실행환경을 구축할 수 있습니다.  
 
* OS 환경과 독립적인 실행환경을 구축할 수 있습니다.  
** ex) Scientific Linux 6 환경에서 Centos 7 환경에서 컴파일된 프로그램을 실행할 수 있습니다. 그 반대도 가능
+
** ex) Scientific Linux 6 환경에서 Centos 7 환경에서 컴파일된 프로그램을 실행할 수 있습니다. 그 반대도 가능합니다.
 
* 격리 환경이므로 사용자 프로그램간의 간섭을 최소화 할 수 있습니다.
 
* 격리 환경이므로 사용자 프로그램간의 간섭을 최소화 할 수 있습니다.
  
=== Singularity란? ===
+
=== Apptainer란? ===
  
Singularity(https://www.sylabs.io) 과학 연산에 적합하게 만들어진 컨테이너 프로그램입니다. 과학연산 작업을 수행할때 docker보다 더 빠른 속도를 보여줍니다.
+
Apptainer (https://apptainer.org/) 과학 연산에 적합하게 만들어진 컨테이너 프로그램입니다. 과학연산 작업을 수행할때 docker보다 더 빠른 속도를 보여줍니다.
  
 
=== 기본 사용법 ===
 
=== 기본 사용법 ===
Line 25: Line 25:
 
==== exec ====
 
==== exec ====
  
  singularity exec 이미지 실행명령
+
  apptainer exec 컨테이너이미지 실행명령
  
 
* 준비된 이미지를 이용하여 단일 프로그램이나 스크립트를 실행합니다.
 
* 준비된 이미지를 이용하여 단일 프로그램이나 스크립트를 실행합니다.
Line 31: Line 31:
 
==== shell ====
 
==== shell ====
  
  singularity shell 이미지
+
  apptainer shell 컨테이너이미지
 +
 
 +
* 컨테이너 안에 interactive shell을 생성합니다.
  
 
=== 사용 예제 ===
 
=== 사용 예제 ===
  
 +
==== <u>apptainer를 이용하여 cc7 프로그램 실행하기</u> ====
  
==== Scientific Linux 6 환경에서 Centos 7 프로그램 실행하기 ====
+
$ 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)
  
===== shell 명령어 이용 =====
+
* cmssw-el8, cmssw-el9 등 본인이 원하는 환경을 실행할 수 있습니다.
 +
* 처음 실행할 때는 이미지를 다운로드 받기 때문에 시간이 걸릴수 있습니다.
  
singularity shell \
+
==== crab3 실행 ====
            --home $PWD:/srv \
+
            --bind /cvmfs \
+
            --contain --ipc --pid \
+
            /cvmfs/singularity.opensciencegrid.org/library/centos:centos7
+
  
* --home $PWD:/srv    ----현재 디렉토리를 컨테이너 안 /srv 디렉토리에 마운트하고 홈디렉토리로 지정 
+
===== <u># CMSSW 설치</u> =====
* --bind /cvmfs    ----> /cvmfs 디렉토리를  컨테이너 안 /cvmfs 디렉토리에 마운트
+
$ set SCRAM_ARCH=slc7_amd64_gcc12 // 아키텍쳐 설정
* --contain ---->  호스트 머신에서 사용자가 쓰기 가능한 디렉토리를 자동마운트 하는 것을 비활성화 (ex. $HOME, /tmp)
+
  $ source /cvmfs/cms.cern.ch/cmsset_default.sh
* --ipc    ----> 새로운 IPC 네임스페이스로 컨테이너 실행 
+
  $ scramv1 list CMSSW | grep CMSSW_13_ // CMSSW 조회
* --pid    ----> 새로운 PID 네임스페이스로 컨테이너 실행
+
  $ scramv1 project CMSSW CMSSW_13_3_3 // CMSSW 설치
* /cvmfs/singularity.opensciencegrid.org/library/centos:centos7  ---->  centos7 이미지
+
  
  $ ls
+
===== <u># crab 환경 설정</u> =====
aa  bb  cc
+
  $ source /cvmfs/cms.cern.ch/cmsset_default.sh
+
  $ cmsenv
  $ pwd
+
  $ source /cvmfs/cms.cern.ch/crab3/crab.sh
  /u/user/test/test1
+
 
   
+
===== <u># 작업 설정</u> =====
  $ cat /etc/redhat-release
+
  $ vi crab3config.py
  Scientific Linux release 6.8 (Carbon)
+
  $ vi job.py
   
+
 
  $ singularity shell \
+
===== <u># Grid proxy 생성</u> =====
 +
$ voms-proxy-init --voms cms
 +
 
 +
===== <u># 작업 실행</u> =====
 +
  $ crab submit -c crab3config.py
 +
 
 +
===== <u># 작업 조회</u> =====
 +
  $ crab status
 +
 
 +
==== tensorflow 실행하기 ====
 +
 
 +
===== shell =====
 +
 
 +
  $ apptainer shell \
 
  >            --home $PWD:/srv \
 
  >            --home $PWD:/srv \
 
  >            --bind /cvmfs \
 
  >            --bind /cvmfs \
 
  >            --contain --ipc --pid \
 
  >            --contain --ipc --pid \
  >               /cvmfs/singularity.opensciencegrid.org/library/centos:centos7
+
  >             /cvmfs/singularity.opensciencegrid.org/opensciencegrid/tensorflow-gpu:1.4
  Singularity: Invoking an interactive shell within container...
+
  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
 
   
 
   
  sh-4.2$ pwd
+
  import os
  /srv
+
  os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
 
   
 
   
  sh-4.2$ ls
+
  import tensorflow as tf
  aa  bb  cc
+
hello = tf.constant('Hello, TensorFlow!')
 +
  print(hello.numpy())
 
   
 
   
  sh-4.2$ cat /etc/redhat-release
+
  a = tf.constant(15)
  CentOS Linux release 7.5.1804 (Core)
+
  b = tf.constant(10)
 +
result = a + b
 +
print(result.numpy())
  
* 호스트 머신의 현재 디렉토리가 컨테이너 안에서 /srv 디렉토리로 마운트되어 있는 것을 확인할 수 있습니다.
 
* 컨테이너 머신의 OS 버전이 CentOS 7.5.1804 인것을 확인할 수 있습니다.
 
  
===== exec 명령어 이용 =====
+
  $ apptainer exec \
 
+
  $ singularity exec \
+
 
  >            --home $PWD:/srv \
 
  >            --home $PWD:/srv \
 
  >            --bind /cvmfs \
 
  >            --bind /cvmfs \
 
  >            --contain --ipc --pid \
 
  >            --contain --ipc --pid \
  >               /cvmfs/singularity.opensciencegrid.org/library/centos:centos7 \
+
  >             /cvmfs/singularity.opensciencegrid.org/opensciencegrid/tensorflow-gpu:1.4 \
  >               cat /etc/redhat-release
+
  >             ./HelloTensorflow.py
  WARNING: Container does not have an exec helper script, calling 'cat' directly
+
  'Hello, TensorFlow!'
  CentOS Linux release 7.5.1804 (Core)
+
  25
 +
$
  
==== CentOS 7 환경에서 Scientific Linux 6 프로그램 실행하기 ====
+
* shell 예제와 동일한 python 코드를 파일로 만들어 실행합니다.
  
* /cvmfs/singularity.opensciencegrid.org/library/centos:centos6 이미지를 사용하면 CentOS 6 환경에서 컴파일된 프로그램을 실행할 수 있습니다.
+
=== CVMFS singularity.opensciencegrid.org repository에서 제공하고 있는 Apptainer 이미지 ===
  
=== CVMFS singularity.opensciencegrid.org repository에서 제공하고 있는 singularity 이미지 ===
+
2025년 4월 현재 CVMFS singularity.opensciencegrid.org repository에서 제공하고 있는 Apptainer 이미지는 다음과 같습니다.
  
2018년 11월 현재 CVMFS singularity.opensciencegrid.org repository에서 제공하고 있는 singularity 이미지는 다음과 같습니다. 계속해서 업데이트 되니 본인에게 필요한 이미지가 있는지 확인해보세요.
+
※주의 : 계속해서 업데이트 되니, 본인에게 필요한 이미지가 있는지 확인해보시고 활용하시기 바랍니다. (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 259: Line 184:
 
* 보안문제로 cvmfs 외의 이미지는 현재 지원하고 있지 않습니다.
 
* 보안문제로 cvmfs 외의 이미지는 현재 지원하고 있지 않습니다.
 
* 따라서 이미지 생성 및 다운로드 등 이미지 사용과 관련된 명령어는 현재 사용할 수 없습니다.
 
* 따라서 이미지 생성 및 다운로드 등 이미지 사용과 관련된 명령어는 현재 사용할 수 없습니다.
* 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 3.0 사용자 가이드 : https://www.sylabs.io/guides/3.0/user-guide/
+
* Apptainer 사용자 가이드 : https://apptainer.org/docs/user/main/
* Singularity 2.6 관리자 가이드 : https://www.sylabs.io/guides/3.0/admin-guide/
+
* Apptainer 관리자 가이드 : https://apptainer.org/docs/admin/main/
* Singularity 2.6 사용자 가이드 : https://www.sylabs.io/guides/2.6/user-guide/
+
* Singularity 2.6 관리자 가이드 : https://www.sylabs.io/guides/2.6/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를 이용하여 코드 실행하기

참고문서