モデルサービスエンドポイントからリソースへのアクセスの構成
この記事では、モデルサービング エンドポイントから外部リソースとプライベート リソースへのアクセスを構成する方法について説明します。 モデルサービングは、プレーンテキストの環境変数と、Databricksシークレットを使用したシークレットベースの環境変数をサポートしています。
要件
シークレットベースの環境変数の場合、
エンドポイント作成者は、構成で参照される Databricks シークレットへの読み取りアクセス権を持っている必要があります。
API キーやその他のトークンなどの資格情報を Databricks シークレットとして保存する必要があります。
プレーンテキスト環境変数を追加する
非表示にする必要のない変数を設定するには、プレーンテキスト環境変数を使用します。 エンドポイントを作成または更新するときに、Serving UI または REST API で変数を設定できます。
Serving UI から、詳細設定で環境変数を追加できます。
以下は、 POST /api/2.0/serving-endpoints
REST API とenvironment_vars
フィールドを使用してサービス エンドポイントを作成し、環境変数を構成する例です。
{
"name": "endpoint-name",
"config":{
"served_entities": [{
"entity_name": "model-name",
"entity_version": "1",
"workload_size": "Small",
"scale_to_zero_enabled": "true",
"environment_vars":{
"TEXT_ENV_VAR_NAME": "plain-text-env-value"
}
}]
}
}
シークレットベースの環境変数を追加する
Databricksシークレットを使用して資格情報を安全に保存し、シークレット ベースの ドメインを使用してモデル サーバーでそれらのシークレットを参照できます。 これにより、サービス提供時にモデル サーバーのエンドポイントから資格情報を取得できるようになります。
たとえば、認証情報を渡して OpenAI やその他の外部モデル エンドポイントを呼び出したり、モデル サービスから直接外部データ ストレージの場所にアクセスしたりできます。
Databricks では、 OpenAI および LangChain MLflow モデル フレーバーをサービングにデプロイするために、この機能をお勧めします。 また、アクセスパターンが環境変数とAPIキーとトークンの使用に基づいていることを理解した上で、資格情報を必要とする他のSaaSモデルにも適用できます。
ステップ1: シークレットスコープを作成する
モデルサービング中、シークレットスコープとキーによってDatabricksシークレットからシークレットが取得されます。 これらは、モデル内で使用できる秘密の環境変数名に割り当てられます。
まず、シークレットスコープを作成します。 シークレットスコープの管理を参照してください。
以下は CLI コマンドです。
databricks secrets create-scope my_secret_scope
その後、次に示すように、目的のシークレットスコープとキーにシークレットを追加できます。
databricks secrets put-secret my_secret_scope my_secret_key
シークレット情報と環境変数の名前は、エンドポイントの作成時にエンドポイント構成に渡すことも、既存のエンドポイントの構成の更新として渡すこともできます。
ステップ 2: エンドポイント構成にシークレットスコープを追加する
シークレットスコープを ドメイン に追加し、エンドポイントの作成時または構成の更新時にその変数をエンドポイントに渡すことができます。 「カスタム モデル サービング エンドポイントの作成」を参照してください。
Serving UI から、詳細設定で環境変数を追加できます。 シークレット ベースの環境変数は、次の構文を使用して指定する必要があります: {{secrets/scope/key}}
。 それ以外の場合、環境変数はプレーンテキスト環境変数と見なされます。
以下は、REST API を使用してサービス エンドポイントを作成する例です。 モデルサービング エンドポイントの作成および構成の更新中に、environment_vars
フィールドを使用して、 APIリクエスト内で各サービング モデルの秘密の DOM 仕様のリストを提供できます。
次の例では、提供されたコードで作成されたシークレットの値を環境変数OPENAI_API_KEY
に割り当てます。
{
"name": "endpoint-name",
"config":{
"served_entities": [{
"entity_name": "model-name",
"entity_version": "1",
"workload_size": "Small",
"scale_to_zero_enabled": "true",
"environment_vars":{
"OPENAI_API_KEY": "{{secrets/my_secret_scope/my_secret_key}}"
}
}]
}
}
次のPUT /api/2.0/serving-endpoints/{name}/config
REST API の例のように、サービス エンドポイントを更新することもできます。
{
"served_entities": [{
"entity_name": "model-name",
"entity_version": "2",
"workload_size": "Small",
"scale_to_zero_enabled": "true",
"environment_vars":{
"OPENAI_API_KEY": "{{secrets/my_secret_scope/my_secret_key}}"
}
}]
}
エンドポイントが作成または更新されると、モデル サービングは Databricks シークレットスコープからシークレットキーを自動的にフェッチし、使用するモデル推論コードの環境変数を設定します。