0
0

リアルタイム特徴量サービングにおけるオンラインテーブルの活用

Posted at

Use online tables for real-time feature serving | Databricks on AWS [2023/12/8時点]の翻訳です。

本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。

プレビュー
オンラインテーブルは機能制限のあるパブリックプレビューです。限定プレビューの間は、オンラインテーブルはSQLサーバレスDBUを消費します。オンラインテーブルの最終的な価格は今後明らかになります。プレビューに参加するにはこちらからサインアップしてください。

オンラインテーブルのプレビューは以下のリージョンで利用できます: us-east-1, us-west-2, eu-west-1, ap-southeast-2

オンラインテーブルとは、オンラインアクセスに最適化された行指向フォーマットで格納されるDeltaテーブルの読み取り専用のコピーです。オンラインテーブルは、リクエストの負荷に応じてスループットの能力をオートスケールする完全にサーバレスなテーブルであり、いかなる規模のデータに対して低いレーテンシーと高いスループットを提供します。オンラインテーブルは、高速なデータ検索のために、Databricks Model Serving、Feature & Function Serving、retrieval-augmented generation (RAG)アプリケーションと動作するように設計されています。

オンラインテーブルの作成は1ステップのプロセスです。カタログエクスプローラでDeltaテーブルを選択し、Create online tableを選択するだけです。

要件

  • ワークスペースでUnity Catalogが有効化されていること。Unity Catalogメタストアの作成、ワークスペースでの有効化、カタログの作成方法についてはドキュメントをご覧ください。
  • Databricks管理者は、アカウントコンソールでサーバレスの利用状況に同意する必要があります。

オンラインテーブルの操作

このセクションではオンラインテーブルの作成、削除の方法、ステータスのチェック方法、オンラインテーブルのアップデートの起動方法を説明します。

作成

カタログエクスプローラからオンラインテーブルを作成します。必要な権限については、ユーザーのアクセス権をご覧ください。

  1. カタログエクスプローラで、オンラインテーブルに同期したいソーステーブルに移動します。ケバブメニューからCreate online tableを選択します。

  2. オンラインテーブルを設定するためにダイアログのセレクターを使用します。

    Name: Unity Catalogのオンラインテーブルの名称。
    Primary Key: オンラインテーブルの主キーとして使用するソーステーブルのカラム。
    Timeseries Key: (オプション)時系列のキーとして使用するソーステーブルのカラム。指定された場合、オンラインテーブルにはそれぞれの主キーごとに最新の時系列キーの値を持つ行のみが含まれます。
    Sync mode: 同期パイプラインがオンラインテーブルをどのようにアップデートするのかを指定します。SnapshotTriggeredContinuousのいずれかを選択します。

    ポリシー 説明
    Snapshot ソーステーブルのスナップショットを取得し、オンラインテーブルにコピーするためにパイプラインは一度実行されます。新たにソーステーブルのスナップショットを取得し、新規コピーを作成することで、ソーステーブルに対する以降の変更はオンラインテーブルに反映されます。オンラインテーブルのコンテンツは原子的に更新されます。
    Triggered オンラインテーブルでソーステーブルの初期コピーを作成するためにパイプラインが一度実行されます。スナップショットの同期モードとは異なり、オンラインテーブルがリフレッシュされた際、前回のパイプライン実行以来の変更のみが取得され、オンラインテーブルに適用されます。インクリメンタルなリフレッシュは手動、あるいはスケジュールに基づいて自動でトリガーすることができます。
    Continuous パイプラインは継続的に稼働します。ソーステーブルに対する以降の変更はリアルタイムのストリーミングモードでオンラインテーブルに適用されます。手動のリフレッシュは不要です。

    注意
    TriggeredContinuous同期モードをサポートするには、ソーステーブルではChange data feedが有効化されている必要があります。

  3. 設定が完了したら、Confirmをクリックします。オンラインテーブルのページが表示されます。

  4. ダイアログで指定したカタログ、スキーマに指定された名前で、新たなオンラインテーブルが作成されます。カタログエクスプローラでは、オンラインテーブルはとして表示されます。

ステータスのチェックとアップデートのトリガー

オンラインテーブルのステータスをチェックするには、カタログでテーブル名をクリックします。オンラインテーブルのページがOverviewタブにオープンされます。Data Ingestセクションには最新のアップデートのステータスが表示されます。アップデートをトリガーするには、Sync nowをクリックします。また、Data Ingestセクションにはテーブルのアップデートを行うDelta Live Tablesパイプラインへのリンクが含まれています。

削除

オンラインテーブルページで、ケバブメニューからDeleteを選択します。

特徴量サービングエンドポイントを用いたオンラインテーブルのサービング

Databricks外でホスティングされているモデルやアプリケーションに対して、オンラインテーブルから特徴量をサービングするための特徴量サービングエンドポイントを作成することができます。エンドポイントによって、REST APIを用いた低レーテンシーの特徴量利用が可能となります。

  1. feature specの作成。
    feature specを作成する際、使用するソーステーブルの名前を指定します。すると、feature specはソーステーブル名を用いてUnity Catalogに新規feature spec関数を作成します。これによって、オンラインとオフラインシナリオの両方でfeature specを活用することができます。オンラインの検索では、feature specを用いるサービングエンドポイントは低レーテンシーの特徴量検索を実行するために、オンラインバージョンのテーブルを自動で活用します。

    カタログエクスプローラのFuntionタブでfeature specを参照することができます。

    Python
    fe = FeatureEngineeringClient()
    fe.create_feature_spec(
      name="catalog.default.user_preferences_spec",
      features=[
        FeatureLookup(
          table_name="user_preferences",
          lookup_key="user_id"
        )
      ]
    )
    
  2. 特徴量サービングエンドポイントの作成。
    このステップでは、Deltaテーブルuser_preferencesからのデータを同期するオンラインテーブルuser_preferences_online_tableを作成しているものとします。特徴量サービングエンドポイントを作成するにはfeature specを使用します。このエンドポイントによって、関連づけられたオンラインテーブルを用いてREST API経由でデータを利用できるようになります。

    注意
    このオペレーションを行うユーザーはオフラインテーブルとオンラインテーブル両方のオーナーである必要があります。

    Python
    fe.create_feature_serving_endpoint(
    name = "user-preferences",
    config=EndpointCoreConfig(
      served_entities=ServedEntity(
        feature_spec_name="catalog.default.user_preferences_spec",
        workload_size="Small",
        scale_to_zero_enabled=True)
      )
    )
    
  3. 特徴量サービングエンドピントからのデータの取得。
    APIエンドポイントにアクセスするには、最初にOAuth認証を用いたリクエスtの認証を行い、HTTP GETリクエストを行います。

    Python
    url = "https://{workspace_url}/serving-endpoints/user-preferences/invocations"
    databricks_token = xxxxxxx
    
    headers = {'Authorization': f'Bearer {databricks_token}', 'Content-Type': 'application/json'}
    
    data = {
      "dataframe_records": [{"user_id": user_id}]
    }
    data_json = json.dumps(data, allow_nan=True)
    
    response = requests.request(method='POST', headers=headers, url=url, data=data_json)
    if response.status_code != 200:
      raise Exception(f'Request failed with status {response.status_code}, {response.text}')
    
    print(response.json()['outputs'][0]['hotel_preference'])
    

RAGアプリケーションによるオンラインテーブルの活用

RAGアプリケーションはオンラインテーブルの一般的なユースケースとなります。RAGアプリケーションが必要とする構造化データのオンラインテーブルを作成し、特徴量サービングエンドポイントにホスティングします。RAGアプリケーションはオンラインテーブルから適切なデータを検索するために、特徴量サービングエンドポイントを使用します。

典型的なステップは以下のようになります:

  1. 特徴量サービングエンドポイントの作成。
  2. 適切なデータを検索するためにエンドポイントを使用するLangChainToolの作成。
  3. 適切なデータを取得するためのLangChainエージェントで上記ツールを使用。
  4. LangChainアプリケーションをホストするためのモデルサービングエンドポイントを作成。

ステップバイステップの手順については以下のサンプルノートブックをご覧ください。

サンプルノートブック: オンラインテーブル

以下のノートブックでは、retrieval augmented generation (RAG)アプリケーションでのDatabricksオンラインテーブルや特徴量サービングエンドポイントの使い方を説明しています。

RAGアプリケーションを用いたオンラインテーブルのデモノートブック

Databricksモデルサービングによるオンラインテーブルの活用

