機械学習入門
MLflowで学ぶMLOpsことはじめ
Subhead goes here on one line
園田憲一
日本オラクル株式会社
ソリューションアーキテクト本部
機械学習のワークフロー
• 整形されていない生
データ
• 企業内の様々なシス
テムで利用される
データストアに散在
するデータ
• データレイク、
RDB、オブジェクト
ストア、NoSQL、
Hadoopなど
• 生データから必要な
データ(特徴量)を抽
出し、機械学習に利
用できるように整形
• 整形されたデータを
統計処理にかけて予
測モデルを構築
• 予測モデルの精度を
評価し、目標の精度
を達成するまで繰り
返し学習する
• 構築した予測モデル
を本番環境にデプロ
イし、アプリケー
ションから利用でき
るようにする
2 Copyright © 2022, Oracle and/or its affiliates
RAW Data Prep Train & Evaluation Deploy
MLflow概要
• 機械学習のワークフロー支援ツール
• Databrics社により開発
• OSSのライブラリとして提供
• pip install mlflow
• Managed PaaSとして同社からクラウドサービスと
してリリース
• 一般的なMLライブラリと併用
• 実験の試行錯誤の過程で生成される多数をセットで整
理、視覚化
• データセット
• アーティファクト
• 学習パラメータ
• 精度メトリックなど
• 学習環境、デプロイ環境のパッケージ化
• 各種ライブラリ、バージョン、依存関係を完全に
キャプチャ
• 環境の可搬性と処理実行の確実性
• シンプルな関数体形と容易な使い勝手
• 主要クラウドベンダーのMLサービスと連携可能
3 Copyright © 2022, Oracle and/or its affiliates
MLflow モジュール概要
Copyright © 2022, Oracle and/or its affiliates
4
Mlflow Models
Mlflow Tracking
Mlflow Projects
Mlflow Registry
機械学習のコード実行時に、パラメータ、メトリックなどを
ロギングし、結果を整理、視覚化
機械学習のコードおよび学習環境を、再利用可能かつ再現可
能なフォーマットでパッケージ化
学習済みの予測モデルおよびデプロイ環境を、再利用可能か
つ再現可能なフォーマットでパッケージ化
予測モデルのライフサイクルを一元管理(リリース管理、
バージョニング)
Mlflow アーキテクチャ
Copyright © 2022, Oracle and/or its affiliates
5
……...
……...
……...
MLソースコード
(Python/R)
app
container
conda
• 予測モデル
• アーティファクト
• 精度メトリック
• 学習パラメータ
• etc.
収集されたデータを
ベースに実験結果を
整理、視覚化
container
conda
予測結果
REST/CLI/Python
予測データ
収集されたデータを
ベースに学習環境を
パッケージ化
収集されたデータをベースに
デプロイ環境をパッケージ化
Staging Production Archived
モデルのバージョン、リ
リース状況を一元管理
コード実行時に各種データ
をデータベースに自動収集
Mlflow Tracking
Mlflow Registry
Mlflow Projects
Mlflow Models
Mlflow UI
Mlflow Tracking
Copyright © 2022, Oracle and/or its affiliates
6
MLコードにTracking
コードを埋め込む方式
https://www.mlflow.org/docs/latest/tracking.html
MLのコード実行時に定義した情報をログとして記録、整理された状態でMlflow UIから確認
import sklearn
Import mlflow
・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・
(scikit-learnなどMLライブラリのコード)
・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・
# MlflowのRunの定義
with mlflow.start_run():
# 学習パラメータをロギング
mlflow.log_param()
# 予測モデルの精度情報をロギング
mlflow.log_metric()
#アーディファクトをロギング
mlflow.log_artifact()
#予測モデルのロギング
mlflow.sklearn.log_model()
Run #3
• 予測モデル
• アーティファクト
• メトリック
• 学習パラメータ
Run #2
• 予測モデル
• アーティファクト
• メトリック
• 学習パラメータ
Run #1
• 予測モデル
• アーティファクト
• メトリック
• 学習パラメータ
train.py
実行 python train.py
Mlflow UI
実行 python train.py
実行 python train.py
デモのサンプルデータ
Copyright © 2022, Oracle and/or its affiliates
7
http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv
データセット:ワインの成分データと品質を纏めたデータセット
デモシナリオ:ワインの成分データから品質(10段階評価)を予測
コード概要:ElasticNetを使った回帰分析
成分データ(説明変数) 品質(目的変数)
Mlflow Projects
Copyright © 2022, Oracle and/or its affiliates
8
学習時のライブラリの依存関係をキャプチャしcondaもしくはコンテナにパッケージ化
モデル開発時とは異なる環境、異なる人が再度学習する際の学習環境の可搬性と学習の再現性
conda.yaml
データ
name: MLproject_demo
conda_env: conda.yaml
entry_points:
main:
parameters:
alpha: float
l1_ratio: {type: float, default: 0.1}
command: "python src.py --alpha {alpha} --l1-ratio {l1_ratio}"
ソースコード
(src.py)
MLproject
$ mlflow run <project directory>
conda
$ mlflow run <repository url>
channels:
- conda-forge
dependencies:
- python=3.9.7
- pip
- pip:
- mlflow
- scikit-learn==1.0.2
name: mlflow-env
conda仮想環境
の定義ファイル
MLflow Project
の定義ファイル
ライブラリのバージョン、依存関係
が完全にキャプチャされたconda仮
想環境で学習を確実に再現
Projects
mlflow run コマンドにより学習実行
conda
Mlflow Projects
Copyright © 2022, Oracle and/or its affiliates
9
学習時のライブラリの依存関係をキャプチャしcondaもしくはコンテナにパッケージ化
モデル開発時とは異なる環境、異なる人が再度学習する際の学習環境の可搬性と学習の再現性
Dockerfile
データ
name: docker-example
docker_env:
image: mlflow-docker-example
entry_points:
main:
parameters:
alpha: float
l1_ratio: {type: float, default: 0.1}
command: "python src.py --alpha {alpha} --l1-ratio {l1_ratio}"
ソースコード
(src.py)
MLproject
$ docker build -t mlflow-docker-example -f Dockerfile .
FROM continuumio/miniconda3:4.10.3
RUN pip install mlflow>=1.0 
&& pip install numpy==1.21.2 
&& pip install scipy 
&& pip install pandas==1.3.3 
&& pip install scikit-learn==0.24.2 
&& pip install cloudpickle
docker image
定義ファイル
MLflow Project
の定義ファイル
ライブラリのバージョン、依存関係が完全にキャ
プチャされたコンテナ環境で学習を確実に再現
$ mlflow run <project directory>
docker imageの作成
container
mlflow run コマンドでコンテナ起動、学習実行
Projects
Mlflow Models
Copyright © 2022, Oracle and/or its affiliates
10
学習済みモデルのライブラリの依存関係をキャプチャしcondaもしくはコンテナにパッケージ化
学習済みモデルとデプロイ環境の可搬性とデプロイの再現性
データ
ソースコード
(src.py)
Mlflow
Tracking
log_model() conda.yaml
channels:
- conda-forge
dependencies:
- python=3.9.7
- pip
- pip:
- mlflow
- scikit-learn==1.0.2
name: mlflow-env
artifact_path: model
flavors:
python_function:
env: conda.yaml
・・・中略
sklearn:
pickled_model: model.pkl
sklearn_version: 0.19.1
model_uuid: 9b9c2659f233
・・・中略
MLmodel
$ mlflow models serve
$ mlflow models build-docker
予測モデルのRESTサービスをホス
トするconda環境を作成、起動
$ docker run
docker imageを作成
予測モデルのRESTサービス
をホストするコンテナを起動
container
model.pkl
requirements.txt
mlflow
cloudpickle==2.0.0
scikit-learn==0.19.1
Models
学習
実行
ファイル
生成
conda
application
予測結果
REST/CLI/Python
予測データ
application
予測結果
REST/CLI/Python
予測データ
Mlflow Registry
Mlflow Registry
Copyright © 2022, Oracle and/or its affiliates
11
予測モデルのライフサイクルを一元化されたモデルストアで管理
モデルの整理、バージョニング、フェーズ指定(Staging/Production/Archived)
• 予測モデル
• アーティファクト
• 精度メトリック
• 学習パラメータ
• etc.
Mlflow データストア
Mlflow Tracking
Staging Production Archived
多数の予測モデルの一元管理
• バージョニング
• リリースステージ
Mlflow Models
本番環境へのデプロイ
本番リリース
トラッキング
MLflow 構成例
Copyright © 2022, Oracle and/or its affiliates
12
学習環境
Object Storage
アーティファクト
ファイルの保存
Mlflow
Tracking Server
PostgreSQL
MySQL
SQLite
メトリック、パラメータ
その他メタデータの保存
MLコードにtracking serverを指定
set_tracking_uri('http://tracking_server_ip:/')
tracking serviceを起動
$ mlflow server --backend-store-uri mysql://user:pass@host:port/database_name
--default-artifact-root S3:/buket_name
--host tracking_server_ip
tracking service
http://tracking_server_ip
tracking
Web UIアクセス
S3もしくはS3互換APIで認証
AWS_ACCESS_KEY_ID = xxxxxxx
AWS_SECRET_ACCESS_KEY =
xxxxxx
Oracle Cloud Infrastructureのデザインパターン
Copyright © 2022, Oracle and/or its affiliates
13
oracle-quickstartシリーズ(Terraformスクリプト)
https://github.com/oracle-quickstart/oci-mlflow
Object Storage
Data Science
MySQL Database Service
Container Engine
For Kubernetes
Virtual Machine
Mlflow
Tracking Server
ML
学習環境
Tracking
Artifactの保存
学習パラメータ
精度メトリック
の保存
Deploy
MLflowで学ぶMLOpsことはじめ

