Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

Redisで始めるFeast:機械学習フィーチャーストアのクイックスタートチュートリアル

本チュートリアルでは、FeastとRedisを使ったクイックスタートの手順を、エンドツーエンドの実例とともに解説します。Feastをオープンソースのフィーチャーストアとして活用し、Redisをオンラインフィーチャーストアとして機械学習に組み込む方法を学べます。内容は公式のFeastクイックスタートチュートリアルがベースですが、デフォルトのオンラインストアの代わりにRedisを使用し、大規模なリアルタイム予測を実現する点が異なります。FeastやRedisに馴染みのない方にとって、このチュートリアルは最短の学習手段となるでしょう。概要レベルの紹介については、「Feature Stores and Feast using Redis」のブログ記事も参照してください。より詳細な情報や追加リソースは、このチュートリアルの末尾にまとめています。

このチュートリアルでは、以下のことを行います。

  1. ParquetファイルのオフラインストアとRedisオンラインストアを備えたローカルのフィーチャーストアをデプロイする。
  2. Parquetファイル内のデモ時系列データからトレーニングデータセットを構築する。
  3. オフラインストアからRedisオンラインストアへ特徴量をマテリアライズ(ロード)する。
  4. 推論のために、Redisオンラインストアから最新の特徴量を読み取る。

チュートリアルはGoogle Colabまたはローカル環境で、以下の手順に沿って実行できます。

Feastの概要

Feast(Feature store)はオープンソースのフィーチャーストアであり、Linux Foundation AI & Data Foundationのプロジェクトの一つです。低レイテンシのオンラインストア(リアルタイム提供用)またはオフラインストア(モデル学習・バッチ処理用)からモデルへ特徴量データを供給できます。また、中央管理型のレジストリを備えており、機械学習エンジニアデータサイエンティストがMLユースケースに関連する特徴量を容易に発見できるようになっています。以下はFeastのハイレベルなアーキテクチャ図です。

FeastはPythonライブラリ+オプションのCLIとして提供されており、pipコマンドでインストールできます(後述の手順で説明します)。

FeastとRedisの組み合わせが解決する課題

FeastとRedisを組み合わせることで、MLワークフローにおける以下の一般的な問題を解決できます。

  1. トレーニング・サービングの乖離と複雑なデータ結合:特徴量は複数のテーブルに分散していることが多く、これらを結合する作業は複雑で遅く、ミスが発生しやすい傾向があります。
    • Feastは実績のある結合ロジックによりポイント・イン・タイム(時点)の正確性を保証し、未来の特徴量がモデルにリークすることを防ぎます。
  2. 低レイテンシかつスケーラブルなオンライン特徴量の提供:推論時には、すぐに利用できない特徴量へのアクセスが必要になることが多く、他のデータソースからリアルタイムに事前計算する必要があります。
    • FeastをRedisとともにデプロイすれば、必要な特徴量が常に最新の状態で利用可能となり、低レイテンシかつ高スループットでの推論が実現します。
  3. 特徴量の再利用性とモデルのバージョン管理:組織内の異なるチーム間で特徴量を再利用できず、重複した特徴量作成ロジックが生まれがちです。また、A/Bテストなどを行う際には、モデルが依存するデータのバージョン管理が必要です。
    • Feastは過去に使用された特徴量の発見と共同利用を可能にし、フィーチャーサービスを通じた特徴量セットのバージョン管理をサポートします。
    • また、特徴量変換機能により、オンライン/オフライン両方のユースケースやモデル間で変換ロジックを再利用できます。

チュートリアルの全体像

本チュートリアルでは、フィーチャーストアを使ってトレーニングデータを生成し、ライドシェアアプリのドライバー満足度予測モデルのオンライン推論を支える流れを体験します。デモデータのシナリオは以下の通りです。

  • 一部のドライバーに対してアンケートを実施し、ライドシェアアプリの利用体験への満足度を調査しました。
  • 残りのドライバーについても満足度を予測し、不満を抱えている可能性のあるユーザーに働きかけられるようにしたいと考えています。

チュートリアルの手順

  1. Redisをインストールし、バックグラウンドでRedisサーバーを起動する
  2. Redis対応版のFeastをインストールする
  3. フィーチャーリポジトリを作成し、Redisをオンラインストアとして定義する
  4. 特徴量定義を登録し、フィーチャーストアをデプロイする
  5. トレーニングデータを生成する
  6. Redisオンラインストアに特徴量をロードする
  7. 推論用の特徴量ベクトルを取得する

ステップ1:Redisのインストールとバックグラウンド起動

Redisのインストールは、以下のいずれかの方法で行えます。

Ubuntuの場合:

$ sudo snap install redis

Dockerの場合:

$ docker run --name redis --rm -p 6379:6379 -d redis

Mac(Homebrew)の場合:

$ brew install redis

その他のインストール方法についてはRedis公式ドキュメントを、詳細な設定についてはRedisクイックスタートガイドを参照してください。

