MLOps入門
@muraoka
ざっくり機械学習の世界
機械学習とは
経験からの学習により自動で目的を改善するアルゴリズム
学習 推論
推論
カメラで撮影した動物が
どのモデルに近いか推論
機械学習
猫の特徴は・・・
犬の特徴は・・・
ビッグデータ
猫だと推測する
ためのモデル
犬だと推測する
ためのモデル
推論モデル
答えを出力
機械学習といっても大きく分けて3種類ある
正解となるもの(ラベル)を元に学習する
(例:動物の識別、スパムメールの識別、顔認証、指紋認証)
日頃の振る舞い、データ構造やその特徴を元に学習する
(例:機械の故障検知、セキュリティビヘイビア法(対DDoS))
 教師なし学習
 強化学習
ある「環境」の中で、目的として設定された「報酬(スコア)」を
最大化するための行動を学習します。
(例:ロボット掃除機、自動運転、Alpha Go など)
 教師あり学習
つまり学習したい課題によって、
使用するアルゴリズムが大きく異なります
アルゴリズムの立ち位置
教師あり学習 強化学習
教師なし学習
回帰:
過去のデータを元に実数を予測
分類:
過去のデータを元に分類
クラスタリング:
特徴量から構造的に似ているものを分類
アソシエーション分析:
データの大部分を表すようなルールを見
つけ出す
ディープラーニング(深層学習):
ニューラルネットワークを用いて、特徴量をAI自ら抽出
し、データの中に存在しているパターンやルールの発見
していきます
様々なアルゴリズムの組み合わせや
独自手法によって、実現している
f:活性化関数
w:重み
f f
w
w w
精度とは
教師あり学習 強化学習
教師なし学習
何が付加価値につながるのかを理解
できているのか?
犬
犬
犬
犬
猫
猫
猫
犬
犬
犬
犬
猫
猫
猫
精度が低い
精度が高い
犬と猫の違いを理解できているか
どちらが犬か猫かはわからない
犬と猫を特徴から区別できているか
犬と猫の境界線を引く
犬
犬
犬
犬
猫
猫
猫
精度が低い
特徴x
特徴y
犬
犬
犬
犬
猫
猫
猫
精度が高い
実際に機械学習を使い始めるには
• プログラミング言語:
• 機械学習用ライブラリが豊富なため Python を使うのが一般的です
• R 、Java、Go、Rubyなども一応可能(事前設定や制約あり)
• 環境準備:
• Google Colaboratory が一番早いです
• SaaSサービスで、Googleアカウントがあればコーディングをすぐに始められます
• GPUは無料版の場合 Tesla K80
• MLOpsではNotebookに書いたコードをパイプラインに使う
スクリプトに利用できるのでここでモデル開発に慣れておくのが良い
• Pythonライブラリ:
※SaaS版JupyterNotebook
scikit-learn
右記は多次元の境界を引く際に使われる
サポートベクターマシン(SVM)と呼ばれる
アルゴリズムをPythonのscikit-learnで使って
2種類の乱数に分類しています
分類する際の境界線は1通りではないため、
実線(決定境界)の外側に点線が存在します
はじめてのMLOps
MLOps とは何か (DevOps for ML)
• 高精度な推論の維持
• 精度推移などの追跡可能なログ取得
• 精度低下時のリストアや切り替えなどの対応を可能にする
• アプリ、インフラ開発者など、データサイエンティスト以外での検証を可能にする
※ AIOps:システム運用で安定や付加価値を生むことを目的としたAI導入のこと
参考:
https://martinfowler.com/articles/cd4ml.html
コ
ー
ド
モ
デ
ル
デ
ー
タ
データ
収集
モデル
前処理
モデル
学習
モデル
評価
モデル
デプロイ
モデル
監視
• 精度の高い推論を維持するには日々の学習が重要
• MLOpsはAI運用には不可欠なプラットフォーム全般を示す
前処理コード
生データ 加工済み
データ
評価結果
データ
本番データ
学習コード
ハイパー
パラメータ 本番稼働
システム
モデル
評価コード アプリコード
得られること
MLOpsの具体的なイメージ
利用者
システムの利用
モデルやアプリ開発
特徴量
専用ストア
CI/CDにてモデル含めテスト
本番用データで学習済みのモデルを
含めたコンテナイメージをリリース
モデルなどの開発環境 GithubやCI/CDツール
MLOps パイプライン
精度などのパフォーマンスを監視
設定したトリガーでパイ
プラインを実行
モデル学習の再現やバージョン管理におけるdiffで使う
メタデータストア
本番稼働システム
開発、検証環境
本番環境
チーム編成
MLOpsは技術領域が広範囲に及ぶためチーム編成を検討します
① データサイエンティスト:
主にモデルの開発
② データエンジニア:
主にデータ収集やデータ前処理(クレンジング)
③ MLOpsエンジニア:
左記のようなモデル学習に必要な基盤全ての構
築と運用、自動化推進など
④ アプリケーションエンジニア:
AI含めたアプリケーションの開発を行う
②
③
①
④
MLOps の構築レベル(1/3)
GoogleはMLOps導入段階毎にレベルを3ステップ定義しています
• MLOps level 0: Manual process
• 全てのワークフローが手動
• モデルの再学習が低頻度の場合や実験的導入の場合はこれで十分な場合がある
例:
参考:https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning
MLOps の構築レベル(2/3)
• MLOps level 1: ML pipeline automation
• MLパイプラインの自動化
学習が継続的に自動で実行され、
高精度な推論を維持できるようになる
MLOps の構築レベル(3/3)
• MLOps level 2: CI/CD pipeline automation
• MLパイプラインの自動化
• CI/CDパイプラインを自動化
各担当チームのリリースは
自動化されているため、
他チームを意識することなくなる
MLOps構築に使用するツール
• 機械学習プラットフォーム
• 実験管理ツール
• パイプラインツール
機械学習ワークフローを全体的にカバーするプラットフォーム
機械学習プラットフォーム
プラットフォーム名 開発元
SageMaker Amazon(AWS)
Azure ML Microsoft(Azure)
Vertex AI
(旧:AI Platform)
Google(GCP)
Kubeflow Google(OSS)
AutoML
AutoML による革命
AutoMLは2018年にGoogleが発表したGoogle独自の学習モデルを使用することができるサービスで
モデルを開発するために必要なデータサイエンティストの知識なくAIを使えるようになります
現在展開されている主なAutoML API
• AutoML Vision
• AutoML Natural Language
• AutoML Translation
• SageMaker Autopilot
• AzureML(内包されている)
データ
収集
モデル
前処理
モデル
学習
モデル
評価
モデル
デプロイ
モデル
監視
サービスが全部やってくれる
実験管理ツール 開発元
MLflow Databricks
Trains Allegro AI
実験管理ツール
実験管理ツールは、様々な入力値を元にしたモデル学習の実験結果をバージョン管理することにより
実験の再現性の担保を実現します。
モデルはハイパーパラメータ、モデルコード、学習に使うデータが必要なため、
ある時点のモデル学習を再現するには別途専用のツールが必要になります。
パイプライン
ツール
開発元
Prefect Prefect
Metaflow Netflix
Airflow Apache
PipelineX 個人
Kedro QuantumBlack
パイプラインツール
パイプラインツールはデータのパイプラインを管理します
Pythonコードの中でモジュールimportして使うイメージになります
各クラウドの機械学習プラットフォームでは
どのパイプラインツールを使うかが
ある程度明確になっている
パイプラインツール 説明
Prefect Luigiの後継的な立ち位置としてリリース。並列実行、GUIに強みを持つ。
Metaflow AWS専用として開発されていた側面があり、他クラウドではあまり使えません。
Airflow GUIでの実行状況の可視化や特定タスクからのリトライが可能。
注意点として構造化データの同士のやりとりで使われるため、学習モデル、画像、
動画など非構造化データのやりとりができません。高機能ではあるがモデル学習
や学習評価周りのパイプラインでの使用はできません。
PipelineX KedroとMLflowを内包されている。
Kedro パイプラインの途中から実行ができませんが、様々な形式のファイルに対応して
おり、比較的多機能のように思える。
パイプラインツールの比較
パイプラインツールはもともと一部機械学習分野以外で使われていたため、
全てのツールが学習パイプラインの中で使えるわけではありません
クラウドで機械学習のインフラを構築したい時、
何を基準に選べば良いのか?
 機械学習で具体的に何をしたいのか?
 教師あり学習
 教師なし学習
 強化学習
 MLOpsの構築目的は?
 学習頻度が低頻度のサービスや実験的なプロジェクトの場合は構築レベル0程度で検討する
 本格的なサービス展開を検討している場合でも最初は構築レベルを抑えるか(0 or 1)検討する
 AutoMLで学習可能か?
 可能であればモデル開発のコストが削減できる可能性がある
 AutoMLサービス精度が一番高いクラウドはどれか?
 各クラウドの検証結果(terrafromで検証自動化)
 PJ内または社内でナレッジが豊富なクラウドは何か?
 既に豊富なナレッジを持つクラウドを選択する
 コストが一番安いクラウドは何か
 サービス料金
 管理コスト(必要な管理の範囲)
 マネージドなコンテナサービスの選定など
 その他コンポーネントサービスの優位性はないか?
