Model Registry
GitLab v19.1Model Registry는 모델 버전 관리를 담당하는 MLOps 라이프사이클의 구성 요소입니다. 데이터 계보(Data lineage) 모든 엔티티는 프로젝트에 속하며, 해당 프로젝트에 접근 권한이 있는 사용자만 엔티티와 상호 작용할 수 있습니다.
Model Registry는 모델 버전 관리를 담당하는 MLOps 라이프사이클의 구성 요소입니다. 아티팩트 추적에 그치지 않고, 각 모델과 관련된 메타데이터도 추적하는 역할을 합니다. 예를 들면 다음과 같습니다:
-
성능(Performance)
-
파라미터(Parameters)
-
데이터 계보(Data lineage)
데이터 토폴로지#
모든 엔티티는 프로젝트에 속하며, 해당 프로젝트에 접근 권한이 있는 사용자만 엔티티와 상호 작용할 수 있습니다.
Ml::Model#
-
이름 및 설명과 같이 모델에 대한 일반 정보를 보유합니다.
-
각 모델에는 동일한 이름을 가진 기본
Ml::Experiment가 있으며, 이 실험에 candidates가 기록됩니다. -
여러 개의
Ml::ModelVersion을 가집니다.
Ml::ModelVersion#
-
모델의 버전입니다.
-
동일한 프로젝트, 이름, 버전을 가진
Packages::Package와 연결됩니다. -
버전은 시맨틱 버저닝(semantic versioning)을 사용해야 합니다.
Ml::Experiment#
- 비교 가능한
Ml::Candidates의 컬렉션입니다.
Ml::Candidate#
-
모델 버전의 후보(candidate)입니다.
-
여러 파라미터(
Ml::CandidateParams)를 가질 수 있으며, 이는 일반적으로 훈련 코드에 전달되는 구성 변수입니다. -
여러 성능 지표(
Ml::CandidateMetrics)를 가질 수 있습니다. -
여러 사용자 정의 메타데이터(
Ml::CandidateMetadata)를 가질 수 있습니다.
MLflow 호환 레이어#
데이터 사이언티스트가 GitLab Model Registry를 더 쉽게 사용할 수 있도록, MLflow 클라이언트와의 호환 레이어를 제공합니다. GitLab은 별도의 MLflow 인스턴스를 제공하지 않습니다. 대신, GitLab 자체가 MLflow의 인스턴스로 동작합니다. 이 방식은 데이터를 GitLab 데이터베이스에 저장하여 사용자의 신뢰성과 기능성을 향상시킵니다. 호환 레이어에 관한 사용자 문서를 참조하세요.
호환 레이어는 lib/api/ml/mlflow에서
MLflow REST API를 복제하는 방식으로 구현되어 있습니다.
MLflow의 일부 용어는 GitLab에서 다르게 명명됩니다:
-
MLflow의
Run은 GitLab에서Candidate입니다. -
MLflow의
Registered model은 GitLab에서Model입니다.
테스트 환경 설정#
GitLab을 백엔드로 사용하여 MLflow 스크립트를 테스트하려면:
- MLflow를 설치합니다:
mkdir mlflow-compatibility
cd mlflow-compatibility
pip install mlflow jupyterlab
- 해당 디렉터리에
mlflow_test.py라는 이름의 Python 파일을 만들고 다음 코드를 작성합니다:
import mlflow
import os
from mlflow.tracking import MlflowClient
os.environ["MLFLOW_TRACKING_TOKEN"]=''
os.environ["MLFLOW_TRACKING_URI"]='<your gitlab endpoint>/api/v4/projects/<your project id>/ml/mlflow'
client = MlflowClient()
client.create_experiment("My first experiment")
- 스크립트를 실행합니다:
python mlflow_test.py
- 프로젝트의
/-/ml/experiments로 이동합니다. 실험이 생성되어 있어야 합니다.
구현하려는 클라이언트 메서드를 호출하도록 스크립트를 수정할 수 있습니다. 더 완전한 예시는 GitLab Model experiments 예제를 참조하세요.