주요 컨텐츠로 이동

MLflow에서의 모델 평가

db-143-blog-og-image

발행일: 2022년 4월 19일

데이터 사이언스 및 ML4 min read

작성자: Mark Zhang

오늘날 많은 데이터 과학자와 ML 엔지니어는 모델 관리를 위해 MLflow를 사용합니다. MLflow는 실험, 재현성, 배포 및 모델 레지스트리를 포함하되 이에 국한되지 않는 ML 라이프사이클의 모든 측면을 사용자가 관리할 수 있도록 지원하는 오픈 소스 플랫폼입니다. ML 모델 개발 중 중요한 단계는 새로운 데이터셋에 대한 성능을 평가하는 것입니다.

동기

모델을 평가하는 이유는 무엇인가요?

모델 평가는 ML 라이프사이클의 필수적인 부분입니다. 이를 통해 데이터 과학자는 모델의 성능을 측정, 해석 및 설명할 수 있습니다. 모델이 현재 성능을 발휘하는 방식과 이유에 대한 통찰력을 제공하여 모델 개발 기간을 단축합니다. 특히 ML 모델의 복잡성이 증가함에 따라 ML 개발 여정에서 ML 모델의 성능을 신속하게 관찰하고 이해하는 능력은 필수적입니다.

MLflow에서의 모델 평가 현황

현재 많은 사용자가 python_function (pyfunc) 모델 플래버의 MLflow 모델 성능을 mlflow.evaluate API를 통해 평가하며, 이 API는 분류 및 회귀 모델 평가를 지원합니다. 이 API는 내장된 작업별 성능 지표, 모델 성능 플롯 및 모델 설명을 계산하여 MLflow Tracking 서버에 기록합니다.

MLflow 모델을 내장된 평가 지표 세트에 포함되지 않은 사용자 지정 지표와 비교하여 평가하려면 사용자 지정 모델 평가 플러그인을 정의해야 합니다. 여기에는 ModelEvaluator 인터페이스를 구현하는 사용자 지정 평가자 클래스를 만들고, MLflow 플러그인의 일부로 평가자 진입점을 등록하는 작업이 포함됩니다. 이러한 경직성과 복잡성은 사용자에게 부담이 될 수 있습니다.

내부 고객 설문 조사에 따르면 응답자의 75%가 정확도 및 손실과 같은 기본 지표 외에 전문적이고 비즈니스 중심적인 지표를 자주 또는 항상 사용한다고 답했습니다. 데이터 과학자는 이러한 사용자 지정 지표가 비즈니스 목표(예: 전환율)를 더 잘 설명하고 모델 예측 자체로는 포착되지 않는 추가 휴리스틱을 포함하기 때문에 자주 사용합니다.

이 블로그에서는 사용자 정의 지표를 사용하여 MLflow 모델을 평가하는 쉽고 편리한 방법을 소개합니다. 이 기능을 통해 데이터 과학자는 모델 평가 단계에서 이 로직을 쉽게 통합하고 추가적인 다운스트림 분석 없이 최상의 성능을 발휘하는 모델을 신속하게 결정할 수 있습니다.

*참고: MLflow 2.4에서 mlflow.evaluate는 LLM 텍스트, 텍스트 요약 및 질문 답변 모델을 지원하도록 확장되었습니다.

사용법

내장 지표

MLflow는 분류 모델과 회귀 모델 모두에 대해 일반적으로 사용되는 성능 및 모델 설명 지표 세트를 내장하고 있습니다. 이러한 지표에 대해 모델을 평가하는 것은 간단합니다. 테스트 데이터와 대상이 포함된 평가 데이터셋을 생성하고 mlflow.evaluate를 호출하기만 하면 됩니다.

모델 유형에 따라 다른 지표가 계산됩니다. 내장 지표에 대한 최신 정보는 mlflow.evaluate의 API 설명서에 있는 기본 평가자 동작 섹션을 참조하세요.

예시

다음은 분류 MLflow 모델이 내장 지표로 평가되는 간단한 예입니다.

먼저 필요한 라이브러리를 가져옵니다.

그런 다음 데이터셋을 분할하고, 모델을 학습시키고, 평가 데이터셋을 생성합니다.

마지막으로 MLflow 실행을 시작하고 mlflow.evaluate를 호출합니다.

MLflow UI에서 기록된 지표와 아티팩트를 찾을 수 있습니다.

 MLfow UI를 사용하여 기록된 지표 및 아티팩트 찾기.
 MLfow UI를 사용하여 기록된 지표 및 아티팩트 찾기.

사용자 지정 지표

사용자 지정 지표와 모델을 평가하려면 mlflow.evaluate API에 사용자 지정 지표 함수 목록을 전달하기만 하면 됩니다.

