MLflow에 대해서 알아보자 - Tracking

개념

MLflow Tracking은 데이터 과학 코드의 일부를 실행하는 실행(runs)개념을 중심으로 구성된다. 각 실행은 다음 정보를 기록한다.

  • 코드버전 : MLflow Project 에서 실행 된 경우 실행에 사용된 Git 커밋해시이다.
  • 시작 및 종료 시간
  • 소스 : 실행을 시작할 파일의 이름 또는 ML Project 에서 실행하는 경우 실행의 프로젝트 이름 및 entry point
  • 파라미터 : 선택한 키-값 입력 매개변수다. 키와 값은 모두 문자열이다.
  • 매트릭 : 값이 숫자인 키-값 매트릭이다. 각 매트릭은 실행 과정에서 업데이트 될 수 있으며 (예: 모델의 손실 함수가 수렴되는 방식을 추적하기 위해) MLflow는 매트릭의 전체 기록을 기록하고 시각화할 수 있다.
  • 아티팩트 : 모든 형식의 출력 파일. 예를들어 이미지 (예:PNG), 모델 (예: scikit-learn model) 및 데이터 파일 (예: Parquet파일)을 아티팩트로 기록할 수 있다. -> 여기 HM 영상을 저장할 수도???

실행이 기록되는 위치

MLflow 실행은 로컬 파일, SQLAlchemy 호환 데이터베이스 또는 추적 서버에 원격으로 기록 될 수 있다. 기본적으로는 MLflow Python API 로그는 mlrun 프로그램을 실행할 때마다 디렉토리의 파일에 로컬로 실행된다. 그런 다음 mlflow ui 를 실행하여 기록된 실행을 볼 수 있다.

원격으로 실행을 기록하려면 MLFLOW_TRACKING_URI 환경 변수를 Tracking 서버의 URI로 설정하거나 mlflow.set_tracking_uri() 함수를 호출 한다.

원격 추적 URI에는 여러 종류가 있다.

어떻게 실행 및 아티팩트가 기록 되는가

다음은 여러 시나리오 중 하나이다. 원격의 저장소에 접속하고 기록하는 형태가 되겠다.

MLflow Tracking Server, Backend Storage, Artifact Storage가 원격 호스트에 상주하는 분산 아키텍처를 지원한다. 이 예제 시나로은 원격 MLflow Tracking Server, Backend Entity Storage 용 Postgres Database, 아티팩트 스토리지 용 S3 버킷이 있는 아키텍처를 보여준다.

시나리오4

모든 실행의 MLflow 엔티티를 기록하기 위해 MLflow 클라이언트 일련의 REST 요청을 통해 Tracking 서버와 상호작용 한다.

  • MLflow 클라이언트는 RestStore 인스턴스를 생성하고, MLflow 엔티티를 기록하는 REST API 요청을 보낸다.
  • Tracking 서버는 SQLAlchemyStore의 인스턴스를 만들고, 원격 호스트에 연결하여 데이터베이스에 MLflow 엔터티를 삽입한다.

아티팩트 로깅의 경우 MLflow 클라이언트 원격 Tracking 서버 및 아티팩트 스토리지와 상호작용 한다.

  • MLflow 클라이언트는 RestStore를 사용하여 REST 요청을 보내 Tracking 서버에서 아티팩트 저장소 URI 위치를 가져온다.
  • Tracking 서버는 아티팩트 저장소 URI 위치를 응답한다. (an S3 storage URI in this case)

  • MLflow 클라이언트는 S3ArtifactRepository의 인스턴스를 생성하고 boto 클라이언트 라이브러리를 사용하여 원격 AWS 호스트에 연결하고 아티팩트를 S3 버킷 URI 위치에 업로드 한다.

실행한 데이터 로깅

MLflow Python, R, Java 또는 REST API를 사용하여 실행할 데이터를 로깅할 수 있다.

매트릭을 사용한 성능 추적

Tracking API의 log 메서드를 사용하여 MLflow 매트릭을 기록한다.이 로그 방법은 x축에서 매트릭 값을 구별하기 위한 두 가지 대체 방법인 timestampstep을 지원한다.

매트릭이 기록된 시간을 나타내는 timestamp 는 선택적 long 값이다. timestamp 의 기본값은 현재 시간이다. step 훈련 진행(학습 반복 횟수, eopch 수)을 나타내는 선택적 정수이다. step의 기본값은 0이며 다음과 같은 요구 사항 및 속성이 있다.

  • 64비트 정수값이어야 한다.
  • 음수 일 수 있다.
  • 연속 쓰기 호출에서 순서가 잘못될 수 있다. 예를들어 (1,3,2) 는 유효한 시퀀스다.
  • 연속 쓰기 호출에서 지정된 값 시퀀스에 “갭”이 있을 수 있다. 예를들어, (1,5,75,-20) 은 유효한 시퀀스다.

timestampstep을 모두 지정하면 매트릭이 두 축에 대해 독립적으로 기록된다.

MLflow Tracking Server

Storage

MLflow tracking server는 backend storeartifact store 라는 2개의 스토리지를 가지고 있다.

Backend Stores

backend store는 tracking server가 실험 및 실행 메타 데이터와 실행에 대한 매개변수, 매트릭 및 태그를 저장하는 곳이다. MLflow는 파일 저장소데이터베이스 저장소 2가지 유형의 백엔드 저장소를 지원한다.

모델 레지스트리 기능을 사용하려면 데이터베이스 저장소를 사용하여 서버를 실행해야 한다.

(명령어 공식홈페이지 참고)

Artifact Stores

아티팩트 저장소는 대용량 데이터에 적합한 위치이며 클라이언트가 아티팩트 출력 (예:모델)을 기록하는 위치이다. 실행에 대한 모든 아티팩트를 저장할 기본 위치 artifact_locationmlflow.entities.Experiment 대해 기록 된 속성이다. 추가 artifact_urimlflow.entities.RunInfo 이 실행에 대한 모든 아티팩트가 저장되는 위치를 나타내는 속성이다.

MLflow 클라이언트는 실행별로 아티팩트 위치 정보를 캐시한다. 따라서 실행이 종료되기 전에 아티팩트 위치를 변경하지 안흔 것이 좋다.

로컬 파일 경로 외에도 MLflow는 Amazon S3, Azur Blob Storage, Google Cloud Storage, SFTP 서버 및 NFS와 같은 스토리지 시스템을 아티팩트 저장소로 지원한다.

Categories:

Updated: