DVCとkedro
背景
自分でMLを開発している時に、ワークフロー管理(データ準備、前処置、保存、学習、評価)までが蛸壷状態になっていることが多い。
DVCは前から知っていたのだが、kedroを知ったので、改めて調べて見た。
まとめ
DVCはデータバージョン管理が主であり、ワークフロー管理だけするのは違う気がした。 比較することが間違いだったかもしれない。
個人でワークフロー管理するだけなら、ワークフロー管理が主のkedroを利用するのが良いと思った。 しかし、まだv0.16.4なのでその辺りが気がかり。
DVCは、データがコロコロ変わるような環境でMLopsをしっかり行っていく場合に良いツールだと思う。 CMLと組み合わせることで、良いのだろう。
前提
MLOps
機械学習システムの開発でも、CI/CD適用しましょうね、という話。
詳しくは下記ブログを参照。 - データ、モデル、コードの3要素がMLシステムには含まれている - データサイエンティスト、データエンジニア、デベロッパーそれぞれでMLシステムで担保箇所が異なる - 有用なツール(例:DVC、mlflow)
などなどいろんなことが載っている。
上記、ワークフローがごちゃごちゃ、みたいな状態も再現性が担保できないという意味で、MLOpsとしてよくない状態。
DVC
概要
その名の通り、Data Version Controlのためのツール。
データバージョン管理だけでなく、ワークフローの管理から、metricsの可視化までできる。
- data versioning
- 文字通りデータのバージョン管理。キャッシュ利用している。また、DVCリポジトリを設定することで、データ共有も可能。
- data access
- S3, GCS, sshなど多様な接続先からデータの取得が可能
- data pipeline
- ワークフロー管理。コマンドで設定すると自動でyamlが生成されるぽい。
- experiments
- 実験管理。ブランチ間で指標比較が可能。
後述の同コミュニティがCMLというツールも開発している。 こちらは、プルリク時にmasterとtarget branch間との指標比較の自動化をしてくれるっぽい。 同コミュニティということもあり、dvc pullを利用してgitリポジトリ外のデータを引っ張ってくることもできる。
コミュニティ
バックは企業で、DVCとCML の開発を行っている。 というかこれのための企業?
活発な印象でOSS選定する時に懸念するようなことはない気がする。
所感
結構、使うのが厳しそう。 gitと密に連携しているのがエンジニアに取っては良いところでもあり、非gitユーザーにとってのハードルの高さでもある気がする。
また、data versioningは果たしてどこまで使うのだろうか。 結構な頻度かつ、知らぬ間に学習データが変わっている、ということがなければ必要ないのかもしれない。 それこそ私の職場では、学習データがほとんど更新されない(年2回程度)ので、調べながら実際のユースケースが少ないと思った。 しかし、webアプリ系の企業の場合は日毎に学習と評価を繰り返すことがあって、それに対してdata versioningが有用なのかもしれない。
リポジトリ間を使って、データ共有できる、というのは結構メリットあると思うけど、多人数でMLシステムを開発したことがないので、メリットの実感が沸かない。 s3もあるし。 再現性という意味では一番適していいるのかもしれないが。
ロールバック機能もある(多分。)
さらに言うと、gitの開発も頻繁なのになぜかワークフロー管理の日本語ブログ記事が出てこない。大体は使ってみた程度。 ただの予想だが、DVCは個人用途に向かないからそもそもブログで書かない、エンジニアよりすぎるツールでとっつきにくい、と言うのが背景にあるのではないだろうか。
kedro
github.com kedro.readthedocs.io
概要
MLシステムのワークフロー管理のためのpythonフレームワーク。 ワークフロー管理に特化しているので、実験管理などは含まれない。 データカタログという機能があって、データ取得は様々なストレージに対応、管理できる。 独自のパイプラインも定義することができるので拡張性も高い。
使い方
これらのブログ見てもらった方が良い。とてもよく纏まっていて参考になります。
小さく始めて大きく育てるMLOps2020 | AI tech studio
コミュニティ
こちらも背景にあるのは、企業。 DVCよりは少ないけども、gtiの開発も安定している。 OSS選定としては問題ない気もする。
所感
pythonのフレームワークで拡張性が高いという点、ディレクトリテンプレートがある点などいろいろと使いやすそう。 DVCと比較すると開発コミュニティが小さい気もするけど、許容範囲だとは思う。 残念なのはまだversion 0.16.4だということ(2020/08/14時点)。
今度使ってみようと思う。
参考
- OSS選定について