Amazon Web Services 한국 블로그

Amazon SageMaker 기반 완전 관리형 MLflow 정식 출시

오늘 Amazon SageMaker 기반 완전 관리형 MLflow 기능을 정식 출시합니다. 널리 사용되는 오픈 소스 도구인 MLflow는 기계 학습(ML) 팀이 전체 ML 수명 주기를 관리하는 데 중요한 역할을 합니다. 이번 신규 출시를 통해 고객은 이제 몇 단계만으로 MLflow 추적 서버를 손쉽게 설정 및 관리할 수 있어 프로세스를 간소화하고 생산성을 높일 수 있습니다.

데이터 과학자와 ML 개발자는 MLflow를 활용하여 여러 번의 모델 훈련 시도를 실험 내에서 실행으로 추적하고, 이러한 실행을 시각화를 사용하여 비교하고, 모델을 평가하고, 최상의 모델을 모델 레지스트리에 등록할 수 있습니다. Amazon SageMaker는 MLflow를 설정 및 관리하는 데 필요한 일상적인 업무 부담을 제거하여 ML 관리자가 AWS에서 안전하고 확장 가능한 MLflow 환경을 빠르고 효율적으로 구축할 수 있는 방법을 제공합니다.

SageMaker기반 관리형 MLflow의 핵심 구성 요소

SageMaker 기반 완전 관리형 MLflow 기능은 세 가지 핵심 구성 요소를 중심으로 구축되었습니다.

  • MLflow 추적 서버 – 몇 단계만 거치면 SageMaker Studio UI를 통해 MLflow 추적 서버를 구축할 수 있습니다. 이 독립형 HTTP 서버는 실행 및 실험 추적을 위한 여러 REST API 엔드포인트를 제공하므로 효율적인 ML 실험 모니터링을 시작할 수 있습니다. 보다 세밀한 보안 사용자 지정을 위해 AWS Command Line Interface(AWS CLI)를 사용할 수도 있습니다.
  • MLflow 백엔드 메타데이터 저장소 – 메타데이터 저장소는 실험, 실행 및 아티팩트와 관련된 모든 메타데이터가 유지되는 MLflow 추적 서버의 중요한 부분입니다. 여기에는 실험 이름, 실행 ID, 파라미터 값, 지표, 태그, 아티팩트 위치가 포함되어 ML 실험을 포괄적으로 추적 및 관리할 수 있습니다.
  • MLflow 아티팩트 저장소 – 이 구성 요소는 훈련된 모델, 데이터세트, 로그, 플롯 등 ML 실험 중에 생성된 모든 아티팩트를 저장할 위치를 제공합니다. Amazon Simple Storage Service(S3) 버킷을 사용하여 이러한 아티팩트를 안전하고 효율적으로 저장할 수 있는 고객 관리형 AWS 계정을 제공합니다.

MLflow가 포함된 Amazon SageMaker의 이점

Amazon SageMaker와 MLflow를 함께 사용하면 기계 학습 워크플로를 간소화하고 개선할 수 있습니다.

  • 포괄적인 실험 추적: 로컬 통합 개발 환경(IDE), SageMaker Studio의 관리형 IDE, SageMaker 훈련 작업, SageMaker 처리 작업, SageMaker Pipelines 전반에서 MLflow의 실험을 추적할 수 있습니다.
  • 완전한 MLflow 기능: MLflow 추적, MLflow 평가, MLflow 모델 레지스트리와 같은 모든 MLflow 실험 기능을 사용하여 훈련 반복 결과를 쉽게 비교하고 평가할 수 있습니다.
  • 통합 모델 거버넌스: MLflow에 등록된 모델은 SageMaker 모델 레지스트리에 자동으로 나타나며, 사용자 지정 컨테이너를 구축하지 않고도 MLflow 모델을 SageMaker 추론에 배포할 수 있는 통합 모델 거버넌스 환경을 제공합니다.
  • 효율적인 서버 관리: SageMaker API 또는 SageMaker Studio UI를 사용하여 필요에 따라 MLflow 추적 서버를 프로비저닝, 제거, 업그레이드할 수 있습니다. SageMaker가 추적 서버의 크기 조정, 패치 적용 및 지속적인 유지 관리를 관리하므로 고객이 기본 인프라를 관리할 필요가 없습니다.
  • 보안 강화: AWS Identity and Access Management(IAM)를 사용하여 MLflow 추적 서버에 안전하게 액세스할 수 있습니다. 특정 MLflow API에 대한 액세스를 허용 또는 거부하는 IAM 정책을 작성하여 ML 환경에 대한 강력한 보안을 보장합니다.
  • 효과적인 모니터링 및 거버넌스: 추적 서버의 효과적인 거버넌스를 지원하기 위해 Amazon EventBridgeAWS CloudTrail을 사용하여 MLflow 추적 서버의 활동을 모니터링합니다.

