Slide 1

Slide 1 text

AI Platform Pipelines を使って 機械学習パイプラインを動かす話 Karno 1

Slide 2

Slide 2 text

whoami Ryosuke Nakano a.k.a. Karno https://github.com/karno Software Engineer @ Repro AI Lab (2020.4 ~) もと JTBC(Japanese Traditional Big Company) だった クラウドにわか勢 2

Slide 3

Slide 3 text

Table of Contents 1. 背景: 機械学習をサービスに乗せるつらさ 2. 課題: 機械学習パイプラインをうまく動かす 3. 解決策: AI Platform Pipelines 4. 全体像 5. まとめ 3

Slide 4

Slide 4 text

背景: 機械学習サービスを維持するつらさ 機械学習サービスは陳腐化の速度が早く、保守を⼿厚く⾏う必要がある 稼働状況の継続的な監視が必要 予測の前提が崩れていないか? ⼊⼒データに変化はないか? にもかかわらず、保守性が低くなりがち 実装が紆余曲折し⽣まれるモノリシックな何か デバッグ困難、テスト困難 保守のために無限に時間が溶けていく うまく作る枠組みが必要 → 機械学習パイプライン の登場 4

Slide 5

Slide 5 text

機械学習パイプライン 機械学習処理全体を、独⽴したコンポーネントの連鎖として表現したアーキテクチャ モノリシックになりがちな機械学習処理をコンポーネントに分割 コンポーネント毎のI/Oが明確化、監視がしやすく ⼀度に考慮しなければいけない処理が減り、保守性が向上 コンポーネント毎に処理が完結するため、テストが容易に いわゆる「分割統治法」 画像出典: Azure Machine Learning 5

Slide 6

Slide 6 text

課題: 機械学習パイプラインをうまく動かす 機械学習パイプラインでプログラムの保守性は向上した → 機械学習パイプラインを実⾏するインフラ側にも⼿当てが欲しい ただ動かすだけでは以下の問題が解決しない: P1. パイプライン性能の監視・確認が困難 P2. 異常発⽣時のログ追跡が困難 P3. 異常の監視と通知が困難 6

Slide 7

Slide 7 text

P1. パイプライン性能の監視・確認が困難 理想: 機械学習モデルの性能を⾒やすく監視できる状態 (学習が意図通り動いているか、想定していないデータが⼊ってきていないか、など) 描くべきグラフ・⾒るべきデータは分かっているので、それを⼿軽に⾒たい 例えば GCS Bucket に保存したデータでグラフを描きたい 外部サービスを頼るか、あるいは毎回⼿元にダウンロードしてきて分析する? 外部サービスを⾒つけてきて、繋いでみて、相性を確認して… gsutil cp で持ってきて Jupyter で… → 外部サービスで可視化するのも、⼿元で可視化するのも つらい 7

Slide 8

Slide 8 text

P2. 異常発⽣時のログ追跡が困難 理想: タスクが失敗したとき、失敗の原因を教えてくれるログが⼿軽に⾒たい ログが分散していてもつらい、統合していてもつらい たとえば Airflow では Stackdriver にいろんなログが流れるようになっ ており、該当するパイプラインのログをなんとかして掘り出す必要がある → ⼤変つらい 8

Slide 9

Slide 9 text

P3. 異常の監視と通知が困難 理想: リソースが異常値になっていないか(CPU, RAMなど)、タスクが異常終了し ていないかを監視したい、状況が悪ければSlackなどで通知してほしい 動かし⽅によっては、メモリ逼迫によってタスクが失敗した場合 (OOM Killer にやられたとき)、 何の通知も⾏われないことがあった 動作していないことに気付いていろいろ調査し、最終的にどうやらOOMした らしいということが分かった → 通知がないのは本当につらい 9

Slide 10

Slide 10 text

解決策: AI Platform Pipelines 課題を解決できる機能を搭載している機械学習基盤 パイプラインが簡単に動かせる (Web UI からデプロイできる) 課題に対して打ち⼿が打てる P1. パイプラインの性能の監視・確認が困難 → S1. メトリクス可視化機能 P2. 異常発⽣時のログ追跡が困難 → S2. ログ可視化機能 P3. 異常の監視と通知が困難 → S3. 異常監視・通知機能 (by Cloud Logging) OSS の Kubeflow Pipelines のGCPマネージド版 10

Slide 11

Slide 11 text

11

Slide 12

Slide 12 text

S1. メトリクス可視化機能 パイプラインで出⼒したメトリクス を Web UI から確認可能 意図通りの性能が出ているかを ⼿軽に確認 何度か実⾏した結果を並べるよ うに⾒せることもできる → パイプラインの性能監視・確認 が簡単 12

Slide 13

Slide 13 text

S2. ログ可視化機能 Pipelines の UI から実⾏ログ を確認可能 Cloud Logging (旧 Stackdriver Logging) と連携済 パイプラインの部品をクリック すると実⾏ログ(stdout, stderr)が⾒られる → 異常発⽣時のログ追跡が簡単 13

Slide 14

Slide 14 text

S3. 異常監視・通知機能 例外発⽣, 異常終了, OOMなどを Cloud Monitoring で検知可能 異常を検知したときに Slack などに通知できる インシデント管理システムと統 合されており、対応終了までの 管理ができる → 異常の監視と通知が簡単 14

Slide 15

Slide 15 text

全体像 Kubeflow Pipelines(GKE) + Cloud Logging + Cloud Monitoring ログは Cloud Logging に 吐かれ、Pipeline Web UI からも参照できる 異常監視と通知は Cloud Monitoring を使う GCP Managed で全部揃えて 楽をする 15

Slide 16

Slide 16 text

まとめ 機械学習タスクを指針なく作ったり、いまいちな基盤を使うとつらい思いをする 機械学習パイプライン を AI Platform Pipelines で動かすといい感じ パイプラインで分割統治すると複雑さが減る メトリクス可視化で性能監視が簡単にできる ログ統合でログが簡単に追える 異常監視・通知がGCPのサービスで簡単にできる 16