MLflow에 대해서 알아보자 - Project

MLflow 프로젝트는 주로 규칙에 따라 재사용 가능하고, 재현 가능한 방식으로 데이터 과학 코드를 패키징하기 위한 형식이다. 또한 프로젝트 구성요소에는 프로젝트를 실행하기 위한 API 및 Command line 도구가 표함되어 있어 프로젝트를 워크 플로우로 연결할 수 있다.

개요

핵심적으로 MLflow 프로젝트는 다른 데이터 과학자가 실행할 수 있도록 코드를 구성하고 설명하는 규칙이다. 각 프로젝트는 단순히 파일의 디렉토리이거나 코드를 포함하는 GIt 저장소이다. MLflow는 이 디렉토리에 파일을 배치하는 규칙에 따라 일부 프로젝트를 실행할 수 있지만 (예: conda.yaml 파일은 Conda 환경으로 처리 됨) YAML 형식의 텍스트 파일인 MLproject 파일을 추가하여 프로젝트를 더 자세히 설명할 수 있다. 각 프로젝트는 여러 속성을 지정할 수 있다. 각 프로젝트는 여러 속성을 지정할 수 있다.

Name

사람이 읽을 수 있는 프로젝트 이름이다.

Entry Points

프로젝트 내에서 실행할 수 있는 명령 및 해당 매개 변수에 대한 정보. 대부분의 프로젝트에는 다른 사용자가 호출 할 진입 점이 하나 이상 포함되어 있다. 일부 프로젝트에는 하나 이상의 진입점이 포함될 수도 있다. 예를들어 여러 기능화 알고리즘이 포함 된 단일 Git 저장소가 있을 수 있다. 프로젝트의 모든 .py 또는 .sh 파일을 진입 점으로 호출 할 수도 있다. MLproject 파일에서 진입점을 나열하는 경우 데이터 유형 및 기본값을 포함하여 해당 항목에 대한 매개변수를 지정할 수도 있다.

Environment

프로젝트 진입점을 실행하는 데 사용해야하는 소프트웨어 환경이다. 여기에 프로젝트 코드에 필요한 모든 라이브러리 종속성이 포함된다. MLflow 프로젝트에서 지원하는 소트트웨어 환경을 참조하려면 Project Environments 를 보고, Conda environmentsDocker containers 환경도 참고해라.

mlflow run Command-line 도구 또는 mlflow.projects.run() 과 같은 Python API를 사용하여 Git URI 또는 로컬 디렉토리에서 모든 프로젝트를 실행할 수 있다. 이러한 API를 활용하면 DatabricksKubernetes 에서 원격 실행을 위해 프로젝트를 제출할 수도 있다.

Specifying Projects

기본적으로 모든 Git 리파지토리 또는 로컬 디렉토리는 MLflow 프로젝트로 처리 될 수 있다. 디렉토리에 포함 된 모든 bash 또는 Python 스크립트를 프로젝트 진입점으로 호출 할 수 있다. Project Directories 섹션은 디렉토리를 MLflow 프로젝트로 해석하는 방법을 설명한다.

프로젝트의 속성에 대한 추가 제어를 제공하기 위해 프로젝트의 저장소 또는 디렉토리에 MLproject 파일을 포함할 수도 있다.

마지막으로 MLflow 프로젝트를 사용하면 프로젝트 진입점을 실행하는 데 사용되는 소프트웨어 환경을 지정할 수 있다.

Project Environments

MLflow는 현재 Conda 환경, Docker 컨테이너 환경 및 시스템 환경과 같은 프로젝트 환경을 지원한다.

Conda

Conda 환경은 Python 패키지와 네이티브 라이브러리 (예:CuDNN 또는 Intel MKL) 를 모두 지원한다. MLflow 프로젝트가 Conda 환경을 지정하면 프로젝트 코드가 실행되기 전에 활성화 된다.

기본적으로 MLflow는 시스템 경로를 사용하여 conda 바이너리를 찾고 실행한다. MLFLOW_CONDA_HOME 환경 변수를 설정하여 다른 Conda 설치를 사용할 수 있다. 실행경로는 $MLFLOW_CONDA_HOME/bin/conda.

당신을 포함하여 MLflow 프로젝트의 CONDA 환경을 지정할 수 있다. 프로젝트 디렉토리의 루트에 conda.yaml 파일 포함하거나, conda_env 진입점을 포함하여 지정 할 수 있다.

Docker

Docker 컨테이너를 사용하면 Java 라이브러리와 같은 비 Python 종속성을 캡처할 수 있다.

Docker 이미지를 지정하는 MLflow 프로젝트를 실행하면 MLflow는 프로젝트의 콘텐츠를 /mlflow/projects/code 디렉토리에 복사하는 새 Docker 계층을 추가한다. 이 단계는 새 이미지를 생성한다. 그런 다음 MLflow는 새 이미지를 실행하고 결과 컨테이너에서 프로젝트 진입점을 호출한다.