MLflow 추적 서버 사전 요구 사항(환경 설정)

  1. SageMaker Studio 도메인 생성
    새로운 SageMaker Studio 환경을 사용하여 SageMaker Studio 도메인을 생성할 수 있습니다.
  2. IAM 실행 역할 구성
    Amazon S3에서 아티팩트를 읽고 쓰고 SageMaker에 모델을 등록하기 위해 MLflow 추적 서버에 IAM 실행 역할이 필요합니다. Studio 도메인 실행 역할을 추적 서버 실행 역할로 사용하거나 추적 서버 실행 역할을 위한 별도의 역할을 생성할 수 있습니다. 새 역할을 생성하기로 선택한 경우 IAM 역할에 대한 자세한 내용은 SageMaker 개발자 가이드를 참조하세요. Studio 도메인 실행 역할을 업데이트하기로 선택한 경우 역할에 필요한 IAM 정책에 대한 자세한 내용은 SageMaker 개발자 가이드를 참조하세요.

MLflow 추적 서버 생성
연습에서는 추적 서버 버전(2.13.2), 추적 서버 크기(소형), 추적 서버 실행 역할(Studio 도메인 실행 역할) 등 MLflow 추적 서버를 생성하기 위한 기본 설정을 사용합니다. 추적 서버 크기에 따라 추적 서버가 지원할 사용량이 결정되며, 최대 25명의 사용자로 구성된 팀에는 소형 추적 서버를 사용하는 것이 좋습니다. 추적 서버 구성에 대한 자세한 내용은 SageMaker 개발자 가이드를 참조하세요.

시작하려면 앞서 자세히 설명한 환경 설정 중에 생성된 SageMaker Studio 도메인에서 애플리케이션 아래의 MLflow를 선택하고 생성을 선택합니다.

다음으로, 추적 서버의 이름아티팩트 스토리지 위치(S3 URI)를 제공합니다.

MLflow 추적 서버를 생성하는 데 최대 25분이 걸릴 수 있습니다.


훈련 실행 추적 및 비교
MLflow에 지표, 파라미터 및 아티팩트를 로깅하는 작업을 시작하려면 Jupyter Notebook과 생성 단계에서 할당된 추적 서버 ARN이 필요합니다. MLflow SDK를 사용하여 훈련 실행을 추적하고 MLflow UI를 사용하여 비교할 수 있습니다.


MLflow 모델 레지스트리의 모델을 SageMaker 모델 레지스트리에 등록하려면 AWS Signature V4를 사용하여 MLflow SDK에서 만든 모든 MLflow API 요청을 인증하기 위한 sagemaker-mlflow 플러그인이 필요합니다.

  1. MLflow SDK 및 sagemaker-mlflow 플러그인 설치
    노트북에서 먼저 MLflow SDK와 sagemaker-mlflow Python 플러그인을 설치합니다.
    pip install mlflow==2.13.2 sagemaker-mlflow==0.1.0
  2. 실험에서 실행 추적
    실험에서 실행을 추적하려면 다음 코드를 Jupyter Notebook에 복사합니다.

    import mlflow
    import mlflow.sklearn
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
    
    # 다음 값을 방금 생성한 추적 서버의 ARN으로 바꾸세요
    arn = 'YOUR-TRACKING-SERVER-ARN'
    
    mlflow.set_tracking_uri(arn)
    
    # Iris 데이터세트 로드
    iris = load_iris()
    X, y = iris.data, iris.target
    
    # 데이터를 훈련 세트와 테스트 세트로 분할
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    # 랜덤 포레스트 분류기 훈련
    rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
    rf_model.fit(X_train, y_train)
    
    # 테스트 세트에서 예측
    y_pred = rf_model.predict(X_test)
    
    # 평가 지표 계산
    accuracy = accuracy_score(y_test, y_pred)
    precision = precision_score(y_test, y_pred, average='weighted')
    recall = recall_score(y_test, y_pred, average='weighted')
    f1 = f1_score(y_test, y_pred, average='weighted')
    
    # MLflow 실행 시작
    with mlflow.start_run():
    # 모델 로깅
    mlflow.sklearn.log_model(rf_model, "random_forest_model")
    
    # 평가 지표 로깅
    mlflow.log_metric("accuracy", accuracy)
    mlflow.log_metric("precision", precision)
    mlflow.log_metric("recall", recall)
    mlflow.log_metric("f1_score", f1)
  3. MLflow UI에서 실행 상태 보기
    2단계에 표시된 노트북을 실행하면 MLflow UI에서 새 실행을 볼 수 있습니다.
  4. 실행 비교
    random_state를 변경하면서 이 노트북을 여러 번 실행하여 각 훈련 실행마다 다른 지표 값을 생성할 수 있습니다.

후보 모델 등록
4단계에서 설명한 대로 여러 실행을 비교한 후에는 MLflow 모델 레지스트리에서 요구 사항을 가장 잘 충족하는 지표를 가진 모델을 등록할 수 있습니다. 모델을 등록하면 프로덕션 배포에 대한 잠재적 적합성이 표시되며, 이 적합성을 검증하기 위한 추가 테스트가 있을 것입니다. MLflow에 등록된 모델은 통합 모델 거버넌스 환경을 위해 자동으로 SageMaker 모델 레지스트리에 나타나므로 MLflow 모델을 SageMaker 추론에 배포할 수 있습니다. 그러므로 실험에 MLflow를 주로 사용하는 데이터 과학자가 SageMaker 모델 레지스트리를 사용하여 모델의 프로덕션 배포를 거버넌스 및 관리하는 ML 엔지니어에게 모델을 넘길 수 있습니다.

다음은 MLflow 모델 레지스트리에 등록된 모델입니다.


다음은 SageMaker 모델 레지스트리에 등록된 모델입니다.

정리
MLflow 추적 서버는 일단 생성되면 삭제 또는 중지할 때까지 비용이 발생합니다. 추적 서버 과금은 서버 실행 시간, 선택한 크기, 추적 서버에 기록된 데이터의 양을 기준으로 합니다. 추적 서버를 사용하지 않을 때는 중지하여 비용을 절약하거나 API 또는 SageMaker Studio UI를 사용하여 추적 서버를 삭제할 수 있습니다. 요금에 대한 자세한 내용은 Amazon SageMaker 요금을 참조하세요.

정식 출시
MLflow가 포함된 SageMaker는 중국 및 미국 GovCloud 리전을 제외하고 SageMaker Studio를 사용할 수 있는 모든 AWS 리전에서 정식 버전으로 사용할 수 있습니다. 이 새로운 기능을 살펴보고 기계 학습 프로젝트에 제공하는 향상된 효율성 및 제어를 경험해 보시기 바랍니다. 자세히 알아보려면 MLflow가 포함된 SageMaker 제품 세부 정보 페이지를 방문하세요.

자세한 내용은 SageMaker 개발자 가이드를 참조하고 AWS re:Post for SageMaker 또는 평소 이용하는 AWS Support 담당자를 통해 피드백을 보내주세요.

Veliswa