ステップ2:Redis対応版Feastのインストール

pipを使ってFeast SDKとCLIをインストールします。

$ pip install 'feast[redis]'

ステップ3:フィーチャーリポジトリの作成とRedisの設定

フィーチャーリポジトリとは、フィーチャーストアの設定と個々の特徴量定義を格納するディレクトリのことです。

ステップ3a:フィーチャーリポジトリを作成する

新しいフィーチャーリポジトリを作成する最も簡単な方法は、feast initコマンドを使うことです。このコマンドは初期デモデータを含む雛形を生成してくれます。

$ feast init feature_repo
$ cd feature_repo

出力例:

Creating a new Feast repository in /Users/nl/dev_fs/feast/feature_repo

生成されたデモリポジトリの構成は以下の通りです。

  • feature_store.yaml:データソースとオンラインストアを設定するデモ構成ファイル
  • example.py:デモの特徴量定義ファイル
  • data/:生のデモParquetデータ

ステップ3b:YAML設定ファイルでRedisをオンラインストアとして設定する

Redisをオンラインストアとして設定するには、feature_store.yaml内のonline_storeセクションにtypeconnection_stringの値を以下のように指定します。

project: my_project
registry: data/registry.db
provider: local
online_store:
  type: redis
  connection_string: localhost:6379

providerは元データの場所(トレーニングデータ生成や提供用の特徴量の取得元)を定義します。このデモではローカル環境を指します。online_storeは、提供用の特徴量値をマテリアライズ(ロード)するオンラインストアデータベースの場所を定義します。

なお、上記の設定は、チュートリアルのデフォルトYAMLファイル(デフォルトのオンラインストアを使用するもの)とは異なる点に注意してください。

project: my_project
registry: data/registry.db
provider: local
online_store:
    path: data/online_store.db

つまり、上記のようにYAMLファイルにonline_store用の2行(type: redisconnection_string: localhost:6379)を追加するだけで、FeastはRedisを読み書き可能なオンラインストアとして扱えるようになります。RedisオンラインストアはFeastのコアコードの一部として実装されているため、追加設定なしですぐに使い始められます。

ステップ3c:example.pyのデモ特徴量定義を確認する

example.pyにあるデモの特徴量定義を見てみましょう(ターミナルで確認するにはcat example.pyを実行します)。

ステップ3d:生データを確認する

最後に、生データを確認します。このデモの生データはローカルのParquetファイルに保存されており、ライドシェアアプリにおけるドライバーの1時間ごとの統計情報を記録したデータセットです。

ステップ4:特徴量定義の登録とフィーチャーストアのデプロイ

次に、feast applyを実行して、example.pyで定義されたフィーチャービューとエンティティを登録します。applyコマンドはカレントディレクトリ内のPythonファイルをスキャンしてフィーチャービュー/エンティティの定義を検出し、オブジェクトを登録してインフラをデプロイします。この例ではexample.pyを読み込み、Redisオンラインストアをセットアップします。

$ feast apply

出力例:

Registered entity driver_id
Registered feature view driver_hourly_stats
Deploying infrastructure for driver_hourly_stats

ステップ5:トレーニングデータの生成

モデルを学習させるには、特徴量とラベルが必要です。ラベルデータは多くの場合、別途保存されています(例:ユーザーアンケート結果のテーブルと、特徴量値を持つ一連のテーブルが分かれているケース)。

ユーザーはタイムスタンプ付きのラベルテーブルを照会し、それをエンティティデータフレームとしてFeastに渡すことで、トレーニングデータを生成できます。多くの場合、Feastは関連するテーブルを自動的に結合し、必要な特徴量ベクトルを作成してくれます。

  • 同じドライバーの様々な時点の特徴量をモデルに使いたいため、タイムスタンプを含めている点に注目してください。

Python(以下のコードをgen_train_data.pyというファイルにコピーして実行してください):

出力例:

----- Feature schema -----

<class 'pandas.core.frame.DataFrame'>
Int64Index: 3 entries, 0 to 2
Data columns (total 6 columns):
#   Column                             Non-Null Count  Dtype           
---  ------                          --------------  -----           
0   event_timestamp                  3 non-null      datetime64[ns, UTC]
1   driver_id                        3 non-null      int64           
2   label_driver_reported_satisfaction  3 non-null      int64           
3   conv_rate                        3 non-null      float32         
4   acc_rate                          3 non-null      float32         
5   avg_daily_trips                  3 non-null      int32           
dtypes: datetime64[ns, UTC](1), float32(2), int32(1), int64(2)
memory usage: 132.0 bytes
None

----- Example features -----

              event_timestamp  driver_id  ...  acc_rate  avg_daily_trips
0 2021-08-23 15:12:55.489091+00:00      1003  ...  0.120588              938
1 2021-08-23 15:49:55.489089+00:00      1002  ...  0.504881              635
2 2021-08-23 16:14:55.489075+00:00      1001  ...  0.138416              606

