Search

Motivation

GPU 클러스터를 팀에서 공용으로 사용하는 경우 사용자간 환경 분리와 유저 권한에 대한 관리가 필요하다.

이러한 환경에서는 서로 모순되는 요구사항이 존재한다.

  • 누구든 실수로 문제를 발생시킬 수 있기 때문에 모두에게 sudo 권한을 주는 것은 지양되어야 한다.
  • 연구 환경 세팅을 위해 apt 같은 sudo를 요구하는 패키지 관리 툴을 사용할 수 있어야한다.
  • 프로젝트에 따라 고립된 환경의 구축을 할 수 있어야한다.

Current situation

이러한 요구사항을 고려하기 위해 KDST에서는 그동안 Docker를 사용해왔다.

서버의 sudo group 대신 docker group에 사용자를 추가함으로써,

각각 연구자가 docker container 내부에서 자유롭게 환경을 세팅하고 연구를 수행할 수 있다.

 

Problem

하지만 Docker에도 sudo의 리스크를 완전히 지울 수는 없다.

OS-level virtualization을 활용하는 Docker 특성상 root user 권한을 지닌 docker daemon이 항상 실행되고 있고,
docker group에 속한 사용자는 간접적으로 root 권한을 가지게 되어 잠재적 위험(Docker Daemon Attack Surface)이 발생한다.

예) imagenet 등 공유 데이터 폴더를 컨테이너에 마운트해서 사용하다 실수로 삭제/변형 시킬 수 있음

 

Solution

컨테이너 실행과정에서 root 권한을 완전히 제거하면서도 연구수행에 지장이 없는 대안이 필요했다.

KDST에서는 HPC 환경에서 많이 사용되던 Singularity container를 적용하기로 결정했다.

Singularity는 Docker에 비해 더 낮은 수준의 가상화를 제공하고,
별도의 데몬이 없으며 instance 생성 시 완전히 유저 권한으로 container를 실행할 수 있다.

 

Singularity workflow in our lab

다만, singularity를 사용하더라도 원하는 환경을 구축하고 빌드하기 위해서는 sudo 권한이 필요하다.

  • 먼저, 별도의 컴파일 서버에 연구원들이 root user로 접속해 원하는 이미지(.sif)를 빌드하고

singularity sandbox directory 기능을 이용한 custum 이미지 빌드 과정

 

  • 2. 이미지를 GPU 서버에 복사한 후 container instance를 실행해 연구를 수행한다.
    $ Singularity shell -nv our_image.sif

위의 간단한 프로세스를 통해 공용 GPU 클러스터에서 여러 연구자들이 각자 환경을 구축하고 isolation 침해 등 잠재적 위협에 대한 우려 없이 사용할수 있게 된다.