MLFLOW_TRACKING_URI와 같은 환경변수는 프로젝트 실행 중에 Docker 컨테이너 내부에 전달된다. 또한 프로젝트에서 생성된 runs 및 experiments 는 tracking URI로 지정된 Tracking Server에 저장된다. 로컬 tracking URI에 대해 실행할 때, MLflow는 mlruns 컨테이너 내부에 호스트 시스템의 추적 디렉토리를 탑재(mount)하여, 나중에 프로젝트 실행 중에 기록된 매트릭, 매개변수 및 아티팩트에 엑세스 할 수 있도록 한다.

System

현재 시스템 환경에서 직접 MLflow 프로젝트를 실행 할 수도 있다. 프로젝트를 실행하기 전에 프로젝트의 모든 종속성이 시스템에 설치되어 있어야 한다. 시스템 환경은 런타임에 제공된다. MLflow 프로젝트의 디렉토리 컨텐츠 또는 MLproject 파일의 일부가 아니다. 프로젝트를 실행할 때, 시스템 환경을 사용하는 방법에 대한 정보는 Running Projects 섹션의 Environment 매개 변수 설명을 참조해라.

Project Directories

MLproject 파일이 포함되지 않은 MLflow 프로젝트 디렉토리 또는 리파지토리를 실행할 때, MLflow는 다음 규칙을 사용하여 프로젝트의 속성을 결정한다.

  • 프로젝트의 이름은 디렉토리의 이름이다.
  • conda.yaml 파일이 있는 경우 CONDA 환경이 conda.yaml 에 지정된다. conda.yaml 파일 없는 경우, MLflow는 프로젝트를 실행할 때, 파이썬만 (CONDA에서 사용할 수 있는 최신 파이썬) 을 포함하는 CONDA 환경을 사용한다.
  • 모든 .py 및 .sh 프로젝트 파일은 시작점이 될 수 있다. MLflow는 Python을 사용하여 .py 확장으로 진입점을 실행하고 bash를 사용하여 .sh 확장으로 진입점을 실행한다. 런타임에 프로젝트의 진입점을 지정하는 방법에 대한 자세한 내용은 Running Projects. 참고
  • MLproject 파일이 포함되지 않은 경우 기본적으로 진입점에는 매개변수가 없다. 매개변수는 mlflow run CLI 또는 mlflow.project.run() Python API를 통해 런타임에 제공될 수 있다. 런타임 매개 변수는 –key value 구문을 사용하여 CLI의 진입점으로 전달된다. 프로젝트 실행 및 런타임 매개 변수에 대한 자세한 정보는 Running Projects. 참고

MLproject file

MLproject 파일인 YAML 구문의 텍스트 파일을 프로젝트의 루트 디렉토리에 추가하여, MLflow 프로젝트를 더 세부적으로 제어할 수 있다. 다음은 MLproject 파일의 예이다.

name: My Project

conda_env: my_env.yaml
# Can have a docker_env instead of a conda_env, e.g.
# docker_env:
#    image:  mlflow-docker-example

entry_points:
  main:
    parameters:
      data_file: path
      regularization: {type: float, default: 0.1}
    command: "python train.py -r {regularization} {data_file}"
  validate:
    parameters:
      data_file: path
    command: "python validate.py {data_file}"

파일은 이름과 Conda 또는 Docker 환경은 물론 각 진입점에 대한 자세한 정보를 지정할 수 있다. 특히 각 진입점은 실행할 명령과 명령에 전달할 매개변수를 정의한다. ( command to run and parameters to pass to the command )

*MLproject file에서 환경 설정 및 매개 변수 설정 방법은 공식홈페이지 참고

Running Projects

MLflow는 프로젝트를 실행하는 두 가지 방법 : mlflow run command-line 도구 또는 mlflow.projects.run() Python API를 사용함. 두 도구 모두 다음 매개 변수를 사용한다.

Project URI

https://(HTTPS 사용) 또는 user@host:path (SSH를 통해 Git 사용)형식의 URI로 지정된 로컬 파일 시스템 또는 Git 저장소 경로의 디렉토리다. 프로젝트의 하위 디렉토리에 있는 MLproject 파일에 대해 실행하려면 URI 인수 끝에 '#'을 추가한 다음 프로젝트의 루트 디렉토리에서 원하는 프로젝트가 포함 된 하위 디렉토리로의 상대경로를 추가한다.

Project Version

Git 기반 프로젝트의 경우 Git 리파지토리의 커밋 해시 또는 브랜치 이름이다.

Entry Point

진입점의 이름이며 기본값은 main이다. 프로젝트 루트 (예:)의 경로로 지정된 파일 또는 프로젝트의 MLproject 모든 .py 또는 .sh 파일에 이름이 지정된 진입점을 사용할 수 있다. src/test.py

Parameters

key-value 매개변수. 선언 된 타입이 있는 매개 변수는 필요한 경우 유효성이 검사되고 변환된다.

Deployment Mode

