モデル提供エンドポイントからリソースへのアクセスを構成する
この記事では、モデル提供エンドポイントから外部およびプライベート リソースへのアクセスを構成する方法について説明します。 モデル提供では、プレーンテキスト環境変数と、Databricks シークレットを使用したシークレットベースの環境変数がサポートされます。
要件
シークレットベースの環境変数の場合
- エンドポイント作成者は、構成で参照されている Databricks シークレットへの読み取りアクセス権を持っている必要があります。
- API キーや他のトークンなどの資格情報を Databricks シークレットとして格納する必要があります。
プレーンテキスト環境変数を追加する
プレーンテキスト環境変数を使用して、非表示にする必要のない変数を設定します。 エンドポイントを作成または更新するときに、提供 UI または REST API で変数を設定できます。
提供 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: エンドポイント構成にシークレット スコープを追加する
エンドポイントの作成または構成の更新中に、シークレット スコープを環境変数に追加し、その変数をエンドポイントに渡すことができます。 「カスタム モデル提供エンドポイントを作成する」を参照してください。
提供 UI から、[高度な構成] で環境変数を追加することができます。 シークレット ベースの環境変数は、{{secrets/scope/key}}
構文を使用して指定する必要があります。 それ以外の場合、環境変数はプレーンテキスト環境変数と見なされます。
REST API を使用してサービス エンドポイントを作成する例を以下に示します。 エンドポイントを提供するモデルの作成と構成の更新中に、environment_vars
フィールドを使用して API 要求内で提供される各モデルのシークレット環境変数の仕様の一覧を提供できます。
次の例では、指定されたコードで作成されたシークレットの値を環境変数 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 シークレット スコープからシークレット キーを取得し、使用するモデル推論コードの環境変数を設定します。
ノートブックの例
シークレットベースの環境変数を使用して、エンドポイントを提供するモデルの背後にデプロイされた LangChain Retrieval QA チェーンの OpenAI API キーを構成する方法の例については、次のノートブックを参照してください。