GunSik2 / k8s-ai

ai/bigdata/gpu examples with k8s
0 stars 0 forks source link

mlflow #14

Open GunSik2 opened 3 years ago

GunSik2 commented 3 years ago

MLflow

기계 학습 플랫폼의 개방형 표준이 되기 위해 Linux Foundation에 합류

자동 로깅: 데이터 버전 관리 및 재현성

머신 러닝 실무자가 직면한 가장 큰 문제 중 하나는 모델 교육 중에 사용되는 중간 데이터 세트(교육 및 테스트)를 추적하는 방법입니다. MLflow에는 이미 실험의 일부로 메트릭, 매개변수 및 아티팩트 를 추적 하는 기능이 있습니다. MLflow 1.8에서 Apache Spark 데이터 원본에 대한 자동 로깅을 도입했습니다. 즉, Spark를 사용하여 기능 또는 교육 파이프라인을 생성하는 경우 Spark 자동 로깅을 켜고 모델에 대해 쿼리된 데이터를 정확히 자동으로 기록할 수 있습니다. Autologging은 현재 TensorFlow, Keras, Gluon, LightGBM, XGBoost 및 Spark의 6개 라이브러리를 지원합니다. 곧 PyTorch와 cikit-learn에 대한 지원을 추가가 진행 중입니다.

image

Databricks 플랫폼 사용자를 위해 자동 로깅을 Databricks의 클러스터 관리 및 환경 기능과 통합하고 있습니다. 즉, 노트북 또는 작업에서 Databricks에 대한 실험을 추적하는 경우 사용한 노트북의 스냅샷, 클러스터 구성 및 라이브러리 종속성의 전체 목록을 자동으로 기록합니다.

image

모델 거버넌스 : 모델 스키마 및 MLflow 모델 레지스트리 태그로 더 강력한 모델 거버넌스

모델을 배포할 때 가장 일반적인 고충 중 하나는 모델 점수를 매기는 데 사용되는 프로덕션 데이터의 스키마가 모델을 훈련할 때 사용되는 데이터 스키마와 호환되고 새 모델 버전의 출력이 예상한 것과 일치하는지 확인하는 것입니다. ML에서 프로덕션 중단의 가장 일반적인 원인 중 하나는 새 모델이 배포될 때 모델 스키마의 불일치입니다.

MLflow는 모델 관리 및 거버넌스를 위해 하나의 중앙 집중식 리포지토리(MLflow 모델 레지스트리)에 모델을 등록할 수 있는 기능을 제공합니다 . MLflow Model Registry 채택률은 기하급수적으로 증가하고 있으며 매주 수십만 개의 모델이 Databricks에 등록되는 것을 보고 있습니다. 모델 스키마와 모델 레지스트리의 통합을 통해 모델 버전과 해당 스키마를 비교하고 비호환성이 있는 경우 경고할 수 있습니다. 기본 제공 모델 스키마 호환성 검사를 통해 MLflow Model Registry는 ML 프로덕션 중단의 가장 큰 원인 중 하나인 일치하지 않는 모델 스키마 가능성을 제거합니다.

image

사용자 지정 모델 관리 워크플로를 보다 쉽고 자동화하기 위해 MLflow 모델 레지스트리의 일부로 사용자 지정 태그를 도입하고 있습니다.

많은 조직에는 모델 검증을 위한 맞춤형 내부 프로세스가 있습니다. 예를 들어, 모델은 에지 장치에 배포하기 전에 GDPR 준수에 대한 법적 검토를 통과하거나 성능 테스트를 통과해야 할 수 있습니다.
MLflow Model Registry에 사용자 정의 태그를 사용하면 이러한 모델에 대한 고유한 메타데이터를 추가하고 상태를 추적할 수 있습니다. 이 기능은 API를 통해서도 제공되므로 자동 CI/CD 파이프라인을 실행하여 모델을 테스트하고 이러한 태그를 추가하여 모델이 배포할 준비가 되었는지 여부를 매우 쉽게 확인할 수 있습니다.

image

모델 배포 : Databricks에서 간소화된 API 및 모델 제공으로 모델 배포 가속화

