えんじにあのじゆうちょう

勉強したことを中心にアウトプットしていきます。

Deltalakeのバージョニング機能を試してみる

はじめに

機械学習をプロダクションで行う場合、基本的にはMLOpsの枠組みに乗せてモデルを継続的に学習させ精度を向上、Keepしていくということが重要になるわけですが、一方であるときに使ったパラメータやデータセットの管理は結構手間です。
パラメータで言えばMLflowのようなものに記録すればいいのですが、データはコピーで持っておこうにもストレージ容量をコピー分食ってしまったりするため、ある程度慎重に設計する必要があります。

うーむ、と思っていたところ、Deltalakeをふと思い出しまして、とりあえず試してみるか、というのが本稿のモチベーションです。まずは浅く、どんなものか触ってみたという話をします。


Deltalakeについて

とりあえずやってみよう

Deltalakeを試すなら、databricks community editionが一番手っ取り早いです。
以下にNotebookをおいておきます。チュートリアルレベルで全然大したもの書いてないので、PythonとSQLが読めれば余裕だと思います。
databricks-prod-cloudfront.cloud.databricks.com

何が美味しいんだっけ?

仮に毎日データを収集、週次で学習しているようなシステムがあって、例えば3週間前の学習モデルに不備があったときに、しっかりと記録を取っていれば3週間前のデータで学習し直して予測をやり直す、ということができると思いますが、このとき課題になるもののうち1つが上で上げたように「データをどのようにバージョニングしておくか」という課題です。
これまでの技術でも日付パーティションなどがあると思いますが、これは設計時の考慮が必要でありそもそもパーティション数に限界があったりと運用の考慮が必要だと思います。

Deltalakeに関しては上のノートブックに書いたようにほぼ既存のSparkのままでちょこっと付け足すだけで(もちろんM/Wの準備は必要ですが)何も考えずに利用できる点が強いように思います。
とはいえ、動くことを検証しただけで、性能的な問題(例えばRead/Writeが遅くなったり、ストレージ使用量が爆発的に増えるとか)は一切未検証なので、そのあたりは現状わかりません。
正直データ量や運用期間をある程度かけないとわからない気がするので、どこかで試してみたい。。。という気持ちです。(とはいえトラブルのは嫌だけど)

終わりに

あっさりとDeltalakeに入門してみました。
性能とかわからない点はありつつも使うのだけは簡単そう、という印象で非常に良いですね。
ただ、AWS, Azureは簡単にいけるっぽいのに、GCPが特に何らかの対応ないのが少し寂しいです。