함수 정의 요구 사항

사용자 지정 지표 함수는 다음 순서로 두 개의 필수 매개변수와 하나의 선택적 매개변수를 받아야 합니다.

  1. eval_df: predictiontarget 열이 포함된 Pandas 또는 Spark DataFrame.

    예: 모델의 출력이 세 개의 숫자로 된 벡터인 경우 eval_df DataFrame은 다음과 같이 표시됩니다.

  2. builtin_metrics: 내장 지표가 포함된 사전.

    예: 회귀 모델의 경우 builtin_metrics는 다음과 같이 표시됩니다.

  3. (선택 사항) artifacts_dir: 사용자 지정 지표 함수가 MLflow에 기록하기 전에 생성된 아티팩트를 임시로 저장하는 데 사용할 수 있는 임시 디렉터리에 대한 경로.

    예: 특정 환경 설정에 따라 다르게 보일 수 있습니다. 예를 들어 MacOS에서는 다음과 같이 보일 수 있습니다.

    파일 아티팩트가 artifacts_dir가 아닌 다른 곳에 저장된 경우, mlflow.evaluate의 전체 실행이 완료될 때까지 유지되도록 하세요.

반환 값 요구 사항

함수는 생성된 지표를 나타내는 사전을 반환해야 하며, 생성된 아티팩트를 나타내는 두 번째 사전을 선택적으로 반환할 수 있습니다. 두 사전 모두에서 각 항목의 키는 해당 지표 또는 아티팩트의 이름을 나타냅니다.

각 지표는 스칼라여야 하지만, 아티팩트를 정의하는 데는 다양한 방법이 있습니다.

  • 아티팩트 파일의 경로
  • JSON 객체의 문자열 표현
  • pandas DataFrame
  • numpy 배열
  • matplotlib 그림
  • 다른 객체는 기본 프로토콜로 피클링 시도됩니다.

더 자세한 정의는 mlflow.evaluate의 문서를 참조하세요.

예시

사용자 정의 지표를 사용하는 구체적인 예시를 살펴보겠습니다. 이를 위해 California Housing 데이터셋에서 간단한 모델을 만들겠습니다.

그런 다음 데이터셋과 모델을 설정합니다.

이제 흥미로운 부분입니다. 사용자 정의 지표 함수와 사용자 정의 아티팩트를 정의합니다!!

마지막으로 이 모든 것을 연결하기 위해 MLflow 실행을 시작하고 mlflow.evaluate를 호출합니다.

로그된 사용자 정의 지표와 아티팩트는 기본 지표 및 아티팩트와 함께 찾을 수 있습니다. 빨간색 상자로 표시된 영역은 실행 페이지에서 로그된 사용자 정의 지표와 아티팩트를 보여줍니다.

로그된 지표

평가 결과 프로그래밍 방식으로 액세스하기

지금까지 MLflow UI에서 기본 및 사용자 정의 지표 모두에 대한 평가 결과를 살펴보았습니다. 하지만 mlflow.evaluate에서 반환하는 EvaluationResult 객체를 통해 프로그래밍 방식으로 액세스할 수도 있습니다. 위에서 살펴본 사용자 정의 지표 예시를 계속 진행하여 프로그래밍 방식으로 평가 결과에 액세스하는 방법을 살펴보겠습니다. (여기서부터 resultEvaluationResult 인스턴스라고 가정합니다).

지표의 이름과 스칼라 값을 모두 포함하는 result.metrics 딕셔너리를 통해 계산된 지표 세트에 액세스할 수 있습니다. result.metrics의 내용은 다음과 같아야 합니다.

마찬가지로 아티팩트 세트는 result.artifacts 딕셔너리를 통해 액세스할 수 있습니다. 각 항목의 값은 EvaluationArtifact 객체입니다. result.artifacts는 다음과 같아야 합니다.

예시 노트북

기술 가이드 eBook

MLOps의 Big Book

내부 작동 방식

아래 다이어그램은 이것이 내부적으로 어떻게 작동하는지 보여줍니다.

MLflow 모델 평가 내부 작동 방식

결론

이 블로그 게시물에서는 다음을 다루었습니다.

  • 모델 평가의 중요성과 MLflow에서 현재 지원되는 기능.
  • MLflow 사용자가 사용자 정의 지표를 MLflow 모델에 쉽게 통합할 수 있어야 하는 이유.
  • 기본 지표로 모델을 평가하는 방법.
  • 사용자 정의 지표로 모델을 평가하는 방법.
  • MLflow가 모델 평가를 백그라운드에서 처리하는 방법.

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

게시물을 놓치지 마세요

관심 있는 카테고리를 구독하고 최신 게시물을 받은편지함으로 받아보세요