MLflow는 이미 배치 또는 실시간 제공 플랫폼을 포함한 여러 모델 배포 옵션과 통합되어 있습니다 . 이 분야에서 점점 더 많은 기여를 했기 때문에 커뮤니티에 모델 배포를 관리할 수 있는 더 간단한 API를 제공하고자 했습니다. MLflow의 Model Serving 은 모델을 실험에서 프로덕션으로 가져오는 프로세스를 간소화합니다 .

요약

image

image

참고

GunSik2 commented 3 years ago

mlflow QuickStart

Env : Ubuntu 20.04

Run mlflow with local tracking server

Prepare python & conda

$ wget https://repo.anaconda.com/miniconda/Miniconda3-py38_4.10.3-Linux-x86_64.sh $ chmod u+x Miniconda3-py38_4.10.3-Linux-x86_64.sh $ ./Miniconda3-py38_4.10.3-Linux-x86_64.sh Miniconda3 will now be installed into this location: /home/ubuntu/miniconda3

Downloading the Quickstart

git clone https://github.com/mlflow/mlflow

Using the Tracking API : mlflow_tracking.py

$ cd mlflow/examples/
$ python3 quickstart/mlflow_tracking.py

$ tree mlruns
├── mlruns
│   └── 0
│       ├── ca0cc5d4e52d4608af9900f68ebbc693
│       │   ├── artifacts
│       │   │   └── test.txt
│       │   ├── meta.yaml
│       │   ├── metrics
│       │   │   └── foo
│       │   ├── params
│       │   │   └── param1
│       │   └── tags
│       │       ├── mlflow.source.git.commit
│       │       ├── mlflow.source.name
│       │       ├── mlflow.source.type
│       │       └── mlflow.user
│       └── meta.yaml
└── outputs
    └── test.txt

Running MLflow Projects

mlflow run https://github.com/mlflow/mlflow-example.git -P alpha=5.0

Viewing the Tracking UI (Tracking Server in Local)

mlflow ui -h 0.0.0.0

image

Saving and Serving Models

// Saving model
$ python3 sklearn_logistic_regression/train.py
Score: 0.6666666666666666
Model saved in run ac1c6e37155a4a5c8cd56dd0ed52a92c

// Serving model
$ mlflow models serve -m runs:/ac1c6e37155a4a5c8cd56dd0ed52a92c/model --port 1234

// Testing model
$ curl -d '{"columns":["x"], "data":[[1], [-1]]}' -H 'Content-Type: application/json; format=pandas-split' -X POST localhost:1234/invocations
[1, 0]

Run mlflow with remote tracking server

Launch a Tracking Server on a Remote Machine

mkdir /mnt/nfs/ /mnt/nfs
mlflow server \
    --backend-store-uri sqlite:////mnt/persistent-disk/mlflow.db \
    --default-artifact-root /mnt/nfs/  \
    --host 0.0.0.0 \
    --port 5000

Use a remote tracking server

export MLFLOW_TRACKING_URI="http://<host-ip>:5000"
// Run experiment
mlflow run https://github.com/mlflow/mlflow-example.git -P alpha=5.0

// Run experiment
$ python3 sklearn_logistic_regression/train.py
Score: 0.6666666666666666
Model saved in run ac1c6e37155a4a5c8cd56dd0ed52a92c

Saving and Serving Models

image

// Serving model
$ export MLFLOW_TRACKING_URI="http://<host-ip>:5000"

$ mlflow models serve -m "models:/sklearn_logistic_regression/None" --port 1234   # "models:/{model_name}/{stage}"

// Testing model
$ curl -d '{"columns":["x"], "data":[[1], [-1]]}' -H 'Content-Type: application/json; format=pandas-split' -X POST localhost:1234/invocations
[1, 0]

참고

GunSik2 commented 2 years ago

모델 serving 업데이트

// build a Docker image, including MLServer $ mlflow models build-docker -m my_model -n my-model-image:0.1.0 --mlserver


![image](https://user-images.githubusercontent.com/11453229/155494148-eceae0a4-b061-4a71-ba07-062aa290b1b9.png)
- [ML Server](https://github.com/SeldonIO/MLServer/) : 다양한 모델 서비스 제공