Registry

Model Registry

notion image
DL을 돌리면서 많은 파일이 생깁니다. 각 Model마다 사용했던 image가 다르고, 파라미터가 저장되어있는 checkpoint도 생성됩니다.
Model Registry는 이러한 파일들과 model 버전관리를 해주는 Service입니다.
  • 모델 메타데이터 관리
    학습 완료된 모델의 중간/결과 등록 (모델명, 태그, 라벨)
  • 모델 버전 관리
    “Versions and Files” 탭에서 버전별 성능 비교 및 변경 사항 추적
  • 모델 파일 업로드/다운로드
    Python 기반 SDK를 통한 모델 파라미터 Up/Download 가능
  • Container Registry 연동
    학습에 필요한 라이브러리, 패키지 저장 및 Docker Image 버전 관리
    (이 부분은 나중에 질문예정. Model에 쓰였던 Image를 기록한다는건지)
  • Model Checkpoint 관리
    Base Model(사전 훈련 모델) 및 훈련 결과(Fine-tuning 모델)저장, 체크포인트 파일 자동 백업

Container Registry

notion image
MLXP에서 작업은 Container로 작업됩니다. (실제로는 Container를 포함한 Pod 단위)
Container에서 사용되는 Image는 Container Registry를 통해 관리됩니다.
Container Registry 서비스는 Ncloud의 Object Storage를 백엔드 저장소로 사용합니다.
저희의 경우, 하나의 큰 Project를 여러 파트로 나누어 작업하므로, 공통된 Image에서 작업합니다.
따라서, 동일한 하나의 Custom Image로 작업할 가능성이 높습니다.
(그렇다고 가정하고 작성했습니다.)

Custom Image 사용하기

notion image
  1. MLXP에서 기본 제공하는 Base Image를 바탕으로하여, 추가할 layer를 포함한 Dockerfile을 작성합니다.
    (기본 제공된 Base Image가 아니라, 저희가 직접 Base image를 선택할 수도 있습니다.)
  1. 생성된 Dockerfile로 Custom Image A를 Build하여 Container Registry에 push합니다.
  1. Container Registry는 Base Image에서 추가된 Layer와 Custom Image A를 위한 Manifest를 저장합니다.
  1. 모든 project에서 같은 Custom Image A 기반으로 Container를 생성하여 Pod에서 작업합니다.
  1. 만약 Custom Image A 에서 다른 기능이 필요하다면, Custom Image A를 Base image로 하여 다시 Dockerfile을 생성하고, Custom Image B를 Build합니다.
  1. Custom Image B 를 Container Registry에 Push하면, Custom Image A 에서 추가된 layer를 저장하고, Custom Image B를 위한 Manifest와 함께 관리합니다.

Pod(Notebook)을 실행할때의 Workflow

notion image
  1. 사용자가 Pod 실행을 요청하면, NKS의 Control Plane은 특정 Worker Node에 Pod 할당을 지시합니다.
  1. 해당 Node의 Container Runtime은 Container Registry에게 Custom Image를 요청합니다.
  1. Container Registry 는 이미지를 구성하는 레이어 정보가 적힌 Manifest 파일을 다시 전달합니다.
  1. Node는 Manifest 파일을 확인한 후, 자신의 NVMe에 이미 캐싱된 레이어가 있는지 대조합니다.
  1. Node에 없는 레이어들만 Container Registry에 추가로 요청하여 다운로드받고, 노드의 NVMe에 개별적으로 Caching 합니다.
  1. Pod이 실행될 때, Node의 파일 시스템이 NVMe에 저장된 layer들을 겹쳐서 하나의 Custom Image처럼 가상으로 구성합니다.
  1. 가상 환경 위에서 Container Process가 띄워지고,
    최종적으로 Pod 내에서 Notebook 작업이 가능해집니다.