콘텐츠로 이동

시스템 아키텍처

LabPod은 클러스터, 외부 데이터베이스, 별도 컨트롤 플레인 없이 관리형 GPU 워크스테이션을 운영하려는 연구실을 위해 설계되었습니다. 구성 요소는 단출합니다. LabPod 서비스 하나, 로컬 데이터베이스 파일 하나, 그리고 실제 Linux 사용자가 소유하는 루트리스 Podman 컨테이너입니다.

LabPod은 워크스테이션에서 단일 서비스로 실행됩니다. Web UI는 바이너리에 내장되어 있어 별도 프런트엔드 서버를 운영할 필요가 없습니다. 데이터베이스는 로컬 파일로 저장되는 SQLite이며, LabPod의 백업 및 복원 흐름에 포함됩니다.

이 구조는 의도적인 선택입니다. 서비스 수가 적을수록 관리할 자격 증명, 업그레이드 단계, 운영 부담이 줄어듭니다.

각 LabPod 사용자는 호스트의 Linux 계정에 매핑됩니다. 워크스페이스 컨테이너는 rootless Podman으로 해당 Linux 계정에서 실행되므로, 워크스페이스 안에서 생성된 파일은 호스트에서도 같은 사용자가 소유합니다.

이 모델에서는 SSH 접근, 공유 데이터셋, 백업, 기존 연구실 스크립트의 저장소 동작이 예측 가능합니다. LabPod root 관리자 계정은 시스템을 관리하지만 사용자 워크스페이스를 소유하지 않습니다.

워크스페이스는 영속 컨테이너입니다. 워크스페이스를 시작하면 CPU, 메모리, 디스크, 마운트, 환경 변수, GPU 정책이 적용된 컨테이너를 생성하거나 다시 실행합니다. 워크스페이스를 중지하면 컴퓨팅 리소스는 해제되고 사용자의 영속 저장소는 유지됩니다.

JupyterLab, code-server, TensorBoard, MLflow, LabPod Terminal 같은 앱은 워크스페이스 내부에서 실행됩니다. 컨테이너를 다시 만들지 않고도 앱을 독립적으로 시작, 중지, 재시작할 수 있습니다.

연구자는 임의의 컨테이너 포트에 직접 연결하지 않습니다. LabPod은 플랫폼 UI와 API origin과 분리한 워크스페이스 게이트웨이의 인증 리버스 프록시로 앱을 노출합니다:

  • 트래픽을 전달하기 전에 세션 쿠키를 확인합니다.
  • 워크스페이스 ID와 앱 이름으로 워크스페이스 앱 URL을 라우팅합니다.
  • 터미널과 라이브 모니터링을 위한 WebSocket 트래픽도 같은 인증 경로를 사용합니다.
  • HTTP 활동은 리소스 가시성과 유휴 지표에 기록됩니다.

기본 리스너에서는 플랫폼이 24680, 워크스페이스 게이트웨이가 24681 포트를 사용합니다. 플랫폼은 /ws/ 요청을 게이트웨이로 리디렉션하고, 게이트웨이는 UI와 API 경로를 거부합니다. 이렇게 하면 컨테이너가 제공한 브라우저 코드가 LabPod 세션으로 플랫폼 데이터를 읽거나 바꾸는 일을 막을 수 있습니다. 방화벽과 리버스 프록시 배포 방법은 워크스페이스 게이트웨이를 참고하세요.

그 덕분에 브라우저 접근을 일관되게 유지하면서 워크스페이스별 서비스를 네트워크에 직접 노출하지 않아도 됩니다.

LabPod은 운영자 UI에서 실시간 CPU, 메모리, GPU, 프로세스, 디스크, 사용량 데이터를 보여줍니다. 워크스페이스별 지표에는 워크스페이스 로컬 텔레메트리를 사용하고 GPU 점유와 이미지 저장소처럼 워크스페이스를 가로지르는 신호에는 호스트 측 검사를 사용합니다.

사용량 샘플과 롤업은 로컬에 저장됩니다. 운영자는 별도 메트릭 스택을 추가하지 않고도 활성 부하를 확인하고 사용량 보고서를 내보내고 유휴 또는 리소스 사용량이 큰 워크스페이스를 찾을 수 있습니다.

GPU 정책은 운영자가 물리적 GPU별로 구성합니다.

모드접근 부여 방식
전체 GPU선택된 GPU에 대한 Container Device Interface(CDI) 디바이스 할당을 Podman에 전달
분할 GPU소프트웨어 공유 런타임이 워크스페이스의 GPU 메모리와 연산 점유율을 제한
MIG 슬라이스선택된 MIG 슬라이스에 대한 CDI 디바이스 할당을 Podman에 전달

LabPod은 GPU 워크스페이스를 시작하기 전에 할당량과 현재 할당 상태를 확인합니다. 목표는 공유 자원을 자유롭게 열어두는 것이 아니라 운영자가 명시적으로 제어하는 접근입니다.

LabPod의 기본 방향은 로컬 계정 기반과 rootless 실행입니다:

  • 워크스페이스 컨테이너는 non-root Linux 사용자로 실행됩니다.
  • 사용자는 Docker 소켓이나 root와 동등한 데몬에 접근하지 않습니다.
  • 세션은 서버 측에 저장되고 HttpOnly 쿠키로 전달됩니다.
  • 비밀번호는 메모리 집약적 비밀번호 해싱 알고리즘으로 저장됩니다.
  • 관리자 작업과 워크스페이스 라이프사이클 이벤트는 감사 로그에 기록됩니다.

네트워크에 노출되는 배포에서는 TLS와 보안 강화에 설명된 하드닝 설정을 사용하십시오.

LabPod은 대화형 단일 노드 GPU 워크스테이션을 위해 만들어졌습니다. 이 환경에는 클러스터 스케줄러나 큐보다 할당량, 가시성, 운영자 제어가 더 잘 맞습니다. Podman은 컨테이너를 Linux 계정 소유권과 자연스럽게 맞추고 단일 바이너리 모델은 소규모 팀의 일상 운영을 단순하게 유지합니다.