command-line과 API를 사용하면 Databricks 환경에서 원격으로 프로젝트 (launch projects remotely )를 시작할 수 있다. 여기에는 VM 유형과 같은 클러스터 매개 변수 설정이 포함된다. 물론 명령의 로컬 버전을 사용하여 선택한 다른 컴퓨팅 인프라에서 프로젝트를 실행할(mlflow run) 수도 있다. (예: 표준 작업 대기열 시스템에 수행하는 스크립트 제출).

mlflow run CLI를 사용하여 Kubernetes 클러스터에서 원격으로 프로젝트를 실행할 수도 있다. Run an MLflow Project on Kubernetes (experimental) 참고

Environment

기본적으로 MLflow 프로젝트는 프로젝트 디렉토리 또는 MLproject 파일에 지정된 환경에서 실행된다. 프로젝트의 지정된 환경을 무시하고 –no-conda 플래그를 제공하여 현재 시스템 환경에서 프로젝트를 실행할 수 있다.

예를들어 아래 가이드는 선형모델을 학습하는 MLflow 프로젝트를 만들고 게시한다. 프로젝트는 Github에도 게시 된다. https://github.com/mlflow/mlflow-example.

실행하려면

mlflow run git@github.com:mlflow/mlflow-example.git -P alpha=0.5

Databricks에서 MLflow 실행

Databricks에서 원격으로 MLflow 프로젝트를 실행할 수 있다. 이 기능을 사용하려면 엔터프라이즈 Databrick 계정이 있어야하고 (Community Edition은 지원되지 않음) Databricks CLI를 설정해야 한다. Dtabricks 문서를 참고해라. Azure Databricks, Databricks on AWS

Kubernetes에서 MLflow 프로젝트 실행 (experimental)

API 변경될 수 있음

Kubernetes에서 Docker 환경으로 MLflow 프로젝트를 실행할 수 있다. 다음 섹션에서는 예제와 함께 간단한 프로젝트 실행 가이드를 포함하여 기능에 대한 개요를 제공한다.

이 기능이 작동 하는지 확인하려면 Kubernetes 백엔드 구성(kubernetes_backend.json) 및 Kubernetes 작업 사양 파일(kubernetes_job_template.yaml)이 포함된 Docker 예제를 참조 할 수도 있다. Docker example, Kubernetes Job Spec

아래 How it Works 와 관련한 쿠버네티스 구성사항은 실제 구현사항 때 다시 정리하도록 하자.

Iterating Quickly

프로젝트를 빠르게 개발하려면 기본 프로그램이 main 진입점으로 지정된 MLproject 파일을 만들고, 매개변수를 반복적으로 작성하지 않으려면 MLproject 파일에 기본 매개 변수를 추가할 수 있다.

Building Multistep Workflows

mlflow.tracking과 결합된 mlflow.projects.run() API는, 개별 단계로 (같은 프로젝트 또는 진입점) 별도의 프로젝트를 여러 단계의 워크 플로우를 구축할 수 있다.

mlflow.projects.run() 에대한 각 호출은 당신이 사용할 수 있는 실행객체를 반환한다. 그 객체는 실행이 종료된 시기와 해당 출력 아티팩트를 얻었을 때 mlflow.tracking 사용을 결정할 수 있도록 한다. 이 아티팩트는 다른 단계로 전달 되어 path 또는 uri 매개변수를 설정한다. 각 단계의 결과를 보고 사용자 지정 코드를 사용하여 다음에 제출할 항목을 결정하는 단일 Python 프로그램에서 모든 워크플로우를 조정할 수 있다. 다단계 워크플로우에 대한 몇 가지 사용 사례는 다음과 같다

Modularizing Your Data Science Code

다른 사용자는 데이터 featurization, training, validation 등을 위해 재사용 가능한 단계를 게시하여 다른 사용자 또는 팀이 워크 플로우에서 실행할 수 있다. MLflow는 Git 버전 관리를 지원하므로 다른 팀은 자신의 워크플로우를 프로젝트의 특정 버전으로 잠그거나 자체 일정에 따라 새 버전으로 업그레이드 할 수 있다.

Hyperparameter Tuning

mlflow.projects.run() 하면 로컬 머신 또는 Databricks와 같은 클라우드 플랫폼에서 병렬로 여러 실행을 시작할 수 있다. 그런 다음 드라이버 프로그램은 각 실행의 측정 항목을 실시간으로 검사하여 실행을 취소하거나 새 실행을 시작하거나 대상 측정 항목에서 가장 성능이 좋은 실행을 선택할 수 있다.

Cross-validation

때로는 training 및 validation 데이터의 무작위 분할에서 동일한 훈련 코드를 실행하려고 한다. MLflow 프로젝트를 사용하면 training/validation 분할에 대한 임시 시드를 매개 변수로 취하거나 입력 데이터를 분할 할 수 있는 다른 프로젝트를 먼저 호출하여 이를 허용하는 방식으로 프로젝트를 패키징 할 수 있다.

이러한 다단계 워크플로우를 구성하는 방법의 예는 Multistep Workflow Example project. 참고

Categories:

Updated: