このドキュメントでは、Vertex AI SDK for ABAP を使用して、オンライン ストアの同期、オンライン ストアからの特徴のサービング、エンティティまたはエンベディングを使用したオンライン特徴ストアの検索などのタスクを実行するために Vertex AI Feature Store を使用する方法について説明します。
Vertex AI Feature Store は、クラウドネイティブのマネージド特徴ストアサービスです。このサービスでは、特徴データを BigQuery のテーブルまたはビューで管理することで、ML 特徴管理とオンライン サービング プロセスを効率化します。
一般的な Vertex AI Feature Store 設定ワークフローでは、まず BigQuery で SAP データソースを準備し、特徴グループと特徴を作成してデータソースを登録し、オンライン ストアと特徴ビューのリソースを設定します。その後、特徴ビューから最新の特徴値をオンラインでサービングすることや、オンライン特徴ストアで類似性検索を実行することができます。Vertex AI Feature Store の設定方法については、Vertex AI Feature Store をご覧ください。
Vertex AI Feature Store がオンライン サービングできる状態になったら、Vertex AI SDK for ABAP を使用して次のことができます。
- モデル予測中のリアルタイム サービングのために最新かつ正確な特徴値を提供するには、オンライン ストアを BigQuery の特徴データソースと同期します。
- リアルタイム アプリケーションにオンライン ストアから特徴値を提供するには、オンライン ストアから特徴をサービングします。
- オンライン ストアから一連の意味的に類似したエンティティまたは意味的に関連するエンティティを取得するには、エンティティまたはエンベディングを使用して検索します。
始める前に
Vertex AI Feature Store で Vertex AI SDK for ABAP を使用する前に、自身または管理者が次の前提条件を満たしていることを確認してください。
- Google Cloud プロジェクトで Vertex AI API が有効になっている。
- SAP 環境に Vertex AI SDK for ABAP がインストールされている。
- Vertex AI API にアクセスするための認証が設定されている。
- オンライン特徴サービングが設定されている。オンライン ストアを作成し、このオンライン ストアを使用して、エンドツーエンドのワークフローで Vertex AI Feature Store を使用して BigQuery でデータをホストしてサービングする方法については、Vertex AI Feature Store の Jupyter Notebook チュートリアルをご覧ください。
Vertex AI Feature Store の ABAP クラスをインスタンス化する
ABAP アプリケーションで Vertex AI Feature Store を使用するには、クラス /GOOG/CL_FEATURE_STORE
をインスタンス化します。
DATA(lo_client) = NEW /goog/cl_feature_store(
iv_key_name = 'CLIENT_KEY'
iv_location = 'LOCATION_ID'
iv_feature_store_id = 'FEATURE_ONLINE_STORE_NAME' ).
次のように置き換えます。
CLIENT_KEY
: 認証用に構成されたクライアント キー。LOCATION_ID
: オンライン ストアがあるリージョン(us-central1
など)。FEATURE_ONLINE_STORE_NAME
: 特徴ビューを含むオンライン ストアの名前。
オンライン ショップを同期する
モデル予測中に、リアルタイム サービングのためにオンライン ストアに最新かつ正確な特徴値が確実に存在するようにするには、オンライン ストアの特徴ビューリソースを BigQuery の特徴データソースと同期する必要があります。
始める前に
Vertex AI Feature Store にはリージョン エンドポイントを介してアクセスするため、通信システムと通信構成を作成し、それに応じてクライアント キーを構成する必要があります。
ABAP SDK for Google Cloud がインストールされている BTP ABAP システムの SAP Fiori ランチャーにアクセスします。
[All spaces] > [Administration] > [Communication Management] に移動します。
通信システムを作成します。
- Communication Systems アプリを開きます。
- [New] をクリックします。
表示された [New Communication System] ダイアログで、次のフィールドに値を入力します。
- System ID: システム ID を入力します。
- System name: システム名を入力します。
[作成] をクリックします。
[Host name] フィールドに、リージョン エンドポイントの URL を入力します。たとえば、Vertex AI Feature Store が
us-east1
に配置されている場合、ターゲット ホストのエンドポイントはus-east1-aiplatform.googleapis.com
です。リージョン エンドポイントの詳細については、サービス エンドポイントをご覧ください。[ポート] フィールドに、「
443
」と入力します。[Users for Outbound Communication] タブで [Add] をクリックします。
[Authentication method] フィールドで [None] を選択します。
[保存] をクリックします。
通信設定を作成します。
- Communication Arrangement アプリを開きます。
- [New] をクリックします。
表示された [New Communication Arrangement] ダイアログで、次のフィールドに値を入力します。
- シナリオ: [Authentication using Workload Identity Federation](
/GOOG/COM_SDK_SRV
)を選択します。 - Arrangement name: 通信設定の名前を入力します。
- シナリオ: [Authentication using Workload Identity Federation](
[作成] をクリックします。
表示された通信設定エントリの [Communication System] フィールドで、前の手順で作成した通信システムを選択します。
[保存] をクリックします。
クライアント鍵と通信マップを作成します。
- SDK 構成用の SAP Fiori アプリを含むスペースに移動します。
- Google SDK: Main Configuration アプリを開きます。
- [Create] をクリックします。
- 表示された [Create] ダイアログで、クライアント鍵の名前を入力します。
- [続行] をクリックします。
次のフィールドに値を入力します。
- Service account: API へのアクセス権が付与されているサービス アカウントを入力します。 Google Cloud
- Project ID: API を有効にした Google Cloud プロジェクトのプロジェクト ID を入力します。 Google Cloud プロジェクト ID については、プロジェクトの識別をご覧ください。
- Project number: API を有効にした Google Cloud プロジェクトのプロジェクト番号を入力します。 Google Cloud プロジェクト番号については、プロジェクトの識別をご覧ください。
- Authentication type: [W (Workload Identity Federation)] を選択します。
サービス名が「authentication」のデフォルト エントリの通信マップには、WIF ベースの認証用に設定した通信設定を指定します。
通信マップにエントリを 1 つ追加し、サービスとして
aiplatform:v1
を選択し、作成した通信設定を指定します。[作成] をクリックします。標準の利用規約に基づいて ABAP SDK for Google Cloud の使用に同意することを確認するダイアログが表示されます。 Google Cloud
認証構成を検証するには、[Check connection] をクリックします。エントリの緑色のチェックは、構成が成功したことを示します。
エラーが発生した場合は、トラブルシューティング ガイドで一般的なエラーの解決方法を確認してください。
Vertex AI Feature Store を同期する
特徴ビューでデータ同期を開始するには、SYNC_FEATURE_DATA_TO_FS
メソッドを使用します。
DATA(lv_feature_view_sync_id) = lo_client->sync_feature_data_to_fs(
iv_feature_view_id = 'FEATURE_VIEW_NAME'
)->get_feature_sync_id( ).
FEATURE_VIEW_NAME
は、データ同期を開始する特徴ビューの名前に置き換えます。
このメソッドは、特徴ビューの同期 ID を返します。この ID を使用して、同期のステータスを確認できます。
Vertex AI Feature Store の同期ステータスを取得する
Vertex AI Feature Store の同期ステータスを取得するには、GET_FEATURE_SYNC_STATUS
メソッドを使用します。
DATA(ls_status) = lo_client->get_feature_sync_status(
iv_feature_view_id = 'FEATURE_VIEW_NAME'
iv_feature_sync_id = 'FEATURE_VIEW_SYNC_ID'
)->get_feature_sync_status( ).
次のように置き換えます。
FEATURE_VIEW_NAME
: 同期のステータスを確認する特徴ビューの名前。FEATURE_VIEW_SYNC_ID
: Vertex AI Feature Store 同期から受信した特徴ビュー同期 ID。このメソッドは、
C: Complete
、R: Running
、F: Failed
のいずれかのステータスと、エラー メッセージ(存在する場合)を返します。
オンライン ストアから特徴をサービングする
商品のレコメンデーションなどのリアルタイム アプリケーションでは、オンライン ストアから特徴値をサービングできます。オンライン ストアに対して構成したオンライン サービングのタイプに応じて、次のいずれかの方法で特徴値をサービングできます。
- Bigtable オンライン サービングを使用して特徴値を取得する。
- パブリック エンドポイントで最適化されたオンライン サービングを使用して特徴値を取得する。
- Private Service Connect エンドポイントで最適化されたオンライン サービングを使用して特徴値を取得する。
特徴値のサービングの詳細については、オンライン ストアから特徴をサービングするをご覧ください。
始める前に
オンライン ストアから特徴値の提供を開始する前に、オンライン ストアの詳細からパブリック エンドポイントのドメイン名を取得する必要があります。次に、通信システムと通信設定を作成し、Google SDK: Main Configuration SAP Fiori アプリを使用してクライアント キー構成で構成する必要があります。
公開エンドポイントを取得するには、任意のローカル パッケージに
ZCL_GET_FEATURE_STORE_PUB_EP
を作成します。有効なクライアント キー、Vertex AI Feature Store のストア ID とロケーションを渡す必要があります。CLASS zcl_get_feature_store_pub_ep DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_oo_adt_classrun. ENDCLASS. CLASS zcl_get_feature_store_pub_ep IMPLEMENTATION. METHOD if_oo_adt_classrun~main. DATA lv_ckey TYPE /goog/keyname. DATA lv_location_id TYPE string. DATA lv_fsid TYPE string. DATA lv_project_id TYPE string. DATA lv_msg TYPE string. "TODO:Developer - Pass relevant values lv_ckey = 'CLIENT_KEY'. lv_fsid = 'FEATURE_ONLINE_STORE_NAME'. lv_location_id = 'LOCATION_ID'. TRY. DATA(lo_aip) = NEW /goog/cl_aiplatform_v1( iv_key_name = lv_ckey ). lv_project_id = lo_aip->gv_project_id. " Call API method: aiplatform.projects.locations.featureOnlineStores.get lo_aip->get_feature_online_stores( EXPORTING iv_p_projects_id = lv_project_id iv_p_locations_id = lv_location_id iv_p_feature_online_stores_id = lv_fsid IMPORTING es_output = DATA(ls_output) ev_ret_code = DATA(lv_ret_code) ev_err_text = DATA(lv_err_text) ). IF lo_aip->is_success( lv_ret_code ) = abap_true. out->write( | Public endpoint is| ). out->write( ls_output-dedicated_serving_endpoint-public_endpoint_domain_name ). ENDIF. CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk). lv_msg = lo_cx_sdk->get_text( ). out->write( |Exception occurred, reason: { lv_msg }| ). ENDTRY. ENDMETHOD. ENDCLASS.
ZCL_GET_FEATURE_STORE_PUB_EP
クラスを有効にして実行します。出力(オンライン ストアの公開エンドポイント)の形式は次のとおりです。
xxxxxxxxxx.LOCATION_ID-PROJECT_ID.featurestore.vertexai.goog
この出力には次の値が含まれます。
LOCATION_ID
: オンライン ストアが配置されているリージョン。PROJECT_ID
: オンライン ショップが配置されている Google Cloud プロジェクトのプロジェクト ID。
ABAP SDK for Google Cloud がインストールされている BTP ABAP システムの SAP Fiori ランチャーにアクセスします。
[All spaces] > [Administration] > [Communication Management] に移動します。
通信システムを作成します。
- Communication Systems アプリを開きます。
- [New] をクリックします。
表示された [New Communication System] ダイアログで、次のフィールドに値を入力します。
- System ID: システム ID を入力します。
- System name: システム名を入力します。
[作成] をクリックします。
[Host name] フィールドに、前の手順で
ZCL_GET_FEATURE_STORE_PUB_EP
クラスを実行して取得した公開エンドポイントを入力します。[ポート] フィールドに、「
443
」と入力します。[Users for Outbound Communication] タブに移動し、[Add] をクリックします。
[認証方法] フィールドで [なし] を選択します。
[保存] をクリックします。
通信設定を作成します。
- Communication Arrangements アプリを開きます。
- [New] をクリックします。
表示された [New Communication Arrangement] ダイアログで、次のフィールドに値を入力します。
- シナリオ: [Authentication using Workload Identity Federation (
/GOOG/COM_SDK_SRV
)] を選択します。 - Arrangement name: 通信設定の名前を入力します。
- シナリオ: [Authentication using Workload Identity Federation (
[作成] をクリックします。
表示された通信設定エントリの [Communication System] フィールドで、前の手順で作成した通信システムを選択します。
[保存] をクリックします。
クライアント鍵と通信マップを作成します。
- SDK 構成用の SAP Fiori アプリを含むスペースに移動します。
- Google SDK: Main Configuration アプリを開きます。
- [Create] をクリックします。
- 表示された [Create] ダイアログで、クライアント鍵の名前を入力します。
- [続行] をクリックします。
次の詳細情報を入力します。
- Service account: API へのアクセス権が付与されているサービス アカウントを入力します。 Google Cloud
- Project ID: API を有効にした Google Cloud プロジェクトのプロジェクト ID を入力します。 Google Cloud プロジェクト ID については、プロジェクトの識別をご覧ください。
- Project number: API を有効にした Google Cloud プロジェクトのプロジェクト番号を入力します。 Google Cloud プロジェクト番号については、プロジェクトの識別をご覧ください。
- Authentication type: [W (Workload Identity Federation)] を選択します。
サービス名が「authentication」のデフォルト エントリの通信マップには、WIF ベースの認証用に設定した通信設定を指定します。
通信マップにエントリを 1 つ追加し、サービスとして
aiplatform:v1
を選択し、作成した通信設定を指定します。[作成] をクリックします。標準の利用規約に基づいて ABAP SDK for Google Cloud の使用に同意することを確認するダイアログが表示されます。 Google Cloud
認証構成を検証するには、[Check connection] をクリックします。エントリの緑色のチェックは、構成が成功したことを示します。
エラーが発生した場合は、トラブルシューティング ガイドで一般的なエラーの解決方法を確認してください。
コミュニケーション マップに次の 3 つのエントリが含まれていることを確認します。
サービス名 通信シナリオ 通信の設定 authentication
/GOOG/SDK_COM_WIF
XSUAA
サービス用に作成した通信設定。aiplatform:v1
/GOOG/COM_SDK_SRV
AI PLATFORM
のリージョン エンドポイントを含む通信システムを使用して設定した通信設定。apiinvoker:v1
/GOOG/COM_SDK_SRV
前の手順で Vertex AI Feature Store サービングのパブリック エンドポイントの通信システムを使用して設定した通信設定。
特徴値を取得する
Vertex AI Feature Store では、エンティティとは、特徴を追跡するアイテム(顧客、プロダクト、その他のデータポイントなど)を指します。各エンティティには、一連の特徴とそれに対応する値が関連付けられています。
1 つのエンティティ ID を指定して特徴値を取得するには、メソッド SERVE_FEATURE_VALUES
を使用します。
DATA(lt_features) = lo_client->serve_feature_values(
iv_feature_view_id = 'FEATURE_VIEW_NAME'
it_entity_id = 'ENTITY_ID'
)->get_features( ).
次のように置き換えます。
FEATURE_VIEW_NAME
: 特徴値のサービング元の特徴ビューの名前。ENTITY_ID
: 最新の特徴値のサービング元の特徴レコードの ID 列の値。あるいは、パーツの配列を指定してエンティティ ID を作成することもできます。ID 列の順序が、特徴ビューで定義されている順序と同じであることを確認します。
近似最近傍を検索する
最適化されたオンライン サービング用に作成されたオンライン ストアでは、ベクトル類似性検索を実行して、一連の意味的に類似したエンティティまたは意味的に関連するエンティティを取得できます。このようなエンティティは近似最近傍とも呼ばれます。エンティティ ID またはエンベディングに基づいて近似最近傍を検索できます。
始める前に
オンライン ストアから特徴値の提供を開始する前に、オンライン ストアの詳細からパブリック エンドポイントのドメイン名を取得する必要があります。次に、通信システムと通信設定を作成し、Google SDK: Main Configuration SAP Fiori アプリを使用してクライアント キー構成で構成する必要があります。
公開エンドポイントを取得するには、任意のローカル パッケージに
ZCL_GET_FEATURE_STORE_PUB_EP
を作成します。有効なクライアント キー、Vertex AI Feature Store のストア ID とロケーションを渡す必要があります。CLASS zcl_get_feature_store_pub_ep DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_oo_adt_classrun. ENDCLASS. CLASS zcl_get_feature_store_pub_ep IMPLEMENTATION. METHOD if_oo_adt_classrun~main. DATA lv_ckey TYPE /goog/keyname. DATA lv_location_id TYPE string. DATA lv_fsid TYPE string. DATA lv_project_id TYPE string. DATA lv_msg TYPE string. "TODO:Developer - Pass relevant values lv_ckey = 'CLIENT_KEY'. lv_fsid = 'FEATURE_ONLINE_STORE_NAME'. lv_location_id = 'LOCATION_ID'. TRY. DATA(lo_aip) = NEW /goog/cl_aiplatform_v1( iv_key_name = lv_ckey ). lv_project_id = lo_aip->gv_project_id. " Call API method: aiplatform.projects.locations.featureOnlineStores.get lo_aip->get_feature_online_stores( EXPORTING iv_p_projects_id = lv_project_id iv_p_locations_id = lv_location_id iv_p_feature_online_stores_id = lv_fsid IMPORTING es_output = DATA(ls_output) ev_ret_code = DATA(lv_ret_code) ev_err_text = DATA(lv_err_text) ). IF lo_aip->is_success( lv_ret_code ) = abap_true. out->write( | Public endpoint is| ). out->write( ls_output-dedicated_serving_endpoint-public_endpoint_domain_name ). ENDIF. CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk). lv_msg = lo_cx_sdk->get_text( ). out->write( |Exception occurred, reason: { lv_msg }| ). ENDTRY. ENDMETHOD. ENDCLASS.
ZCL_GET_FEATURE_STORE_PUB_EP
クラスを有効にして実行します。出力(オンライン ストアの公開エンドポイント)の形式は次のとおりです。
xxxxxxxxxx.LOCATION_ID-PROJECT_ID.featurestore.vertexai.goog
この出力には次の値が含まれます。
LOCATION_ID
: オンライン ストアが配置されているリージョン。PROJECT_ID
: オンライン ショップが配置されている Google Cloud プロジェクトのプロジェクト ID。
ABAP SDK for Google Cloud がインストールされている BTP ABAP システムの SAP Fiori ランチャーにアクセスします。
[All spaces] > [Administration] > [Communication Management] に移動します。
通信システムを作成します。
- Communication Systems アプリを開きます。
- [New] をクリックします。
表示された [New Communication System] ダイアログで、次のフィールドに値を入力します。
- System ID: システム ID を入力します。
- System name: システム名を入力します。
[作成] をクリックします。
[Host name] フィールドに、前の手順で
ZCL_GET_FEATURE_STORE_PUB_EP
クラスを実行して取得した公開エンドポイントを入力します。[ポート] フィールドに、「
443
」と入力します。[Users for Outbound Communication] タブに移動し、[Add] をクリックします。
[認証方法] フィールドで [なし] を選択します。
[保存] をクリックします。
通信設定を作成します。
- Communication Arrangements アプリを開きます。
- [New] をクリックします。
表示された [New Communication Arrangement] ダイアログで、次のフィールドに値を入力します。
- シナリオ: [Authentication using Workload Identity Federation (
/GOOG/COM_SDK_SRV
)] を選択します。 - Arrangement name: 通信設定の名前を入力します。
- シナリオ: [Authentication using Workload Identity Federation (
[作成] をクリックします。
表示された通信設定エントリの [Communication System] フィールドで、前の手順で作成した通信システムを選択します。
[保存] をクリックします。
クライアント鍵と通信マップを作成します。
- SDK 構成用の SAP Fiori アプリを含むスペースに移動します。
- Google SDK: Main Configuration アプリを開きます。
- [Create] をクリックします。
- 表示された [Create] ダイアログで、クライアント鍵の名前を入力します。
- [続行] をクリックします。
次の詳細情報を入力します。
- Service account: API へのアクセス権が付与されているサービス アカウントを入力します。 Google Cloud
- Project ID: API を有効にした Google Cloud プロジェクトのプロジェクト ID を入力します。 Google Cloud プロジェクト ID については、プロジェクトの識別をご覧ください。
- Project number: API を有効にした Google Cloud プロジェクトのプロジェクト番号を入力します。 Google Cloud プロジェクト番号については、プロジェクトの識別をご覧ください。
- Authentication type: [W (Workload Identity Federation)] を選択します。
サービス名が「authentication」のデフォルト エントリの通信マップには、WIF ベースの認証用に設定した通信設定を指定します。
通信マップにエントリを 1 つ追加し、サービスとして
aiplatform:v1
を選択し、作成した通信設定を指定します。[作成] をクリックします。標準の利用規約に基づいて ABAP SDK for Google Cloud の使用に同意することを確認するダイアログが表示されます。 Google Cloud
認証構成を検証するには、[Check connection] をクリックします。エントリの緑色のチェックは、構成が成功したことを示します。
エラーが発生した場合は、トラブルシューティング ガイドで一般的なエラーの解決方法を確認してください。
コミュニケーション マップに次の 3 つのエントリが含まれていることを確認します。
サービス名 通信シナリオ 通信の設定 authentication
/GOOG/SDK_COM_WIF
XSUAA
サービス用に作成した通信設定。aiplatform:v1
/GOOG/COM_SDK_SRV
AI PLATFORM
のリージョン エンドポイントを含む通信システムを使用して設定した通信設定。apiinvoker:v1
/GOOG/COM_SDK_SRV
前の手順で Vertex AI Feature Store サービングのパブリック エンドポイントの通信システムを使用して設定した通信設定。
エンベディングの最近傍の一致を取得する
エンベディングを指定して、意味的に関連するエンティティを検索できます。
エンベディングの最近傍を検索するには、SEARCH_USING_EMBEDDINGS
メソッドを使用してリクエストを送信します。
DATA(lt_embeddings) = VALUE /goog/cl_aiplatform_v1=>ty_t_/goog/num_float( EMBEDDING_DATA ).
DATA(lt_neighbours) = lo_client->search_using_embeddings(
EXPORTING
iv_feature_view_id = 'FEATURE_VIEW_NAME'
it_embeddings = lt_embeddings
is_search_params = VALUE #( neighbor_count = 'NEIGHBOR_COUNT'
return_full_entity = 'RETURN_FULL_ENTITY' )
)->get_neighbours( ).
次のように置き換えます。
EMBEDDING_DATA
: 近似最近傍の一致を検索するエンベディング。エンベディングは、浮動小数点値の配列として表されます。FEATURE_VIEW_NAME
: 近似最近傍の一致を検索する特徴ビューの名前。NEIGHBOR_COUNT
: 取得する近似最近傍の数。RETURN_FULL_ENTITY
: 省略可。レスポンスにエンティティの特徴を含めるかどうかを指定します。レスポンスにエンティティとともに特徴を含めるには、「ABAP_TRUE
」と入力します。デフォルト値はABAP_FALSE
です。
エンティティの最近傍の一致を取得する
エンティティ ID を指定して、意味的に関連するエンティティを検索できます。
エンティティ ID の最近傍を検索するには、SEARCH_USING_ENTITY
メソッドを使用してリクエストを送信します。
DATA(lt_neighbours) = lo_client->search_using_entity(
EXPORTING
iv_feature_view_id = 'FEATURE_VIEW_NAME'
iv_entity_id = 'ENTITY_ID'
is_search_params = VALUE #( neighbor_count = 'NEIGHBOR_COUNT'
return_full_entity = 'RETURN_FULL_ENTITY' )
)->get_neighbours( ).
次のように置き換えます。
FEATURE_VIEW_NAME
: 近似最近傍の一致を検索する特徴ビューの名前。ENTITY_ID:
: 近似最近傍の一致を取得するエンティティのエンティティ ID。NEIGHBOR_COUNT
: 取得する近似最近傍の数。RETURN_FULL_ENTITY
: 省略可。レスポンスにエンティティの特徴を含めるかどうかを指定します。レスポンスにエンティティとともに特徴を含めるには、「ABAP_TRUE
」と入力します。デフォルト値はABAP_FALSE
です。
次のステップ
- ABAP SDK for Google Cloud の SAP BTP エディションによるアプリケーション開発について学習する。
- Cloud フォーラムのコミュニティで Vertex AI SDK for ABAP について質問したり、ディスカッションに参加したりする。