MLOpsを実現するSRE激闘の歴史

703c34db2db0e609fddec6a5585ceccc?s=47 Kenta Sato
September 19, 2020

 MLOpsを実現するSRE激闘の歴史

XP祭り2020登壇資料
MLOpsを実現するSRE激闘の歴史

703c34db2db0e609fddec6a5585ceccc?s=128

Kenta Sato

September 19, 2020
Tweet

Transcript

  1. .-0QTΛ࣮ݱ͢Δ43&ܹಆͷྺ࢙ ετοΫϚʔΫגࣜձࣾ 4JUF3FMJBCJMJUZ&OHJOFFSࠤ౻ ݡଠ 91ࡇΓ

  2. ˜4UPDLNBSL *OD ࣗݾ঺հ

  3. ˜4UPDLNBSL *OD ࣗݾ঺հ • 佐藤 賢太 (@kenta_sato3) • 36歳 •

    2児の父 • 福岡出身 • 元野球選手(アメリカ・オーストラリア・スウェーデン) • コールセンター・企業向けUC (ユニファイドコミュニケーション)パッケージ製品べンダーのSEと して5年ほど経験し、2019年10月にストックマークにSREとして入社 • ストックマークではクラウド、AWSやGCP上でのシステム構築及び運用、SREやMLOpsに携わる
  4. © 2020 Stockmark Inc. 会社名 ストックマーク株式会社 Stockmark Inc. オフィス 東京都港区南青山1丁目12-3

    LIFORK MINAMI AOYAMA S209 設 立 2016年11月15日 創業者 代表取締役CEO 林 達 取締役CTO 有馬 幸介 事業内容 自然言語処理技術を活用した ビジネス意思決定サポートサービスの提供 従業員数 54名 (2020年6月 現在) URL http://stockmark.co.jp | 会社概要 会社概要
  5. ˜4UPDLNBSL *OD ໨࣍

  6. ˜4UPDLNBSL *OD ໨࣍ • プロダクト概要 • システムアーキテクチャ概要とMLで実現したいこと • ML初心者SREがMLOpsに挑戦することになった背景 •

    MLOpsとはなにか、なぜ必要か • MLOpsを実現するSREの激闘の歴史 • 課題設定と継続的な改善 • これから
  7. ˜4UPDLNBSL *OD プロダクト概要

  8. © 2020 Stockmark Inc. Z c"TUSBUFHZͷػೳ ಛఆͷྖҬʹରͯ͠ɺओཁಈ޲ɾւ֎ಈ޲ɺͦͷଞͷಈ͖ͱͯࣗ͠ಈͰ෼ྨɻ ͜Ε·Ͱߏ଄ԽͰ͖ͳ͔ͬͨࢢ৔಺ͷಈ͖ͱϓϨΠϠʔΛՄࢹԽɻ ๲େͳ৘ใΛ၆ᛌ্ͨ͠ͰಛఆྖҬΛ"*͕ߏ଄Խ ػೳ

     Ωʔϫʔυ͔ΒಛఆͷྖҬΛݕࡧ ۀքߏ଄Λ"*͕ߏ଄Խ ओཁͳϓϨʔϠʔΛநग़ 
  9. © 2020 Stockmark Inc. ֤اۀ͕ͲͷΑ͏ͳࣄۀʹऔΓ૊ΜͰ͍Δͷ͔Λ੔ཧɺ ֤ࣾͷࠩผԽཁҼΛՄࢹԽ͠ɺଧͪख૑ग़ͷώϯτΛఏڙɻ ಛఆྖҬͷاۀͷऔΓ૊ΈͱࠩผԽཁҼͷՄࢹԽ ػೳ  c"TUSBUFHZͷػೳ

    ࠩผԽཁҼΛՄࢹԽ اۀผʹهࣄΛ෼ྨ 
  10. © 2020 Stockmark Inc. ϓϨΠϠʔͷࢀೖλΠϛϯάͱهࣄྔΛՄࢹԽ͢Δ͜ͱͰɺ ಛఆྖҬͷ৳ͼΛఆྔతʹ௥͍ɺࢢ৔ͷ੒௕ՄೳੑΛ୳ΔώϯτΛఏڙɻ ࣌ܥྻͰࢀೖϓϨΠϠʔͱهࣄͷ৳ͼΛՄࢹԽ ػೳ  c"TUSBUFHZͷػೳ

    ϓϨΠϠʔΛϦετΞοϓ ݄ผͷهࣄྔΛදࣔ 
  11. © 2020 Stockmark Inc. اۀ໊நग़ʹ͍ͭͯ اۀ໊Λਖ਼͘͠நग़͢Δʹ͸ɺจ຺͔Β୯ޠͷ ҙຯΛ൑அ͢Δඞཁ͕͋Γɺίϯϐϡʔλʔʹ ͸ͱͯ΋೉͍͠ɻ 4UPDLNBSL͸ɺจ຺ΛߟྀͰ͖Δ"*ͷʮ#&35ʯ Λ༻͍ͨख๏Λ։ൃɻ

    ˔ ˔ cࢀߟ 
  12. ˜4UPDLNBSL *OD システム概要とMLで実現したいこと

  13. ˜4UPDLNBSL *OD ΞʔΩςΫνϟ • サーバレス基盤で記事データ収集 • Cloud TPUで汎用言語モデルを作成 • オンプレGPUでモデルのファインチューニング

    • AWSのGPUでMLバッチ処理 • マイクロサービスウェブアプリケーション
  14. ˜4UPDLNBSL *OD هࣄσʔλऩू

  15. ˜4UPDLNBSL *OD Ϗδωεʹڧ͍ࣄલֶशࡁΈ൚༻ݴޠϞσϧ

  16. ˜4UPDLNBSL *OD Cloud TPU: 事前学習済み汎用言語モデル構築 出典: https://cloud.google.com/tpu?hl=ja • ディープラーニングを高速化 •

    精度向上
  17. ˜4UPDLNBSL *OD オンプレGPU: モデルのファインチューニング • 汎用言語モデルをタスクに特化してチューニング • 長時間要するタスク

  18. ˜4UPDLNBSL *OD ΢ΣϒΞϓϦέʔγϣϯΞʔΩςΫνϟ

  19. ˜4UPDLNBSL *OD .-όονͰ΍Γ͍ͨ͜ͱ

  20. © 2020 Stockmark Inc. Z c"TUSBUFHZͷػೳ ಛఆͷྖҬʹରͯ͠ɺओཁಈ޲ɾւ֎ಈ޲ɺͦͷଞͷಈ͖ͱͯࣗ͠ಈͰ෼ྨɻ ͜Ε·Ͱߏ଄ԽͰ͖ͳ͔ͬͨࢢ৔಺ͷಈ͖ͱϓϨΠϠʔΛՄࢹԽɻ ๲େͳ৘ใΛ၆ᛌ্ͨ͠ͰಛఆྖҬΛ"*͕ߏ଄Խ ػೳ

     Ωʔϫʔυ͔ΒಛఆͷྖҬΛݕࡧ ۀքߏ଄Λ"*͕ߏ଄Խ ओཁͳϓϨʔϠʔΛநग़ 
  21. ˜4UPDLNBSL *OD .-ॳ৺ऀ͕.-0QTʹ௅ઓ

  22. ˜4UPDLNBSL *OD .-ॳ৺ऀ͕.-0QTʹ௅ઓ MLOpsの必要性感じています 佐藤さん興味あります? ͱ͋Δ೔ͷ͜ͱ

  23. ˜4UPDLNBSL *OD ࢲͷͦΕ·Ͱͷ.-஌ࣝ • DevOps実践 • MLシステム運用歴なし • MLは個人的に勉強(実務経験なし) •

    Coursera Machine Learning • Kaggleに登録したら次にやること ~ これだけやれば十分闘える Titanicの先へ行く入門 10 Kernel ~
  24. ˜4UPDLNBSL *OD .-ॳ৺ऀ͕.-0QTʹ௅ઓ やらせてください! ϊϦͰ"TUSBUFHZͷ.-0QTΛ΍Βͤͯ΋Β͏͜ͱʹ

  25. ˜4UPDLNBSL *OD .-0QTͱ͸ɺͳͥඞཁ͔

  26. ˜4UPDLNBSL *OD .-0QTͱ͸ • 明確な定義はなく、Googleの人が提唱したのが最初(自分の観測範囲) • DevOpsのML版 • MLOpsは、MLシステム開発(Dev)とMLシステムオペレーション(Ops)を統合することを目的とし たMLエンジニアリングの文化と実践です。MLOpsを実践するということは、統合、テスト、リリー

    ス、デプロイ、インフラストラクチャ管理を含む、MLシステム構築のすべてのステップで自動化 とモニタリングを提唱することを意味します。 出典: MLOps: 機械学習における継続的デリバリーと自動化のパイプライン https://cloud.google.com/solutions/machine-learning/mlops-continuous-delivery-and- automation-pipelines-in-machine-learning?hl=ja
  27. ˜4UPDLNBSL *OD ͳͥ.-0QT͕ඞཁ͔ • 役割の溝 • データ収集 → データエンジニア •

    モデル構築 → データサイエンティスト • 本番運用 → ソフトウェアエンジニア、SRE • 同一の予測結果を得る難しさ • CACEの原則 • データや実験の管理 • 経済的な問題 • 継続的な学習とサービングの必要性 • 予測時のデータが学習時から変わってくる
  28. ˜4UPDLNBSL *OD .-γεςϜ͸ෳࡶ ML システムの要素。機械学習システムの隠れた技術的負債からの抜粋

  29. ˜4UPDLNBSL *OD .-4VQFSIFSP໰୊ なんでもできるML superheroに依存するとスケールしなくなる ML superhero What is ML

    Ops? Best Practices for DevOps for ML (Cloud Next '18)から転載.
  30. ˜4UPDLNBSL *OD .-0QTΛ࣮ݱ͢Δ43&ͷܹಆͷྺ࢙

  31. ˜4UPDLNBSL *OD .-0QTΩοΫΦϑϛʔςΟϯά • MLエンジニアの感じている課題感を共有してもらう • コードとモデルのCI/CD機構がほしい • ニュース記事のローデータ(HTML)が欲しい •

    オンプレで作成しているモデルのデプロイをもっといい感じにしたい • MLバッチシステムは構築済みなので、一緒にどこから手を付けて行けばよいかを深堀りすることに
  32. ˜4UPDLNBSL *OD ॳظߏ੒ • CloudWatch Eventをトリガー • LambdaでRDSのデータを抽出 • S3にデータを格納

    • EC2でバッチ処理 • Elasticsearchに登録
  33. ˜4UPDLNBSL *OD ॳظߏ੒ͷ՝୊ • コード更新のたびに手作業であたたかみのあるデプロイ • EC2 x 2(CPU, GPUインスタンス)

    • SCPコマンドで開発環境からコードをアップロード • SCPコマンドでモデルのアップロード (合計10 GB超え) • SSHでEC2にログインし、Docker imageをビルド (1時間弱) • Lambda x 3にzipで固めたコードをコンソールからデプロイ • 直列で10種類のMLタスクを回すので実行時間が長くなる • デバッグが大変
  34. ˜4UPDLNBSL *OD MLタスク毎にインスタンスを用意して並列処理

  35. ˜4UPDLNBSL *OD MLタスク毎にインスタンスを用意して並列処理 インフラ構築、デプロイ、運用全て一人のMLエンジニアをがやっていた

  36. ˜4UPDLNBSL *OD σϓϩΠ͖ͭ͗͢໰୊ൃੜ コード x モデルを各インスタンスに手動デプロイで大半の時間を取られる

  37. ˜4UPDLNBSL *OD ՝୊ઃఆᶃ 1. 継続的インテグレーション (CI) 機構がない。 → テストで防げるような不具合が検知できないため、デ プロイ後に発覚して手戻りが発生する。

    2. 継続的デプロイ (CD) 機構がない。 → デプロイ運用コストが大きく、かつ手動デプロイによるミスが 発生しやすい。 3. 監視機構がない。 → バッチ処理が無事完了したかどうかを毎日手動でElasticsearchとS3に確認しないと いけない。
  38. ˜4UPDLNBSL *OD $*$% $PEF .PEFM • CI • PR作成時にAWS CodeBuild上で自動テスト

    • CD • PRマージ • Lambda: Serverless Framework • EC2 • Python boto3のec2とssm • ML model • S3にpush • EFSへ同期し、EC2からマウント
  39. ˜4UPDLNBSL *OD όον؂ࢹ • Lambdaを定期実行し、期待するデータが 期待する場所に入っていることをチェック

  40. ˜4UPDLNBSL *OD ۤ࿑ͨ͜͠ͱ • 全体の構成の把握 • 構成図等はなく、MLエンジニアの頭の中をdumpしてまとめる作業 • Dockerビルドに長時間かかる •

    マルチスレッドのPythonスクリプトを書いて並列リモートビルド • EC2へのコード、モデルのデプロイ方法
  41. ˜4UPDLNBSL *OD ޮՌ MLエンジニアの運用負荷が激減

  42. ˜4UPDLNBSL *OD ޮՌ MLエンジニアが本来のML研究開発など創造的な仕事に集中することができるようになった

  43. ˜4UPDLNBSL *OD ՝୊ઃఆᶄ • EC2インスタンスの管理が必要 • 新しいMLタスクができた時などは専用のEC2を立ててプロビジョニングする必要がある • 各EC2を起動するLambdaの作り込みが必要 •

    S3更新を起点で処理が走り、記事数が多い時は複数データファイルに分割して並列処理をするようにし ているが、lock制御などをシェルスクリプトで作り込む必要がある • 実行結果監視用機構を作り込む必要がある • 全体のフローの把握が困難
  44. ˜4UPDLNBSL *OD ղܾํ๏ • コンピューティング環境は、EC2からAWS Batchに移行する • EC2の管理が不要になる • Step

    Functionsから直接ジョブ登録できる • ワークフロー制御にはStep Functionsを使う • ワークフローを一元管理し、ジョブの依存関係(DAG)表現できる • フローの途中で通知処理を加えたい場合などに、アプリケーションロジックと分離して実装できる • 並列、配列処理やリトライ、例外処理がフローで実装でき、アプリケーションロジックをシンプル にできる • インフラはterraformでコード化する • インフラ構成をコードとしてドキュメント化 • 変更管理をGitでレビュー • インフラもCI/CDに組み込める
  45. ˜4UPDLNBSL *OD "84#BUDI4UFQ'VODUJPOT • 重いMLジョブもデータを分割して、配列ジョブとして実行 • 異なるMLタスクは並列実行

  46. ˜4UPDLNBSL *OD "84#BUDI4UFQ'VODUJPOT

  47. ˜4UPDLNBSL *OD "84#BUDI4UFQ'VODUJPOTʢ੒ޭ࣌ʣ

  48. ˜4UPDLNBSL *OD "84#BUDI4UFQ'VODUJPOTʢࣦഊ࣌ʣ

  49. ˜4UPDLNBSL *OD $*$% • GitHub & CodeBuild • ServerlssフレームワークでLambdaをデプロイ •

    Terraformでインフラ管理 • DockerfileやPipfile変更時にDockerイメージをビル ドし、ECRにPUSH • モデルはS3からEFSに同期
  50. ˜4UPDLNBSL *OD ۤ࿑ͨ͜͠ͱ • 並列実行で、共有ファイルシステムの同じ名前のtmpファイルに同時に読み書き(想定外)に失敗 • Step Functionsで拾えない例外に遭遇し、GPUサーバーが暴走

  51. ˜4UPDLNBSL *OD ޮՌ • 全体のフローが可視化できて良い • リトライ処理などをアプリケーションに組み込 む必要がなくなり、コードが減り保守しやすく なった •

    処理の途中経過をSNSに通知することで、他のア プリケーションが連携しやすくなった。 • トラブルシューティングが容易になった。 • MLタスクの追加が容易になった。
  52. ˜4UPDLNBSL *OD ՝୊ઃఆͱܧଓతͳվળ

  53. ˜4UPDLNBSL *OD ՝୊ઃఆͱܧଓతͳվળ • なぜやるのかを明確にする • 「MLOpsをする」ことは目的ではない • ツールありきではない •

    ユーザー(MLエンジニア)と話したり、ボトルネックを特定し、課題を明確にする • どうやるのか • 自分のスキルで解決できそうな課題からやる。ドメイン知識やスキルが増えると徐々に他のところ にも手を出せるようになる。 • すぐに完璧を目指さない。
  54. ˜4UPDLNBSL *OD ͜Ε͔Β

  55. ˜4UPDLNBSL *OD ͜Ε͔Β • 実験管理, • データのバリデーション • データ・パイプラインのバージョン管理とか

  56. ˜4UPDLNBSL *OD ͜Ε͔Β • 実験管理, • データのバリデーション • データ・パイプラインのバージョン管理とか •

    引き継つぎました
  57. © 2020 Stockmark Inc. | Product | Anewsの機能 AIが人力では抽出できない膨大なビジネスニュースから、 組織や個人の関心事に合わせて、ビジネスに直結したニュースをレコメンド。

    テーマに合わせてAIが組織に必要なニュースを配信 機能 01
  58. ˜4UPDLNBSL *OD ͜Ε͔Β • インフラもゼロから構築 • CI/CD • 運用・監視 •

    B2B SaaSの推薦システム 独特の課題
  59. ˜4UPDLNBSL *OD ࢀߟ

  60. ˜4UPDLNBSL *OD ࢀߟ https://tech.stockmark.co.jp/

  61. ˜4UPDLNBSL *OD