원래 RTX3090을 사용하다가 VRAM이 모자라서 대여한 A100 서버를 사용할 일이 생겼다. 대여한 서버는 마스터 노드에 접속 -> GPU 노드를 할당받아 사용하도록 되어 있는데, 문제는 서버에 도커가 없다는 것...
계정에 sudo 권한도 없고 담당자가 아니라서 업체 연락도 불가능한 상황이라 다른 컨테이너 프레임워크를 사용해야 하는데... rootless docker나 podman도 안 되고, 사실상 남은 선택지는 레드햇 커널 자체에 설치돼 있는 singularity 뿐인 상황...
어떻게 잘 한번 만져서 해결해보자.
찾아보니 singularity는 podman과 다르게 바로 이미지를 사용할 수 없다고 한다. 그래서 도커 이미지를 변환해줘야 하는데...
먼저 Singularity 버전을 확인하고,
module avail | grep -i singularity
> singularity/3.7.1
Singularity를 로드한다.
module load singularity/3.7.1
사용할 도커 이미지명을 확인하고
# docker-compose.yaml 파일로 기동하는 경우
cat docker-compose.yaml | grep image:
Singularity 이미지로 변환하자.
시간이 한참 걸리니 커피나 한잔 하면서 논문을 보고 있으면 완료된다.
singularity pull [출력파일명].sif docker://[docker 이미지]
완료되면 파일 용량을 대강 확인해보고...
ls -lh [출력파일명].sif
크기가 맞다 싶으면 이제 인스턴스를 이용해서 백그라운드에 켜놓고 필요할때마다 접속하면 된다.
singularity instance start --nv -B $(pwd):/workspace -B [디렉토리]:[.sif 파일 경로] [컨테이너 이름 설정]
# 실행 확인
singularity instance list
접속하는 방식은 도커와 동일하다.
# 쉘로 접속 (Docker exec -it와 동일)
singularity shell instance://[컨테이너명]
# 특정 명령어만 실행하는 것도 가능
singularity exec instance://[컨테이너명] python your_script.py
singularity exec instance://[컨테이너명] nvidia-smi
singularity exec instance://[컨테이너명] bash