[3 rows x 6 columns]

ステップ6:Redisオンラインストアへの特徴量のロード

次に、特徴量データをRedisオンラインストアにマテリアライズ(ロード)し、モデルがオンライン予測のために最新の特徴量を取得できるようにします。materializeコマンドを使うと、特定の過去の時間範囲にわたって特徴量をオンラインストアへロードできます。このコマンドは、指定された時間範囲内のすべてのフィーチャービューについてバッチソースを照会し、最新の特徴量値を設定済みのオンラインストアにロードします。また、materialize-incrementalコマンドを使うと、前回のマテリアライズ以降にオフラインストアへ到着した新規データのみを取り込めます。

$ CURRENT_TIME=$(date -u +"%Y-%m-%dT%H:%M:%S")
$ feast materialize-incremental $CURRENT_TIME

出力例:

Materializing 1 feature views to 2021-08-23 16:25:46+00:00 into the redis online store.

driver_hourly_stats from 2021-08-22 16:25:47+00:00 to 2021-08-23 16:25:46+00:00:
100%|████████████████████████████████████████████| 5/5 [00:00<00:00, 592.05it/s]

ステップ7:推論用の特徴量ベクトルの取得

推論時には、get_online_features()を使って、各ドライバーの最新の特徴量値(通常はバッチソースにしか存在しないもの)をRedisオンラインフィーチャーストアから高速に読み取ります。取得した特徴量ベクトルは、そのままモデルに入力できます。

Python(以下のコードをget_feature_vectors.pyというファイルにコピーして実行してください):

出力例:

{
'acc_rate': [0.5732735991477966, 0.7828438878059387],
'avg_daily_trips': [33, 984],
'conv_rate': [0.15498852729797363, 0.6263588070869446],
'driver_id': [1004, 1005]
}

おめでとうございます!これでチュートリアルは完了です。バックグラウンドで動作しているRedisサーバーをシャットダウンするには、redis-cli shutdownコマンドを使用します。

チュートリアルのまとめ

本チュートリアルでは、ParquetファイルのオフラインストアとRedisオンラインストアを備えたローカルのフィーチャーストアをデプロイしました。その後、Parquetファイルの時系列データからトレーニングデータセットを構築し、オフラインストアからRedisオンラインストアへ特徴量をマテリアライズしました。最後に、推論のためにRedisオンラインストアから最新の特徴量を読み取りました。Redisをオンラインストアとして使えば、リアルタイムMLユースケースにおいて、低レイテンシかつ高スループットでスケーラブルに最新の特徴量を高速に読み取ることができます。

次のステップ

  • Feast ConceptsページでFeastのデータモデルを理解し、Feast Architectureページも併せて読んでみましょう。
  • Feast with Redisの完全な設定ガイドと、Redisに特徴量値を保存するためのデータモデルについて学びましょう。
  • 導入事例から学ぶ:Wix、Swiggy、Comcast、Zomato、AT&T、DoorDash、iFoodなどの企業がRedisをオンラインストアとしたフィーチャーストアをどのように活用しているか、さらにGojek、Udaan、RobinhoodがFeastとRedisの組み合わせをどのように使っているかを確認しましょう。
  • Azure Managed Feature Store with Feast and Redisに関する記事を読み、「Getting started with Feast on Azure」チュートリアルやその他のFeastチュートリアルにも挑戦してみましょう。
  • FeastおよびRedisそれぞれの製品紹介ページでも、さらなる情報を入手できます。

Slackで他のFeastユーザーやコントリビューターに参加し、コミュニティの一員になりましょう!

  1. Android MessagesをPCで使おう!Web版の初期設定と知って得する便利機能5選

    Googleは巨大なプラットフォームであり、世界有数の検索エンジンであることは言うまでもありません。しかし、その実力は検索だけにとどまりません。日常生活をより快適にしてくれる多彩なサービスを数多く提供しています。そんなGoogleが、Android Messagesアプリのアップデートをリリースしました。これにより、任意のWebブラウザからSMSメッセージを送受信できるようになり、AndroidユーザーはPCやMacから手軽にメッセージのやり取りが可能になりました。 利用に必要なのは、最新版にアップデートしたAndroid Messagesアプリだけ。以下では、Web版Android Mess

  2. Xen 仮想化の開始

    Zで綴られるZenは、8時間保持した後、雪の中でおしっこをしているときに頭頂部にある典型的な感覚です. Xen は X で綴られており、KVM と同様に、企業市場を対象としていますが、家庭でもビジネスでもセットアップを検討できるオープンソースの仮想化テクノロジです。 KVM に関するいくつかのチュートリアルがあり、導入記事、ストレージとネットワーク (ブリッジ ネットワークを含む) のセットアップと構成の方法、および VirtualBox との競合の解決方法をカバーしています。ここで、Xen についてもう少し学びましょう。同様に、仮想マシンをインストールして実行するために必要な最初の手順、