本文說明如何設定從模型服務端點對外部和私人資源的存取。 模型服務支援使用 Databricks 祕密的純文字環境變數和祕密型環境變數。
需求
針對祕密型環境變數,
- 端點建立者必須對設定中參考的 Databricks 祕密具有 READ 存取權。
- 您必須將 API 金鑰或其他權杖等認證儲存為 Databricks 祕密。
新增純文字環境變數
使用純文字環境變數來設定不需要隱藏的變數。 建立或更新端點時,您可以在Serving UI、REST API或SDK中設定變數。
提供使用者介面
從 [服務 UI] 中,您可以在 [進階設定] 中新增環境變數:
REST API
以下是使用 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"
}
}
]
}
}
WorkspaceClient SDK
以下是使用 WorkspaceClient SDK 和 environment_vars 欄位來設定環境變數建立服務端點的範例。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ServedEntityInput, EndpointCoreConfigInput, ServingModelWorkloadType
w = WorkspaceClient()
endpoint_name = "example-add-model"
model_name = "main.default.addmodel"
w.serving_endpoints.create_and_wait(
name=endpoint_name,
config=EndpointCoreConfigInput(
served_entities=[
ServedEntityInput(
entity_name = model_name,
entity_version = "2",
workload_type = ServingModelWorkloadType("CPU"),
workload_size = "Small",
scale_to_zero_enabled = False,
environment_vars = {
"MY_ENV_VAR": "value_to_be_injected",
"ADS_TOKEN": "abcdefg-1234"
}
)
]
)
)
MLflow 部署套件開發工具包(SDK)
以下是使用 Mlflow 部署 SDK 和 environment_vars 欄位來設定環境變數,以建立服務端點的範例。
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
name="unity-catalog-model-endpoint",
config={
"served_entities": [
{
"name": "ads-entity"
"entity_name": "catalog.schema.my-ads-model",
"entity_version": "3",
"workload_size": "Small",
"scale_to_zero_enabled": True,
"environment_vars": {
"MY_ENV_VAR": "value_to_be_injected",
"ADS_TOKEN": "abcdefg-1234"
}
}
]
}
)
記錄特徵查找數據框至推論表格
如果您的端點上已啟用推論表,您可以使用 將 ENABLE_FEATURE_TRACING 記錄到該推論表。 這需要 MLflow 2.14.0 或更新版本。
當您建立或更新端點時,在服務 UI、REST API 或 SDK 中設定 ENABLE_FEATURE_TRACING 為環境變數。
提供使用者介面
- 在 [ 進階組態] 中,選取 [+ 新增環境變數]。
- 輸入
ENABLE_FEATURE_TRACING作為環境名稱。 - 在右邊的欄位中,輸入
true。
REST API
以下是使用 POST /api/2.0/serving-endpoints REST API 和 environment_vars 字段配置 ENABLE_FEATURE_TRACING 環境變數來創建服務端點的範例。
{
"name": "endpoint-name",
"config": {
"served_entities": [
{
"entity_name": "model-name",
"entity_version": "1",
"workload_size": "Small",
"scale_to_zero_enabled": "true",
"environment_vars": {
"ENABLE_FEATURE_TRACING": "true"
}
}
]
}
}
WorkspaceClient SDK
以下是使用 WorkspaceClient SDK 和 environment_vars 欄位來配置 ENABLE_FEATURE_TRACING 環境變數,建立服務端點的範例。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ServedEntityInput, EndpointCoreConfigInput, ServingModelWorkloadType
w = WorkspaceClient()
endpoint_name = "example-add-model"
model_name = "main.default.addmodel"
w.serving_endpoints.create_and_wait(
name=endpoint_name,
config=EndpointCoreConfigInput(
served_entities=[
ServedEntityInput(
entity_name = model_name,
entity_version = "2",
workload_type = ServingModelWorkloadType("CPU"),
workload_size = "Small",
scale_to_zero_enabled = False,
environment_vars = {
"ENABLE_FEATURE_TRACING": "true"
}
)
]
)
)
MLflow 部署套件開發工具包(SDK)
以下是使用 Mlflow 部署 SDK 和 environment_vars 欄位來設定 ENABLE_FEATURE_TRACING 環境變數來建立服務端點的範例。
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
name="unity-catalog-model-endpoint",
config={
"served_entities": [
{
"name": "ads-entity"
"entity_name": "catalog.schema.my-ads-model",
"entity_version": "3",
"workload_size": "Small",
"scale_to_zero_enabled": True,
"environment_vars": {
"ENABLE_FEATURE_TRACING": "true"
}
}
]
}
)
新增祕密型環境變數
您可以使用 Databricks 祕密安全地儲存認證,並使用祕密型環境變數在模型中參考這些祕密。 這可讓在服務時間,從模型服務端點的模型擷取認證。
例如,您可以傳遞認證來呼叫 OpenAI 和其他外部模型端點,或直接從模型服務存取外部資料儲存位置。
Databricks 建議使用此特徵將 OpenAI 和 LangChain MLflow 模型變體部署到服務中。 它也適用於需要認證的其他 SaaS 模型,但需要了解存取模式是以使用環境變數和 API 金鑰與權杖為基礎。
步驟 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
以下是使用 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}}"
}
}
]
}
WorkspaceClient SDK
以下是使用 WorkspaceClient SDK 建立服務端點的範例。 在模型服務端點建立和組態更新期間,您能使用 environment_vars 欄位,為 API 要求內的每個服務模型提供祕密環境變數規格清單。
下列範例會將在提供的程式碼中建立的祕密值指派給環境變數 OPENAI_API_KEY。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ServedEntityInput, EndpointCoreConfigInput, ServingModelWorkloadType
w = WorkspaceClient()
endpoint_name = "example-add-model"
model_name = "main.default.addmodel"
w.serving_endpoints.create_and_wait(
name=endpoint_name,
config=EndpointCoreConfigInput(
served_entities=[
ServedEntityInput(
entity_name = model_name,
entity_version = "2",
workload_type = ServingModelWorkloadType("CPU"),
workload_size = "Small",
scale_to_zero_enabled = False,
environment_vars = {
"OPENAI_API_KEY": "{{secrets/my_secret_scope/my_secret_key}}"
}
)
]
)
)
MLflow 部署套件開發工具包(SDK)
以下是使用 Mlflow Deployments SDK 建立服務端點的範例。 在模型服務端點建立和組態更新期間,您能使用 environment_vars 欄位,為 API 要求內的每個服務模型提供祕密環境變數規格清單。
下列範例會將在提供的程式碼中建立的祕密值指派給環境變數 OPENAI_API_KEY。
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
name="unity-catalog-model-endpoint",
config={
"served_entities": [
{
"name": "ads-entity"
"entity_name": "catalog.schema.my-ads-model",
"entity_version": "3",
"workload_size": "Small",
"scale_to_zero_enabled": True,
"environment_vars": {
"OPENAI_API_KEY": "{{secrets/my_secret_scope/my_secret_key}}"
}
}
]
}
)
建立或更新端點之後,模型服務會自動從 Databricks 祕密範圍擷取祕密金鑰,並填入您模型推斷程式碼要使用的環境變數。
筆記本範例
如需如何為部署在具有祕密型環境變數的模型服務端點後方的 LangChain 擷取 QA 鏈結設定 OpenAI API 金鑰的範例,請參閱下列筆記本。