feature storeとは?MLの特徴量を提供する仕組みの解説
feature storeは、モデルが使用する入力特徴量を計算・保存・提供する中央システムで、トレーニングとservingが同じ値を見るようにします。
feature storeは機械学習で最も厄介な問題の1つを解決します。モデルがトレーニングに使った特徴量が、本番環境で見る特徴量とまったく同じであることを保証するのです。これはエンジニアとデータサイエンティストが特徴量を一度定義してどこでも再利用するための共有レイヤーです。
feature storeとは何か
feature storeはMLの特徴量 - 「過去30日間の平均注文額」のような、生データから導出される数値入力 - を管理するためのインフラです。特徴量の定義、計算された値、そして各特徴量がどう生成されたかに関するメタデータを保存します。代表的な例としてFeastやTectonがあります。
training-serving skewの問題
MLの古典的なバグがtraining-serving skewです。ある特徴量がトレーニングpipelineでは1つの方法で計算され、servingのコードではわずかに異なる方法で計算されるため、本番のモデルがオフラインのモデルより悪い挙動を示します。feature storeは特徴量を一度だけ計算し、両方のパスに同じロジックを提供することでこれを解決します。
offline storeとonline store
ほとんどのfeature storeには2つの半分があります。offline storeはトレーニング用の大きな履歴特徴量を、通常はwarehouseやlakeに保持します。online storeは最新の特徴量を、リアルタイム推論のために低レイテンシのデータベースに保持します。feature storeはこの両者を同期させ続けます。
CI/CDにおけるfeature store
特徴量の定義はコードであり、CIを流れるべきです。定義を検証し、サンプルデータに対して特徴量pipelineを実行し、公開される前にどの特徴量にも予期しないnullや範囲外の値がないかを確認します。特徴量のマテリアライズは、offline storeをバックフィルしonline storeをリフレッシュする、スケジュールされたCIのjobにできます。
# Validate and materialize features in CI
steps:
- run: feast apply # register feature definitions
- run: pytest tests/features # check ranges and nulls
- run: feast materialize-incremental $(date -I)Latchkeyについて
マテリアライズのjobは大きな履歴テーブルを読み込み、メモリを大量に消費することがあります。Latchkeyではそれらをより大きなrunnerで実行し、重いPythonやデータの依存関係を実行間でcacheできます。加えて、自動リトライがバックフィル中の一時的なwarehouseやobject storeのタイムアウトをカバーします。
重要なポイント
- feature storeはMLの特徴量を計算・保存・提供し、トレーニングと推論が同一の値を使うようにします。
- 各特徴量を一度定義してどこでも再利用することで、training-serving skewを防ぎます。
- 特徴量の定義はコードであり、CIのjobを通じて検証・マテリアライズされるべきです。