Databricks Model Servingの特徴量検索でオンラインテーブルを活用することができます。オンラインテーブルに特徴量テーブルを同期すると、当該特徴量テーブルの特徴量を用いてトレーニングされたモデルは、推論の際に自動でオンラインテーブルから特徴量の値を検索します。追加の設定は不要です。

  1. モデルのトレーニングでFeatureLookupを使う。
    モデルのトレーニングでは、以下の例のようにモデルのトレーニングセットでオフラインの特徴量テーブルの特徴量を使います:

    Python
    training_set = fe.create_training_set(
      df=id_rt_feature_labels,
      label='quality',
      feature_lookups=[
          FeatureLookup(
              table_name="user_preferences",
              lookup_key="user_id"
          )
      ],
      exclude_columns=['user_id'],
    )
    
  2. Databricks Model Servingでモデルをサービングする。モデルは自動でオンラインテーブルから特徴量を検索します。詳細はAutomatic feature lookup with MLflow models on Databricksをご覧ください。

ユーザーのアクセス権

オンラインテーブルを作成するには以下の権限が必要です:

  • ソーステーブルに対するSELECT権限。
  • 目的のカタログに対するUSE_CATALOG権限。
  • 目的のスキーマに対するUSE_SCHEMACREATE_TABLE権限。

オンラインテーブルに対するデータ同期パイプラインを管理するには、オンラインテーブルのオーナーであるか、オンラインテーブルに対するREFLESH権限が必要です。カタログに対するUSE_CATALOGUSE_SCHEMA権限を持たないユーザーはカタログエクスプローラでオンラインテーブルを参照することはできません。

Unity CatalogメタストアはPrivilege Model Version 1.0である必要があります。

エンドポイントの権限モデル

データをクエリーし、関数を実行するために必要な限定的な権限を持つ特徴量サービングやモデルサービングのエンドポイント向けには自動でユニークなサービスプリンシパルが作成されます。このサービスプリンシパルによって、リソースを作成したユーザーとは独立したデータと関数のリソースにエンドポイントがアクセスでき、作成者がワークスペースを去った後でもエンドポイントが動作し続けることを保証します。

このシステムサービスプリンシパルのライフタイムは、エンドポイントのライフタイムと同一です。監査ログには、Unity Catalogのカタログのオーナーがこのシステムサービスプリンシパルに必要な権限を付与したことを示すシステム生成レコードが表示されることがあります。

プロダクション環境の管理の一般的な情報については、Recommendations for production serving endpointsをご覧ください。

制限

  • ソーステーブルごとに1つのオンラインテーブルのみがサポートされます。
  • ARRAY、MAP、STRUCTのデータタイプのカラムをオンラインテーブルの主キーとして使用することはできません。
  • オンラインテーブルの主キーとしてあるカラムが使用されている場合、ソーステーブルのそのカラムでnull値を含むすべての行は無視されます。
  • ソーステーブルとして、外部テーブル、システムテーブル、内部テーブルはサポートされません。
  • Deltaのチェンジデータフィードが有効化されていないソーステーブルでは、Snapshot同期モードしかサポートされません。
  • ソーステーブルとオンラインテーブルのカタログ、スキーマ、テーブル名には英数字とアンダースコアのみが許可されており、数字でスタートしてはいけません。
  • Stringタイプのカラムは64KB長に制限されます。
  • 行の最大サイズは2MBです。
  • ゲーテッドパブリックプレビューにおけるオンラインテーブルの最大サイズは200GBの非圧縮ユーザーデータとなります。
  • ゲーテッドパブリックプレビューにおけるUnity Catalogメタストアにおけるすべてのオンラインテーブルの合計サイズは1TBとなります。

トラブルシューティング

カタログエクスプローラで「Create online table」が表示されない

通常この原因は、同期しようとしているテーブルがサポートされていないタイプによるものです。(カタログエクスプローラのDetailsタブに表示される)テーブルのセキュリティ保護種別が以下のいずれかであることを確認してください:

  • TABLE_EXTERNAL
  • TABLE_DELTA
  • TABLE_DELTA_EXTERNAL
  • TABLE_DELTASHARING
  • TABLE_DELTASHARING_MUTABLE
  • TABLE_STREAMING_LIVE_TABLE
  • TABLE_STANDARD
  • TABLE_FEATURE_STORE
  • TABLE_FEATURE_STORE_EXTERNAL
  • TABLE_VIEW
  • TABLE_VIEW_DELTASHARING
  • TABLE_MATERIALIZED_VIEW

オンラインテーブル作成時に「Triggered」や「Continuous」同期モードを選択できない

ソーステーブルでDeltaチェンジデータフィードが有効化されていない場合、あるいはビューやマテリアライズドビューの場合に発生します。Incremental同期モードを使うには、ソーステーブルでチェンジデータフィードを有効化するか、ビューではないテーブルを使います。

Databricksクイックスタートガイド

Databricksクイックスタートガイド

Databricks無料トライアル

Databricks無料トライアル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0