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

Cb9ecbe357ee454b43701d7620da37ff?s=47 Karno
June 26, 2020

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

Kubeflow Pipelines の GCP マネージド版である AI Platform Pipelines を使って、機械学習パイプラインを動かした話です。どんなメリットがあるのか、どのような全体像になっているのかをまとめました。

Cb9ecbe357ee454b43701d7620da37ff?s=128

Karno

June 26, 2020
Tweet

Transcript

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

  2. whoami Ryosuke Nakano a.k.a. Karno https://github.com/karno Software Engineer @ Repro

    AI Lab (2020.4 ~) もと JTBC(Japanese Traditional Big Company) だった クラウドにわか勢 2
  3. Table of Contents 1. 背景: 機械学習をサービスに乗せるつらさ 2. 課題: 機械学習パイプラインをうまく動かす 3.

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

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

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

    P3. 異常の監視と通知が困難 6
  7. P1. パイプライン性能の監視・確認が困難 理想: 機械学習モデルの性能を⾒やすく監視できる状態 (学習が意図通り動いているか、想定していないデータが⼊ってきていないか、など) 描くべきグラフ・⾒るべきデータは分かっているので、それを⼿軽に⾒たい 例えば GCS Bucket に保存したデータでグラフを描きたい

    外部サービスを頼るか、あるいは毎回⼿元にダウンロードしてきて分析する? 外部サービスを⾒つけてきて、繋いでみて、相性を確認して… gsutil cp で持ってきて Jupyter で… → 外部サービスで可視化するのも、⼿元で可視化するのも つらい 7
  8. P2. 異常発⽣時のログ追跡が困難 理想: タスクが失敗したとき、失敗の原因を教えてくれるログが⼿軽に⾒たい ログが分散していてもつらい、統合していてもつらい たとえば Airflow では Stackdriver にいろんなログが流れるようになっ

    ており、該当するパイプラインのログをなんとかして掘り出す必要がある → ⼤変つらい 8
  9. P3. 異常の監視と通知が困難 理想: リソースが異常値になっていないか(CPU, RAMなど)、タスクが異常終了し ていないかを監視したい、状況が悪ければSlackなどで通知してほしい 動かし⽅によっては、メモリ逼迫によってタスクが失敗した場合 (OOM Killer にやられたとき)、

    何の通知も⾏われないことがあった 動作していないことに気付いていろいろ調査し、最終的にどうやらOOMした らしいということが分かった → 通知がないのは本当につらい 9
  10. 解決策: AI Platform Pipelines 課題を解決できる機能を搭載している機械学習基盤 パイプラインが簡単に動かせる (Web UI からデプロイできる) 課題に対して打ち⼿が打てる

    P1. パイプラインの性能の監視・確認が困難 → S1. メトリクス可視化機能 P2. 異常発⽣時のログ追跡が困難 → S2. ログ可視化機能 P3. 異常の監視と通知が困難 → S3. 異常監視・通知機能 (by Cloud Logging) OSS の Kubeflow Pipelines のGCPマネージド版 10
  11. 11

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

    うに⾒せることもできる → パイプラインの性能監視・確認 が簡単 12
  13. S2. ログ可視化機能 Pipelines の UI から実⾏ログ を確認可能 Cloud Logging (旧

    Stackdriver Logging) と連携済 パイプラインの部品をクリック すると実⾏ログ(stdout, stderr)が⾒られる → 異常発⽣時のログ追跡が簡単 13
  14. S3. 異常監視・通知機能 例外発⽣, 異常終了, OOMなどを Cloud Monitoring で検知可能 異常を検知したときに Slack

    などに通知できる インシデント管理システムと統 合されており、対応終了までの 管理ができる → 異常の監視と通知が簡単 14
  15. 全体像 Kubeflow Pipelines(GKE) + Cloud Logging + Cloud Monitoring ログは

    Cloud Logging に 吐かれ、Pipeline Web UI からも参照できる 異常監視と通知は Cloud Monitoring を使う GCP Managed で全部揃えて 楽をする 15
  16. まとめ 機械学習タスクを指針なく作ったり、いまいちな基盤を使うとつらい思いをする 機械学習パイプライン を AI Platform Pipelines で動かすといい感じ パイプラインで分割統治すると複雑さが減る メトリクス可視化で性能監視が簡単にできる

    ログ統合でログが簡単に追える 異常監視・通知がGCPのサービスで簡単にできる 16