MLflowで学ぶMLOpsことはじめ

  • 1.
    機械学習入門 MLflowで学ぶMLOpsことはじめ Subhead goes hereon one line 園田憲一 日本オラクル株式会社 ソリューションアーキテクト本部
  • 2.
    機械学習のワークフロー • 整形されていない生 データ • 企業内の様々なシス テムで利用される データストアに散在 するデータ •データレイク、 RDB、オブジェクト ストア、NoSQL、 Hadoopなど • 生データから必要な データ(特徴量)を抽 出し、機械学習に利 用できるように整形 • 整形されたデータを 統計処理にかけて予 測モデルを構築 • 予測モデルの精度を 評価し、目標の精度 を達成するまで繰り 返し学習する • 構築した予測モデル を本番環境にデプロ イし、アプリケー ションから利用でき るようにする 2 Copyright © 2022, Oracle and/or its affiliates RAW Data Prep Train & Evaluation Deploy
  • 3.
    MLflow概要 • 機械学習のワークフロー支援ツール • Databrics社により開発 •OSSのライブラリとして提供 • pip install mlflow • Managed PaaSとして同社からクラウドサービスと してリリース • 一般的なMLライブラリと併用 • 実験の試行錯誤の過程で生成される多数をセットで整 理、視覚化 • データセット • アーティファクト • 学習パラメータ • 精度メトリックなど • 学習環境、デプロイ環境のパッケージ化 • 各種ライブラリ、バージョン、依存関係を完全に キャプチャ • 環境の可搬性と処理実行の確実性 • シンプルな関数体形と容易な使い勝手 • 主要クラウドベンダーのMLサービスと連携可能 3 Copyright © 2022, Oracle and/or its affiliates
  • 4.
    MLflow モジュール概要 Copyright ©2022, Oracle and/or its affiliates 4 Mlflow Models Mlflow Tracking Mlflow Projects Mlflow Registry 機械学習のコード実行時に、パラメータ、メトリックなどを ロギングし、結果を整理、視覚化 機械学習のコードおよび学習環境を、再利用可能かつ再現可 能なフォーマットでパッケージ化 学習済みの予測モデルおよびデプロイ環境を、再利用可能か つ再現可能なフォーマットでパッケージ化 予測モデルのライフサイクルを一元管理(リリース管理、 バージョニング)
  • 5.
    Mlflow アーキテクチャ Copyright ©2022, Oracle and/or its affiliates 5 ……... ……... ……... MLソースコード (Python/R) app container conda • 予測モデル • アーティファクト • 精度メトリック • 学習パラメータ • etc. 収集されたデータを ベースに実験結果を 整理、視覚化 container conda 予測結果 REST/CLI/Python 予測データ 収集されたデータを ベースに学習環境を パッケージ化 収集されたデータをベースに デプロイ環境をパッケージ化 Staging Production Archived モデルのバージョン、リ リース状況を一元管理 コード実行時に各種データ をデータベースに自動収集 Mlflow Tracking Mlflow Registry Mlflow Projects Mlflow Models Mlflow UI
  • 6.
    Mlflow Tracking Copyright ©2022, Oracle and/or its affiliates 6 MLコードにTracking コードを埋め込む方式 https://www.mlflow.org/docs/latest/tracking.html MLのコード実行時に定義した情報をログとして記録、整理された状態でMlflow UIから確認 import sklearn Import mlflow ・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・ (scikit-learnなどMLライブラリのコード) ・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・ # MlflowのRunの定義 with mlflow.start_run(): # 学習パラメータをロギング mlflow.log_param() # 予測モデルの精度情報をロギング mlflow.log_metric() #アーディファクトをロギング mlflow.log_artifact() #予測モデルのロギング mlflow.sklearn.log_model() Run #3 • 予測モデル • アーティファクト • メトリック • 学習パラメータ Run #2 • 予測モデル • アーティファクト • メトリック • 学習パラメータ Run #1 • 予測モデル • アーティファクト • メトリック • 学習パラメータ train.py 実行 python train.py Mlflow UI 実行 python train.py 実行 python train.py
  • 7.
    デモのサンプルデータ Copyright © 2022,Oracle and/or its affiliates 7 http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv データセット:ワインの成分データと品質を纏めたデータセット デモシナリオ:ワインの成分データから品質(10段階評価)を予測 コード概要:ElasticNetを使った回帰分析 成分データ(説明変数) 品質(目的変数)
  • 8.
    Mlflow Projects Copyright ©2022, Oracle and/or its affiliates 8 学習時のライブラリの依存関係をキャプチャしcondaもしくはコンテナにパッケージ化 モデル開発時とは異なる環境、異なる人が再度学習する際の学習環境の可搬性と学習の再現性 conda.yaml データ name: MLproject_demo conda_env: conda.yaml entry_points: main: parameters: alpha: float l1_ratio: {type: float, default: 0.1} command: "python src.py --alpha {alpha} --l1-ratio {l1_ratio}" ソースコード (src.py) MLproject $ mlflow run <project directory> conda $ mlflow run <repository url> channels: - conda-forge dependencies: - python=3.9.7 - pip - pip: - mlflow - scikit-learn==1.0.2 name: mlflow-env conda仮想環境 の定義ファイル MLflow Project の定義ファイル ライブラリのバージョン、依存関係 が完全にキャプチャされたconda仮 想環境で学習を確実に再現 Projects mlflow run コマンドにより学習実行 conda
  • 9.
    Mlflow Projects Copyright ©2022, Oracle and/or its affiliates 9 学習時のライブラリの依存関係をキャプチャしcondaもしくはコンテナにパッケージ化 モデル開発時とは異なる環境、異なる人が再度学習する際の学習環境の可搬性と学習の再現性 Dockerfile データ name: docker-example docker_env: image: mlflow-docker-example entry_points: main: parameters: alpha: float l1_ratio: {type: float, default: 0.1} command: "python src.py --alpha {alpha} --l1-ratio {l1_ratio}" ソースコード (src.py) MLproject $ docker build -t mlflow-docker-example -f Dockerfile . FROM continuumio/miniconda3:4.10.3 RUN pip install mlflow>=1.0 && pip install numpy==1.21.2 && pip install scipy && pip install pandas==1.3.3 && pip install scikit-learn==0.24.2 && pip install cloudpickle docker image 定義ファイル MLflow Project の定義ファイル ライブラリのバージョン、依存関係が完全にキャ プチャされたコンテナ環境で学習を確実に再現 $ mlflow run <project directory> docker imageの作成 container mlflow run コマンドでコンテナ起動、学習実行 Projects
  • 10.
    Mlflow Models Copyright ©2022, Oracle and/or its affiliates 10 学習済みモデルのライブラリの依存関係をキャプチャしcondaもしくはコンテナにパッケージ化 学習済みモデルとデプロイ環境の可搬性とデプロイの再現性 データ ソースコード (src.py) Mlflow Tracking log_model() conda.yaml channels: - conda-forge dependencies: - python=3.9.7 - pip - pip: - mlflow - scikit-learn==1.0.2 name: mlflow-env artifact_path: model flavors: python_function: env: conda.yaml ・・・中略 sklearn: pickled_model: model.pkl sklearn_version: 0.19.1 model_uuid: 9b9c2659f233 ・・・中略 MLmodel $ mlflow models serve $ mlflow models build-docker 予測モデルのRESTサービスをホス トするconda環境を作成、起動 $ docker run docker imageを作成 予測モデルのRESTサービス をホストするコンテナを起動 container model.pkl requirements.txt mlflow cloudpickle==2.0.0 scikit-learn==0.19.1 Models 学習 実行 ファイル 生成 conda application 予測結果 REST/CLI/Python 予測データ application 予測結果 REST/CLI/Python 予測データ
  • 11.
    Mlflow Registry Mlflow Registry Copyright© 2022, Oracle and/or its affiliates 11 予測モデルのライフサイクルを一元化されたモデルストアで管理 モデルの整理、バージョニング、フェーズ指定(Staging/Production/Archived) • 予測モデル • アーティファクト • 精度メトリック • 学習パラメータ • etc. Mlflow データストア Mlflow Tracking Staging Production Archived 多数の予測モデルの一元管理 • バージョニング • リリースステージ Mlflow Models 本番環境へのデプロイ 本番リリース トラッキング
  • 12.
    MLflow 構成例 Copyright ©2022, Oracle and/or its affiliates 12 学習環境 Object Storage アーティファクト ファイルの保存 Mlflow Tracking Server PostgreSQL MySQL SQLite メトリック、パラメータ その他メタデータの保存 MLコードにtracking serverを指定 set_tracking_uri('http://tracking_server_ip:/') tracking serviceを起動 $ mlflow server --backend-store-uri mysql://user:pass@host:port/database_name --default-artifact-root S3:/buket_name --host tracking_server_ip tracking service http://tracking_server_ip tracking Web UIアクセス S3もしくはS3互換APIで認証 AWS_ACCESS_KEY_ID = xxxxxxx AWS_SECRET_ACCESS_KEY = xxxxxx
  • 13.
    Oracle Cloud Infrastructureのデザインパターン Copyright© 2022, Oracle and/or its affiliates 13 oracle-quickstartシリーズ(Terraformスクリプト) https://github.com/oracle-quickstart/oci-mlflow Object Storage Data Science MySQL Database Service Container Engine For Kubernetes Virtual Machine Mlflow Tracking Server ML 学習環境 Tracking Artifactの保存 学習パラメータ 精度メトリック の保存 Deploy