注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

外部でホストされているモデルを統合する

現在、外部でホストされているモデルではバッチデプロイメントを利用できません。代わりに、外部モデルを使用する Python トランスフォームを設定してください。

外部でホストされているモデルを Foundry でラップする利点

Foundry では、Azure Machine Learning、Amazon SageMaker、OpenAI、Vertex AI などのサードパーティアプリケーション、サービス、モデルプロバイダーでホストされているモデルへのプロキシとして機能するモデルを作成できます。これにより、Foundry の外部で開発されたモデルを、Foundry のユーザー、パイプライン、運用アプリケーションで簡単に使用できます。

外部でホストされているモデルを統合すると、Foundry で次の機能を利用できます。

  • 完全なバージョン管理、きめ細かな権限管理、ガバナンスが適用されたモデルリネージ。
  • Modeling Objectives によるモデル管理とライブデプロイメント。
  • Foundry オントロジーへのバインドによる、モデル上の関数を通じた運用化と What-if シナリオ分析。

上記の機能は、ユースケースによっては必要ない場合があります。たとえば、Foundry でモデルを管理または評価する予定がない場合や、大規模言語モデルのようにオントロジー内の特定のオブジェクトタイプにバインドすべきでない汎用モデルを使用する場合は、モデルを外部でホストすることが適切な解決策ではない可能性があります。その場合は、モデルを Foundry モデルとしてラップするのではなく、Foundry からモデルの外部 API を直接呼び出す方法を検討できます。

このような場合、以下で説明するようにモデル定義の一部として資格情報を設定する代わりに、Data Connection ソースで資格情報を定義できます。その後、このソースと関連するエグレスポリシーを外部トランスフォームにインポートしてバッチ推論を有効にし、関数にインポートしてライブ推論を有効にできます。

言語モデルに関する追加の考慮事項

言語モデルの場合は、AIP Logic や Pipeline Builder の LLM ノードを使用などの AIP ツールで使用できるよう、プラットフォームにモデルを登録することを検討してください。これには Foundry の外部でホストされているモデルを使用できますが、モデルを作成する必要はありません。登録済みモデルのページでは、独自のモデルを AIP に登録する方法を説明しています。

外部でホストされているモデルへのカスタム接続を作成する

外部でホストされているモデルへの接続を作成するには、次のものが必要です。

  • 外部でホストされているモデルに接続するための接続情報。
  • 外部でホストされているモデルへの接続を作成し、そのモデルとやり取りする方法を Foundry に伝えるモデルアダプター。
  • 外部でホストされているモデルへの接続を Foundry に許可する Foundry エグレスポリシー。

以下の手順に沿って、外部でホストされているモデルへのプロキシとなるモデルを作成できます。

1. 新しいモデルを作成する

最初に、新しいモデルを作成します。Foundry プロジェクトで +新規 > モデルを選択するか、新しいまたは既存の Modeling Objective から作成できます。Modeling Objective では、モデルを追加を選択します。

以下のスクリーンショットは、Foundry プロジェクトで +新規 > モデルを選択して新しいモデルを作成する様子を示しています。

新しいモデルの作成を示す空の Compass プロジェクト

以下のスクリーンショットは、外部モデル画面でモデルを追加を選択し、Modeling Objective から新しいモデルを作成する様子を示しています。

空の Modeling Objective

2. モデルを追加する方法を選択する

外部ホストモデルを接続を選択し、次に次へを選択します。

Palantir Foundry で外部ホストモデルを接続を選択

3. エグレスポリシーを設定する

外部でホストされているモデルのソースとしてカスタム接続を選択し、ドロップダウンで出力ポリシーを選択して、次へを選択します。

エグレスポリシーは、Foundry プロジェクトや作成物が Foundry から外部システムにデータを送信できるようにします。エグレスポリシーは、組織の Foundry セキュリティモデルによって管理されている場合があります。必要な権限がある場合は、Control Panel アプリケーションでエグレスポリシーの一覧を見て、新しいエグレスポリシーを設定できます。

Palantir Foundry で外部でホストされているモデルのエグレスポリシーを選択

4. モデルアダプターを設定する

このモデルのモデルアダプターを選択します。モデルアダプターは、読み込み時に ExternalModelContext を受け取り、外部でホストされているモデルへの接続を初期化するように設定する必要があります。詳細については、モデルアダプターの作成方法に関するドキュメント、外部モデルのモデルアダプターの例、および ExternalModelContext の API 定義を参照してください。

Palantir Foundry で外部でホストされているモデルのモデルアダプターを定義

5. モデル接続を設定する

カスタムモデル接続の接続情報を定義します。接続設定には、次の2つの要素があります。

  • URL(任意):モデルアダプターに渡されるベース URL です。モデルの推論関数の URL を指定することを想定しています。
  • 接続設定(任意):接続設定は暗号化されず、プラットフォーム内でモデルのメタデータとともに閲覧できます。この要素には、モデル名、推論パラメーター、しきい値など、特定の設定情報を保存できます。

Palantir Foundry で外部でホストされているモデルの設定を定義

6. 資格情報を設定する

