본문 바로가기
Computing technics/Machine Learning

Apptainer 예제 및 Host Computer에 대한 독립성 확인

by 연구실5호 2024. 7. 8.

 

◎ Apptainer 설치

문서의 Ubuntu 환경의 installation을 참조하였다. (Nvidia Gpu를 WSL2에서 사용하기 위한 패키지 다운로드에 관한 설명도 위 문서에 있다. 추후 참고하겠다)

sudo apt update
sudo apt install -y software-properties-common

sudo add-apt-repository -y ppa:apptainer/ppa
sudo apt update

sudo apt install -y apptainer

 

apt 패키지 매니저로 설치한 apptainer 삭제 명령어는 아래와 같다.

sudo apt remove --purge apptainer
sudo apt autoremove

 

 

◎ Pytorch 환경 구성을 위한 apptainer definition 예제 파일

# 가상 환경
# Apptainer는 가상 환경을 제공하여 호스트 시스템과 격리된 상태에서 애플리케이션을 실행할 수 있다.
# 이는 컨테이너 내의 모든 종속성과 설정이 호스트 시스템에 영향을 미치지 않도록 한다.

# 컨테이너
# 컨테이너는 애플리케이션과 해당 애플리케이션의 모든 종속성을 포함하여, 시스템에서 격리된 환경에서 실행되는 경량의 가상화 단위다.
# 컨테이너는 기본 운영 체제 커널을 공유하지만, 각 컨테이너는 자체 파일 시스템을 가지고 독립적으로 실행된다.

Bootstrap: docker
From: python:3.9-slim

# 부트스트랩 --> 일반적으로 한 번 시작되면 알아서 진행되는 일련의 과정
# 부팅이 부트스트랩의 줄임말 (apptainer는 library, localimage, shub, yum, debootstrap, scratch 등의 여러 부트스트랩을 사용할 수 있다.)
# 위 코드 라인은 부팅을 위해 docker 이미지를 사용한다는 의미이다.
# docker 이미지는 컨테이너를 생성하는 템플릿 역할을 하게 된다.
# 마치 class가 instance를 찍어내는 템플릿이듯, docker 이미지가 container를 찍어내는 템플릿이다.
# 그리고 이 .def 파일이 일종의 configuration 파일로 여길 수 있다.

%post
    # 시스템 패키지 업데이트 및 필수 패키지 설치
    apt-get update && apt-get install -y \
    gcc \
    g++ \
    make \
    cmake \
    libatlas-base-dev \
    liblapack-dev \
    python3-pip \
    git \
    vim
    
    # python 버전에 맞는 pip 설치
    python3.9 -m pip install --upgrade pip install --upgrade pip

    # 필요한 python 패키지 설치
    pip install numpy==1.21.2
    pip install scipy==1.7.0
    pip install scikit-learn==1.2.0
    pip install matplotlib==3.4.3
    pip install pandas==1.3.2

%environment
    # 환경 변수 설정
    export LC_ALL=C.UTF-8
    export LANG=C.UTF-8

    # 가상 환경 활성화
    ##envDir="/opt/venv/ForPytorch"
    ##. "${envDir}/bin/activate"
    ##export PATH="${envDir}/bin":$PATH
    ##export PYTHONPATH="${envDir}/lib/ForPytorch/python3.9/site-packages":$PYTHONPATH

%runscript
    # 실행 스크립트 설정
    echo "[ Log ] : Container is executed which are installed python 3.9 and necessary packages"
    exec bash
    
%labels
    Author ParticlePhysicist
    Version 1.0

 

 

◎ Apptainer 관련 명령어

※ 정의 파일(definition)을 이용하여 image build하기

apptainer build ImagePytorchV1.sif DefpytorchV1.def
# apptainer build <만들고자 하는 이미지 파일 이름.sif> <미리 만들어둔 정의 파일 이름.def>

 

※ 만들어낸 image 파일을 사용하여 container 작동시키기 (container에서 나갈 때는 exit을 치고 엔터)

apptainer run ImagePytorchV1.sif

 

※ batch 모드 (apptainer 활성화 후 그 안에서 작업하는게 아닌 작업 후 host system에서 바로 종료)로 apptainer host system 환경에서 실행하기

(예제로 host system과 application들의 version을 비교해보자. 실제로 container가 host system에 대해 "격리" 되어 있는지 알 수 있을 것이다)

apptainer exec ImagePytorchV1.sif python3 --version
# 결과 : Python 3.9.19

apptainer exec ImagePytorchV1.sif python3 -m pip list
# 결과 : 
# Package         Version
# --------------- -----------
# colorama        0.4.6
# cycler          0.12.1
# joblib          1.4.2
# kiwisolver      1.4.5
# matplotlib      3.4.3
# numpy           1.21.2
# pandas          1.3.2
# pillow          10.4.0
# pip             24.1.2
# pyparsing       3.1.2
# python-dateutil 2.9.0.post0
# pytz            2024.1
# scikit-learn    1.2.0
# scipy           1.13.1
# setuptools      58.1.0
# six             1.16.0
# threadpoolctl   3.5.0
# wheel           0.43.0

apptainer exec ImagePytorchV1.sif which python3
# 결과 : /usr/local/bin/python3

apptainer exec ImagePytorchV1.sif which pip3
# 결과 : /usr/local/bin/pip3

 

각각 python 버전 및 pip list들과 프로그램의 위치를 host system에서 출력하면 아래와 같다.

Python 3.10.12

Package                Version
---------------------- -------------
blinker                1.4
colorama               0.4.6
command-not-found      0.3
cryptography           3.4.8
dbus-python            1.2.18
distro                 1.7.0
distro-info            1.1+ubuntu0.1
httplib2               0.20.2
importlib-metadata     4.6.4
jeepney                0.7.1
keyring                23.5.0
launchpadlib           1.10.16
lazr.restfulclient     0.14.4
lazr.uri               1.0.6
more-itertools         8.10.0
netifaces              0.11.0
numpy                  1.21.5
oauthlib               3.2.0
pip                    22.0.2
PyGObject              3.42.1
PyJWT                  2.3.0
pyparsing              2.4.7
PyRoot                 0.3.0
python-apt             2.4.0+ubuntu2
PyYAML                 5.4.1
SecretStorage          3.3.1
setuptools             59.6.0
six                    1.16.0
systemd-python         234
ubuntu-advantage-tools 8001
ufw                    0.36.1
unattended-upgrades    0.1
wadllib                1.3.6
wheel                  0.37.1
zipp                   1.0.

/usr/bin/python3

/usr/bin/pip3

 

차이가 있다는 것을 알 수 있을 것이다. 위 결과를 볼 때 apptainer와 host system은 환경이 다르다는 것을 알 수 있다.

'Computing technics > Machine Learning' 카테고리의 다른 글

컨테이너와 가상 머신  (0) 2024.07.08