今回は、機械学習を使った仕組みを考えたときにどんなDevOps(MLOpsとも言います)が最適かということについて書いていきます。
この記事は
SAP Advent Calendar 2019 の12月23日分の記事として執筆しています
機械学習の特徴
特徴1:学習
機械学習の特徴は、IF文などの条件分岐ではなくデータから学習をして判断をする点にあります。これは素晴らしい点であると同時に面倒なことも生じます。図で見ると中央部の「学習」プロセスが機械学習固有の部分です。
正直、開発をしてデプロイするだけでもヒーヒー言っていることもあるのに、これに
学習データとモデルの管理、学習プロセスの管理を加えると面倒なことこの上ありません(とは言え、IF文などを書きまくってスパゲッティコードにしたり、単純な判断しかできないよりも圧倒的に素晴らしいです)。
特徴2:属人化
また、現時点では機械学習がわかるエンジニアの数も少なく、
開発や運用が属人的になりやすいです。GitHubが最新化されていない、最新モデルが開発者のPC上にだけある、なぜハイパーパラメータを今の値に設定したのか、などよくあるのではないでしょうか。
特徴3:進化のスピードが早い
使っているライブラリやアルゴリズムなどの進化のスピードが異常に早く、ついていくのが大変です。基幹システムのような安定して下位互換性を保ちながら動かすシステムと違い、すぐに状況が変化し技術的負債が溜まってしまいます。
機械学習の特徴への対応方法
機械学習のDevOpsに関して、試行錯誤の旅路こそ違えど行き着く先はほぼ同じです。詳しくは解説しませんが、ウーバー(Uber)社の
ミケランジェロ(Michelangelo)、Twitter社の
Deepbird、Facebook社のFBLearner Flowなど各社が各社なりの最適化を行っていますが共通した機能が多いです。
では、先程の特徴3つに対してどのように対応をとり得るのでしょうか。SAP Data Intelligenceでの対応方法を紹介します。
処理パイプライン化
・学習などのプロセスをパイプライン化します。処理分割により、高度なスキルや知識が必要な部分を最小化し、見える化を推進します。パイプラインのモデラー上でどの処理でエラーが起きているかなどのモニタリングができます。
試行錯誤の場の提供と共有
機械学習で非常にお世話になるJupyter Labと統合されています。Jupyter Labではアルゴリズムが正しく機能するか、新しい関数の使い方などをインタラクティブに試すことができます。そして、試行錯誤の内容を保存して関係者と共有化できます。
データアクセス効率化とデータ共有
元データへ手をのばす、加工することに加えてデータ加工の途中経過を含めて訓練データを保存することできます。また、S3のような人気のあるデータストレージへアクセスすることもできます(パイプラインで使える部品が提供されています)。これにより開発効率化を進め、データの共有化もすすめることができます。
モデルバージョンと精度の管理
モデルをバージョン管理し、バージョンごとにモデル精度をモニタすることができます。
シナリオ管理
機械学習を使うシナリオ管理として、上記で言及したJupyterやデータ、モデルをひもづけることができます。