MLOpsを始める前に確認しておきたいこと
サービス利用コスト
 SageMakerやVertex AI、
AzureMLでAutoMLを利用
開発~運用
難易度
高
高
※ 難易度が高ければその分学習コストや管理コストが増える
※ サービスコストが高ければ、クラウドサービスやツールなどの
利用コストが増える
 EKSやGKE、AKSなどで
Kubeflowを構築
 機械学習プラットフォームを利用せずに
MLflowやAirflowなどを駆使
MLOps環境構築のコスト、難易度関係
 SageMakerやVertex AI、
AzureMLなどで自作コンテナを利用
機械学習プラットフォームについて深掘る
Kubeflow
Kubeflowはk8s上でMLOpsをデプロイする場合に使用するMLOpsのツール群です
名称 役割
Pipeline(ArgoFlow) MLワークフローオーケストレーション 実験管理
Jupyter Notebook ノートブック。モデル開発などに使用。
Katib ハイパーパラメータチューニング
Feast 特徴量ストア
etc...
長所
・オープンソース
・k8sネイティブ
短所
・学習コストが高い
・MLOps知識に加えてk8sの運用知識が必要
・管理コストが高い
・MLOps周りの管理だけでなくK8s周りの管理も必要
Kubeflowの構築パターン
分類 構築手順
オンプレ相当 MicroK8s
Minikube 、etc
https://www.kubeflow.org/docs/distribut
ions/microk8s/kubeflow-on-microk8s/
パブリッククラウドのk8s
環境にKubeflowをデプロイ
EKS (AWS) https://www.kubeflow.org/docs/distribut
ions/aws/deploy/
AKS (Azure) https://www.kubeflow.org/docs/distribut
ions/azure/deploy/
GKE (GCP) https://www.kubeflow.org/docs/distribut
ions/gke/deploy/
Openshift https://www.kubeflow.org/docs/distribut
ions/openshift/
Kubeflow はOSSですが、
MLOpsを開発/運用する上での学習コストや管理コストが高いため、
代替案としてクラウドの機械学習プラットフォームを検討します
Amazon SageMaker
Amazon SageMaker とは
SageMaker Pipelines は SageMaker Python SDKを使用して、json形式のパイプラインを定義します
機械学習関連のコンポーネントはクラウドの中でも一番多い印象
1.データ収集・準備
コンポーネント名 簡易説明
SageMaker Ground Truth 学習データへのラベル付け
SageMaker Data Wrangler 機械学習用のデータの集約及び準備
SageMaker Processing 組み込み Python
SageMaker Feature Store 特徴の保存、更新、取得及び共有
SageMaker Clarify バイアスの検出とモデルの予測と理解
コンポーネント名 簡易説明
SageMaker Studio Notebooks PJ内で共有可能なJupyter Notebook
組み込み及びごくじアルゴリズム 機械学習用のデータの集約及び準備
ローカルモード ローカルマシンでテストとプロトタイプ作成
SageMaker Autopilot 機械学習モデルを自動的に作成する
SageMaker JumpStart あらかじめ構築されたソリューション
2.ビルド
3.トレーニング・チューニング
コンポーネント名 簡易説明
ワンクリックトレーニング 分散インフラストラクチャの管理
SageMaker Experiments 全てのステップをキャプチャ
自動モデルチューニング ハイパーパラメータの最適化
分散トレニングライブラリ 大規模なトレーニング用
SageMaker Debugger バイアスの検出とモデルの予測と理解
マネージドスポットトレーニ
ング
トレーニング費用を90%削減
コンポーネント名 簡易説明
ワンクリックデプロイ フルマネージド型、超低レイテンシー、高スルー
プット
K8sと Kubeflow の統合 k8sベースの機械学習を簡素化
マルチモデルエンドポイント インスタンスごとに複数のモデルをホストすること
で費用を削減
SageMaker Model Monitor デプロイされたモデルの精度の維持
SageMaker Edge Manager エッジデバイスでのモデルの管理及びモニタリング
SageMaker Pipelines ワークフローのオーケストレーションと自動化
(kubeflow pipelines)
4.デプロイ & 管理
Amazon SageMakerによるMLOps
推論器などの各コンポーネントを実行する際にECRのコンテナを指定します
詳細:https://www.slideshare.net/AmazonWebServicesJapan/amazon-sagemaker-122554039
Amazon SageMaker での Pipeline について
SageMaker では SageMaker Studio というIDEを使用してパイプラインの作成や実行、
Notebookの使用、git管理などをしていきます
from sagemaker.workflow.pipeline import Pipeline
# 1000AI-Pipeline パイプラインの作成
pipeline_name = f"1000AI-Pipeline"
pipeline = Pipeline(
name=pipeline_name,
parameters=[
processing_instance_type,
processing_instance_count,
training_instance_type,
model_approval_status,
input_data,
batch_data,
],
steps=[step_process, step_train, step_eval,
step_cond],
)
SageMaker SDK:
scikit-learnライクをラップしたIF
kubeflow pipeline準拠のPythonコードで
パイプラインを定義する
Cloudformation for SageMaker
https://aws.amazon.com/jp/about-aws/whats-new/2021/02/now-launch-amazon-sagemaker-studio-aws-cloudformation/
Cloudformation :https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SageMaker.html
Cloudformation で SageMaker Studioを定義できるようになりました
これにより、IaCツールで機械学習プラットフォーム側も設計できるようになりました
Azure ML
AzureMLによるMLOps
Azure DevOps と Azure ML Workspaceなどを連携させることでCI/CDを実現
下記の通りMLOpsの実装イメージが具体的でわかりやすい
https://docs.microsoft.com/ja-jp/azure/architecture/example-scenario/mlops/mlops-technical-paper
AzureML での Pipeline について
AzureMLでは 以下AzureML スタジオを使用して機械学習の管理を行います
AzureMLではデザイナと呼ばれる機能で、ドラッグ&ドロップでのパイプラインとモデル開発が可能
from azureml.pipeline.steps import PythonScriptStep
dataprep_source_dir = "./dataprep_src"
entry_point = "prepare.py"
# `my_dataset` as defined above
ds_input = my_dataset.as_named_input('input1')
# `output_data1`, `compute_target`, `aml_run_config` as defined above
data_prep_step = PythonScriptStep(
script_name=entry_point,
source_directory=dataprep_source_dir,
arguments=["--input", ds_input.as_download(), "--output", output_data1],
compute_target=compute_target,
runconfig=aml_run_config,
allow_reuse=True
)
AzureML SDK:
scikit-learnライクをラップしたIF
kubeflow pipeline準拠のPythonコードで
パイプラインを定義する
AzureML でのPipelineについて
AzureMLでは使用するパイプラインツールを下記の通りdocsに記載しており使い分けが明確にされている
https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-ml-pipelines
Google Cloud Vertex AI
Vertex AI とは
参考:https://cloud.google.com/vertex-ai#section-16
Google I/O 2021カンファレンスにて発表されたVertex AIは AI Platformの後継に位置し、Pipelineの使用の
際、GKE管理の必要がなくなったため、KubeflowによるMLOpsデプロイの敷居がさらに下がりました
データ
収集
特徴量
エンジニアリ
ング
トレーニング
とハイパーパ
ラメータ調整
モデル
提供
モデルの
調整と理解
エッジ
モデル
モニタリング
モデルの管理
AutoML
Vision
(画像解析)
Video
(動画解析)
Natural
Language
(言語処理)
Translation
(機械翻訳)
Tables
(数値予測と
カテゴリ予測)
特徴量
ストア
トレーニング
Vizier
Optimization
Experiments
AI
Accelerators
Vertex Pipelines (kubeflow pipelines)
Deep Learning資材(DL VM + DL Container)
Notebooks (JupyterLab)
データ
ラベリング
データセッ
ト
Vertex Prediction
Explainable AI
Hybrid AI Continuous
Monitoring
Metadata
Vertex AIの紹介
データセットタブからNoCodeで様々な学習が始められます。
Vertex PipelinesによるMLOps
Vertex Piplines はkubeflow SDK v2で作成したjsonを使用します(manufest.yaml相当)
Pipeline では 各コンポーネントを実行する際にGCRのコンテナを指定します
必要に応じてコンテナを立ち上げます
■Pipeline
■GCR
import kfp
from google.cloud import aiplatform
from google_cloud_pipeline_components import aiplatform as gcc_aip
from kfp.v2 import compiler
from kfp.v2.google.client import AIPlatformClient
@kfp.dsl.pipeline(
name=PIPELINE_NAME,
pipeline_root=f"gs://{GCP_GCS_PIPELINE_ROOT}/",
)
def kfp_sample_pipeline(suffix: str = "_xf"):
data_generator = _data_generator_op()
transform = _transform_op(
train_data_path=data_generator.outputs[GeneratedData.TrainData.value],
eval_data_path=data_generator.outputs[GeneratedData.EvalData.value],
suffix=suffix,
)
trainer = _trainer_op(
transformed_train_data_path=transform.outputs[
GeneratedData.TransformedTrainData.value
],
suffix=suffix,
)
_ = _evaluator_op(
trained_model_path=trainer.outputs[GeneratedData.TrainedModel.value],
transformed_eval_data_path=transform.outputs[GeneratedData.TransformedEvalData.value],
suffix=suffix,
)
# Compile the pipeline with V2 SDK to test the compatibility between V1 and V2 SDK
compiler.Compiler().compile(
pipeline_func=kfp_sample_pipeline,
package_path="kfp_sample_pipeline.json",
)
■コード一部抜粋
詳細や具体的な手順は後日ブログにて共有します
おまけ
AI関連の話題
NVIDIA CANVAS 絵でリアルを描く
https://www.nvidia.com/en-us/studio/canvas/#nvidia-canvas
https://www.youtube.com/watch?v=WsKYI65chxA
AWS DeepRacer 1/18 スケールのレーシングカーを使い、楽しみながら強化学習
を学ぶことができる
https://www.youtube.com/watch?v=G19ZElMNpTE
NVIDIA RTX Voice GPUとAIによるノイズキャンセル
https://www.nvidia.com/ja-jp/geforce/guides/nvidia-rtx-
voice-setup-guide/
資格 AWS/GCP/Azure機械学習orディープラーニング試験、E資格、
Jetson AI資格
Microsoft Flight Simulator ゲームでAzureMLが使われている
https://wpteq.org/xbox/xbox-games/post-70109/
ASUS Flow x13 VRAM16GBの外付けGPUをPCIE x8で接続できる!
デカイPCを買わずにKaggleコンペに参加できるか?
入門 高難易度
機械学習ロードマップ
Pythonでモデル開発をしたい場合は
さらにアルゴリズムを使ったコード作成や
E資格の問題集を解いて理解を深める
MLOpsでの開発に必要なインフラ構築知識
設計知識を身につける
E資格のためのJDLA用研修受講
https://www.jdla.org/certificate/engineer/programs/
まずはPython基礎から
機械学習ライブラリを使ってみる
AWS/GCP/Azureの
機械学習プラットフォームを検証
100本ノックで機械学習ライブラリに慣れていく
研修を通してアルゴリズムについても学んでいく

MLOps入門