◎ Apptainer 설치
- 공식 문서 URL (문서는 본인이 설치하고자 하는 apptainer 버전 문서인지 확인할 것) : https://apptainer.org/docs/admin/1.3/installation.html
문서의 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 |
|---|