カスタムモデル接続の資格情報の設定を定義し、次へを選択します。

  • 資格情報の設定(任意):資格情報は暗号化され、モデルとともに安全に保存されます。これらの資格情報はモデルの読み込み時に復号され、モデルアダプターに渡されます。モデルにアクセスできるユーザーは、外部モデル自体へのアクセス権限にかかわらず、このモデルを使用して推論を実行できます。モデル情報の保存に進むには、次へを選択します。

Palantir Foundry で外部でホストされているモデルの資格情報を定義

7. 詳細を設定してモデルを登録する

モデルの保存場所、モデル名、バージョンのメモを入力します。これにより、Foundry 内でのモデルの名前、場所、メタデータが定義されます。

Modeling Objective からこのモデルを作成している場合は、確定を選択すると、モデルが作成され、その Modeling Objective に登録されます。Modeling Objective では、モデルに移動して設定を確認でき、必要に応じてリンクされた資格情報を更新できます。

Foundry プロジェクトでこのモデルを作成している場合は、完了を選択してモデルを保存します。

Palantir Foundry で外部でホストされているモデルの保存場所を定義

外部でホストされているモデルを表示する

外部でホストされているモデルでは、資格情報の更新、接続設定の確認、エグレスポリシーの RID のコピーができ、Python トランスフォームを設定できます。

Palantir Foundry の外部モデルの表示

Modeling Objective への外部モデルの登録

Palantir Foundry の外部モデルの表示

外部でホストされているモデルをテストして運用する

外部でホストされているモデルをテストして運用するには、いくつかの方法があります。次のことができます。

モデリング目標でのライブデプロイ

Foundry でリアルタイム推論を行うには、ライブデプロイを設定する手順に沿って進めてください。

モデルと同じ Foundry プロジェクト内のモデリング目標でモデルをホストする場合、エグレスポリシーはライブデプロイに自動的に適用されます。それ以外の場合は、ホスト先のプロジェクトにエグレスポリシーをインポートする必要があります。

モデリング目標でのバッチパイプライン

外部でホストされているモデルは、現在、モデリング目標でのバッチデプロイやモデルの自動評価をサポートしていません。

Python トランスフォーム

外部モデルを使用する Python トランスフォームを設定するには、その接続のネットワークエグレスを手動で有効にする必要があります。

次に、モデルバージョンから必要なエグレスポリシー名を確認し、そのモデルを入力とする Python トランスフォームを設定できます。

Palantir Foundry の外部でホストされているモデルの表示にあるエグレスと資格情報の RID

依存関係

この例では、Python Transforms リポジトリに次の依存関係を設定しています。モデル推論用の external-model-adapters と、外部システムとのやり取りに使用する transforms-external-systems の依存関係が追加されている点に注意してください。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 requirements: build: - python 3.8.* - setuptools run: - python 3.8.* - transforms {{ PYTHON_TRANSFORMS_VERSION }} - transforms-expectations - transforms-verbs - transforms-external-systems - external-model-adapters 1.0.0

トランスフォームの例

この簡単な例では、外部でホストされているモデルを使用して推論を実行します。必須の export_control と egress ポリシーが compute 関数への入力として追加されている点に注意してください。エグレスポリシーには、モデルで定義されているものと同じエグレスポリシーを使用する必要があります。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 from transforms.api import transform, Input, Output from palantir_models.transforms import ModelInput from transforms.external.systems import EgressPolicy, use_external_systems, ExportControl @use_external_systems( export_control=ExportControl(markings=['<MARKING_ID>']), egress=EgressPolicy('ri.resource-policy-manager.<RID>') ) @transform( output=Output("/Foundry/Externally Hosted Models/data/inferences"), model=ModelInput("/Foundry/Externally Hosted Models/models/Regression Model"), foundry_input=Input("/Foundry/Externally Hosted Models/data/regression_features_input") ) def compute( export_control, egress, output, model, foundry_input ): input_df = foundry_input.pandas() results = model.transform(input_df) output.write_pandas(results.df_out)

モデルアダプターの構造の例

以下に、外部でホストされているモデルでの使用を想定したモデルアダプターの構造の例を示します。

詳細については、次を参照することを推奨します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 import palantir_models as pm import json import pandas as pd class ExampleModelAdapter(pm.ExternalModelAdapter): def __init__(self, url, credentials_map, configuration_map): # 「接続設定」マップからモデルの設定を抽出します model_name = configuration_map['model_name'] model_parameter = configuration_map['model_parameter'] # 「資格情報設定」マップからモデルの資格情報を抽出します secret_key = credentials_map['secret_key'] # モデルの読み込み時に HTTP クライアントを初期化します self.client = ExampleClient(url, model_name, model_parameter, secret_key) @classmethod def init_external(cls, external_context: pm.ExternalContext) -> "pm.ExternalModelAdapter": return cls( url=external_context.base_url, credentials_map=external_context.resolved_credentials, configuration_map=external_context.connection_config, ) @classmethod def api(cls): inputs = {"df_in": pm.Pandas()} outputs = {"df_out": pm.Pandas()} return inputs, outputs def predict(self, df_in): payload = { "instances": df_in.apply(lambda row: {"features": row.tolist()}, axis=1).tolist() } # クライアントは例であり、外部モデルに接続するには編集が必要です response = self.client.predict( ContentType="application/json", Body=json.dumps(payload) ) result = response["Body"].read().decode() predictions = pd.DataFrame(json.loads(result)["predictions"]) return predictions