Stanby Tech Blog

求人検索エンジン「スタンバイ」を運営するスタンバイの開発組織やエンジニアリングについて発信するブログです。

MLOps導入でAmazon SageMaker PipelineによりMLワークフロー構築の話

MLOps導入でAmazon SageMaker PipelineによりMLワークフロー構築の話

はじめに

はじめまして、スタンバイのSearchAdvertisingCoreGroup(検索・広告コアグループ、以降SACG)で機械学習関連の開発をやっている王です。今回はAmazon SageMaker PipelineでMLワークフローを構築する取り組みを紹介します。

MLOpsとは

私が所属しているSACGは機械学習モデルを用いて改善施策をオフラインで効果検証して、A/Bテストで仮説を確かめることでユーザーの検索体験を継続的に改善しています。

従来Group内ではAWSのマネージド機械学習基盤Amazon SageMakerを利用してPoC(Proof of Concept)、機械学習モデルの構築、トレーニングなどを行っていました。 過去PoCの結果を振り返りにくい、もしメンバーが居なくなった際の引き継ぎなど問題がありました。 このような理由から、MLOpsの導入検討を始めました。

MLOpsについて明確な定義はなくて、DevOpsからの派生で機械学習のワークフローを効率化できることを目指しています(個人的見解)。よく参考にされるのはGoogleがプロセスの自動化のレベル別でMLワークフローを定義しています. - MLOps レベル 0: 手動プロセス - MLパイプラインは自動化を含まない - MLOps レベル 1: MLパイプラインの自動化 - MLパイプライン自体を自動化する - MLOps レベル 2: CI/CDパイプラインの自動化 - MLパイプライン自体及びCI/CDを自動化する

出典: MLOps: 機械学習における継続的デリバリーと自動化のパイプライン

上記ワークフローを構築するために、本番適用の時手間がかかる、実験管理しにくいなどの課題が出て、MLOpsはこのような課題を解決することが期待されています。

Group内で存在する課題を整理して、優先度をつけて段階的にレベルアップを目指しています。私達は、MLOps導入を最初の推進ゴールとして「MLOps レベル 1」を部分的に実現すること、具体的には「データの前処理、モデルトレーニング、モデル評価をパイプライン化する」を進めていきたいと考えています。

Group内の課題整理

MLOpsを導入する前に、Group内で実際にモデリングを担当しているメンバーにヒアリングして出てきた機械学習プロジェクトを進める中でよくある課題を紹介します。

後で実験が再現しにくい

「先月のABテストをした時の、その施策結果を今のデータにもう1回確認したい」、「その時のモデルの前処理はどんな処理でしだっけ?」などの要望がよくあります。ABテスト終了の数ヶ月後に実験を再現したい時に、当初の学習、前処理ソースコード、学習時と評価時に使うデータ、モデルのハイパーパラメータなどを全部用意しないと再現しにくいです。再現できない時に過去の知恵を活用できなくなって機会損失になりました。

モデル生成の手間

MLOpsを導入する前に、ABテストを行う際にモデルを作成にあたって、データ取り込む、データ前処理、モデル学習、モデル評価を全部手動で実行する必要がありました。特に頻繁にABテストを回す時に、このような手順の手動実行は時間もかかるし、ヒューマンエラーも起きやすい状態でした。 またモデル開発を担当するメンバーが用事で休みになった時、他のメンバーに引き継ぎも上記のプロセスを実行するときコードやパラメータなどを全部伝わないといけないので、引き継ぎもしにくい状態でした。

MLパイプラインの構築

MLOps導入最初の推進ゴールに当たって、Group内整理した課題「後で実験が再現しにくい」「モデル生成の手間」に対して、実験管理できる機械学習パイプラインの導入を考えています。 今回はGroup内利用する機械学習プラットフォームAmazon SageMakerとの連携や実験管理をライトに始められることから、Amazon Sageaker Pipelineの導入を決定しました。

Amazon Sagemaker Pipelineとは、機械学習ワークフローを管理するCI/CDサービスです。機械学習プロセスの各ステップをワークフローに組み込んで、JSON形式のDAG(Directed Acyclic Graph)としてワークフローを定義して管理や再利用できます。ワークフローを実行するときに全てのステップの詳細をログに記録して後から自動追跡できます。

CTR予測モデルを例にして、ワークフローの流れを簡単に紹介します。全体の構成は下記の図のイメージとなります。

CodeBuildから対象のpipelineを実行します。まず「SageMaker Processing Job」を起動してS3に置くデータに対する前処理を行います。処理されたデータを学習評価用のデータとしてS3に保存します。 次に「SageMaker Training Job」を起動して、前処理されたデータを用いてモデルを学習します。学習されたモデルをS3に置きます。最後に「SageMaker Processing Job」を起動して、テストデータとモデルを使ってモデルを評価して、オフライン評価結果をS3に保存します。

実行の詳細はSageMaker Studioで確認することできます。各ステップをダブルクリックするとステップの入力、出力、パラメータなどの情報を確認できます。

導入の効果としては、 - 過去の実行結果およびパラメータ、データなどを追跡できて、再実行が可能になる - データ収集からモデル評価まで1つのパイプラインでまとめてOne-Clickで実行できる

まとめ

この記事では、Group内で取り込んだMLOps導入の経緯、施策を紹介しました。MLOps導入によって機械学習プロジェクトの運用を自動化できて、手間を省き、実験に多くの時間を割くことができるようになりました。今後も機械学習施策をどんどん検証してユーザーに価値を提供できるように仮説検証のサイクルを回していきたいと考えています。 スタンバイのプロダクトや組織について詳しく知りたい方は、気軽にご相談ください。

スタンバイのプロダクトや組織について詳しく知りたい方は、気軽にご相談ください。 www.wantedly.com