본문 바로가기
HPC

[HPC]Singularity

by Yoon_estar 2024. 11. 25.
728x90

개요

Singularity는 HPC(High-Performance Computing) 환경에 특화된 컨테이너 솔루션으로, 과학 연구 및 데이터 집약적인 작업을 위해 설계되었습니다. Docker와 유사하게 컨테이너 기술을 기반으로 하지만, HPC 환경의 요구 사항을 충족하도록 최적화되었습니다.

 

 

주요 특징

1. 보안 중심 설계

 

  • Singularity는 루트 권한 없이 컨테이너 실행이 가능합니다.
  • 일반 사용자가 컨테이너를 실행하더라도 호스트 시스템의 보안을 유지합니다.
  • 컨테이너 내부의 프로세스는 사용자의 권한으로 실행되며, 이는 HPC 클러스터와 같은 멀티유저 환경에서 매우 중요합니다.

 

2. HPC 환경 통합

 

  • Singularity는 MPI(Message Passing Interface), InfiniBand 등과 같은 HPC 라이브러리 및 네트워크를 완벽히 지원합니다.
  • 컨테이너 내부와 외부 간의 파일 시스템이 자연스럽게 통합됩니다. (예: 컨테이너 내에서 홈 디렉토리 사용 가능)

 

3. 이미지 형식

 

  • Singularity는 단일 .sif 파일 형식으로 컨테이너 이미지를 관리합니다. 이 형식은 이식성이 높고, 서명(Signing) 기능을 제공하여 보안을 강화합니다.
  • .sif 파일은 고정된 크기의 읽기 전용 이미지로 생성되어, HPC 시스템의 스토리지 효율성을 높이고 데이터 손상을 방지합니다.

 

4. 루트리스 실행

  • Docker와 달리 Singularity는 루트 권한이 없어도 컨테이너 생성과 실행이 가능합니다. 이는 공유 HPC 클러스터에서 안전하게 사용할 수 있도록 설계된 부분입니다.
  • Singularity는 루트 권한이 없기 때문에 데몬이 없습니다.

 

5. Singularity 와 Docker 의 비교

특징 Singularity Docker
HPC 지원 HPC 환경에 최적화 기본적으로 클라우드 및 서버 환경 중심
루트 권한 필요 없음 루트 권한 필요
파일 시스템 통합 호스트 파일 시스템과 투명하게 통합 기본적으로 파일 시스템 격리
이미지 형식 단일 .sif 파일 레이어 기반 .tar 형식
보안 컨테이너 실행 시 높은 보안 보안 문제 가능(루트 권한 등)

 

Singularity 설치 및 사용 예시

  • 설치
sudo apt-get install singularity
  • Docker 이미지 변환
singularity build my_image.sif docker://ubuntu:20.04
  • 컨테이너 실행
singularity exec my_image.sif python script.py

 

  • MPI 작업 실행
singularity exec --bind /path/to/data my_mpi_container.sif mpirun -np 4 ./my_mpi_program

 

Singularity 와 SGE(Sun Grid Engine) 예시

#!/bin/bash
#$ -cwd
#$ -pe mpi 4
#$ -N singularity_job

module load singularity
singularity exec my_container.sif mpirun -np $NSLOTS ./my_program

 

Singularity와 PBS의 사용 예시

#!/bin/bash
#PBS -N singularity_job
#PBS -l nodes=2:ppn=4
#PBS -q batch
#PBS -j oe

module load singularity
mpirun -np $PBS_NP singularity exec my_container.sif ./my_program

 

Singularity와 Slurm의 사용 예시

#!/bin/bash
#SBATCH --job-name=singularity_job
#SBATCH --ntasks=8
#SBATCH --nodes=2
#SBATCH --time=01:00:00
#SBATCH --output=output.log
#SBATCH --partition=compute

module load singularity
srun singularity exec my_container.sif ./my_program

 

Singularity와 HPC 스케줄러 통합의 주요 이점

  • 컨테이너와 스케줄러 간 자연스러운 호환성
  • 파일 시스템 접근 통합
  • MPI 및 GPU 지원
  • 작업 재현성
  • 유연한 하드웨어 활용
  • 복잡한 설치 과정의 다양한 소프트웨어 설치 필요 X

Singularity와 Software 예시

  • Lammps
singularity build lammps.sif docker://lammps/lammps:stable
singularity exec lammps.sif lmp -in input.in

 

  • VASP
singularity exec vasp.sif mpirun -np 16 vasp_std

 

  • ANSYS
singularity exec --nv ansys_container.sif fluent -g -i input.jou

 

Docker 이미지(singularity)로 Software 활용의 장점과 한계

 

장점

 

  • 의존성 관리 문제 해결: 서버 환경과 무관하게 동일한 소프트웨어 환경 실행 가능.
  • 시간 절약: 설치 및 환경 설정에 소요되는 시간 대폭 감소.
  • 이식성: 여러 서버에서 동일한 이미지를 사용하여 실행 가능.
  • 보안: Singularity는 루트 권한 없이 실행되므로, 서버 보안 위험이 줄어듭니다.
  • MPI 및 GPU 지원: 병렬 계산과 GPU 가속 작업 모두 지원.

 

한계

 

  • 상용 소프트웨어 라이선스: VASP, ANSYS와 같은 상용 소프트웨어는 라이선스 문제로 이미지를 직접 빌드하거나 설정해야 합니다.
  • 특화된 컨테이너 이미지 준비 필요: 기본적으로 제공되지 않는 소프트웨어는 Dockerfile 또는 Singularity 레시피를 작성해 컨테이너를 빌드해야 합니다.
  • 호환성: 일부 스케줄러나 클러스터 설정에서 추가적인 튜닝이 필요할 수 있습니다.

Singularity & Apptainer

Singularity에 대해 찾아보다가 이름이 바뀐 것을 확인할 수 있었습니다. Apptainer로 2021년 11월부터 변경되었습니다.

이는 Singularity 프로젝트가 Linux Foundation의 소프트웨어 관리 하에 오픈소스 커뮤니티로 통합되면서 이루어진 변화입니다. 이름 변경은 브랜드와 오픈소스 정신을 더 잘 반영하기 위한 결정으로, 기술적인 변경보다는 주로 프로젝트 관리와 관련된 부분에서 이루어진 점을 강조하고 있습니다.

 

( 커맨드가 singularity run -> apptainer run 으로 변경됨)