突然ですが、みなさん MLOps を実践されていますか。私は雰囲気しか知りません。 今回はそんな MLOps について学んだ概念と一つのツールである DVC について紹介します。 また、今実際に使っている中で感じている点についても少し紹介できればと思います。
MLOps とは
Machine Learning (機械学習)と Operations (運用)を組み合わせた単語です。 ざっくり言うと、「機械学習システムをいい感じに運用する」という概念のことです。 この「いい感じ運用」というのは、モデルの監視や更新をはじめとする日々の運用を円滑に進められるということです。 機械学習基盤や機械学習運用と表現されることもあります。
なぜ MLOps なのか
第一にソフトウェア開発は困難です。 DevOps と呼ばれるソフトウェアエンジニアリングと運用をいい感じにする概念があります。 そもそもソフトウェアというのは現実を抽象化し、現実をデータに変換し、仮想空間で取り扱う極めて複雑なものです。 また現実(要件)を追従し続け、さらに安定稼働させるということは非常に難しいです。 複雑な箇所を少しでも簡単にと提唱されているのが DevOps です。
MLOps は、DevOps を踏襲したようなものです。 機械学習を利用したソフトウェアというのは、従来のソフトウェア開発の難しさに加え、機械学習独特の難しさがあります。 挙動やデータなど不確定な部分への依存が複雑さを生む一つの要因と言えます。
この複雑さを解消することで、改善のサイクルをはやく回したり、新しいモデルを安定稼働させたりと、最終的なビジネス要件を達成するための、ソフトウェアとしての機械学習の複雑さを軽減することが、MLOps の目的だと思います。
その氷山の一角を示したのが、よく見る上記の図*1です。ML Code がびびるくらい小さい領域であることがわかるでしょうか。 機械学習を組み込んだシステムを運用(改善、調査、更新など)しようと思うと、実は多岐にわたる注意が必要だということです。
データや評価結果を管理してみる
MLOps 関連のツールは多数あります。 その中で、データのバージョン管理や実験管理といった自分自身が課題と感じている部分を解消するツールである「Data Version Control(DVC)」について紹介します。
DVC の概要
DVC とは機械学習プロジェクト向けのバージョン管理ツールです。 Git の上に乗っかりつつ、機械学習プロジェクトで必要なモデルのバージョン管理や評価の管理などの様々な機能を提供します。
各バージョンに対応するデータの実体の保管場所として、AWS S3 をはじめとして有名どころのクラウドストレージサービスやリモートサーバを選ぶことができます。 ファイルに対するハッシュ値(md5)を Git などのバージョン管理システムで管理し、その実態を DVC で管理するようです。 ファイルの実態管理部分については Git LFS に似ていると思います。 実態をどこで管理するか、実験管理機構など機械学習向けに進化したソフトウェアという印象です。
また、DVC は実験手順を yaml により記録する方法を提供しており、再現性を高めてくれます。 ML パイプラインや評価が管理できるということです。
まとめると、煩雑な管理となりがちな、実験コード、パラメータ、データ、データ処理を一つのコミットとして管理でき、また、これらの設定ファイルから実験を再現できるというのが、DVC の利点だと言えるでしょう。
使ってみるには
pip install dvc
と pip コマンドでインストールできます。
チュートリアルは公式マニュアルが充実していますので、そこで一通り試すといいと思います。
S3 をレポジトリとする場合について簡単に紹介します。
dvc の初期化はされている前提です。
あらかじめ S3 上にバケットを作成しておきます。
ここでは、randd-dvc-sample
とします。
$ dvc remote add -d s3remote s3://randd-dvc-sample/proj1 $ dvc remote modify s3remote profile AWS_PROFILE_NAME $ dvc remote modify s3remote region REGION_NAME
AWS_PROFILE_NAME
には、対象 S3 バケットにアクセスするために必要な aws の認証プロファイルの名前を設定します。
REGION_NAME
も同様です。
コミットして、プッシュします。
$ git commit .dvc/config -m "Configure remote storage" $ dvc push 1 file pushed
S3 に次の図に示すようなファイルが保存されます。 こちらが実体となります。
これから使っていく上で
今、実験管理部分で DVC を使っており、使い続けていく上でまだはっきりわからない部分が多いですが、その中での今の考えをまとめます。
ツールが持つ生産性を引き出すためには、おそらく「コミットの概念」が重要だと思います。 また、「どの段階で使うか」も大事だと思います。
- コミットの概念
- そもそもバージョン管理システムにおけるコミットとは、現在のバージョンのコードを履歴に追加すること。
- 実験管理ツールやデータ管理ツールに囲まれる中での、コミットとは何なのか?
- 実験管理なら実験を管理する
- プロダクションのモデルを再現したいなら、プロダクションの設定を管理する
- ただ、切り分けが難しそう
- どの段階で使うか
- DVC は、プロダクション時のデータの管理に便利そう(GitLFS でもいい気がするが、Makefile っぽいもので残せるのは魅力)
MLOps が ML システムをより強化する
MLOps は新しい概念で、自分でもまだまだ勘違いしている部分がきっと多いのだろうと思いながら、手探りで進めています。
実務における実験の再現というのは、いろいろな制約上難しいことが多いです。ここら辺は、知見がたまってきたらまた記事としてまとめます。
最後に、MLOps はこの記事で紹介されているようなものでなく、もっとすごいので、MLOps でDSOCの研究開発をより勢い付けたいというかたは、こちら を是非ご確認ください!
執筆者プロフィール
高橋寛治 Sansan株式会社 DSOC (Data Strategy & Operation Center) 研究開発部 研究員
阿南工業高等専門学校卒業後に、長岡技術科学大学に編入学。同大学大学院電気電子情報工学専攻修了。在学中は、自然言語処理の研究に取り組み、解析ツールの開発や機械翻訳に関連する研究を行う。大学院を卒業後、2017年にSansan株式会社に入社。キーワード抽出など自然言語処理を生かした研究開発に取り組む。
▼本連載のほかの記事はこちら
*1:図は、D. Sculley, et al. Hidden technical debt in Machine learning systems. In Proceedings of the 28th International Conference on Neural Information Processing Systems - Volume 2 (NIPS'15). 2503–2511. より引用しています。