カスタムモデルサービス
モデルサービスは、トラフィック分割とfallbackを使用して、推論リクエストを1つ以上のモデルに変換およびルーティングするEndpointです。リアルタイムリクエストに加えて、バッチ推論をサポートします。
次のようなユースケース向けのカスタムモデルサービスを作成します:
- アプリケーション用のモデル非依存のEndpoint。 カスタマーサポートアシスタントに
production.ai.support-assistantという名前のサービスを指定します。アプリケーションが呼び出す名前を変更せずに、基盤となるモデルを変更します。 - カスタムルーティングとfallback。 トラフィック分割を使用して、本格的なロールアウトの前にトラフィックの10%を新しいモデルに送信するか、リクエストが失敗したときのバックアップ先を設定します。
- A budget for one workload. Tag a サービス with
project=support-assistantand scope a monthly budget to that タグ, with an アラート at $1,000 of spend. - Access controls for a team. 法務チームとそのアプリケーションの Service Principal に
legal-reviewサービスへのアクセス権を付与し、他のチームには別のサービスを使用します。 - ワークロードのレート制限。 サービスのレート制限を使用して、1分あたり100リクエストのテストサービスと、1分あたり1,000リクエストの**本番運用**サービスを構成します。
- Separate モニタリング and Logs. Send a support assistant's requests and responses to a dedicated inference table so its traffic can be inspected separately from coding-agent traffic.
サービスを作成せずに Databricks が提供する基盤モデルをクエリーするには、system.ai の システム提供モデルサービス を使用します。
サービスでは、トークン単位の従量課金またはプロビジョニング済みthroughputを使用してDatabricksで提供されるモデルにルーティングすることも、モデルプロバイダーを介して外部モデルにルーティングすることもできます。1つのサービスでこれらの送信先を混在させることができます。
カスタムモデルサービスは Unity Catalog のセキュアラブルです。呼び出し元は、ワークスペース間または Databricks の外部から、完全修飾名 (catalog.schema.name) を使用してこれらを呼び出します。ガバナンスと権限を参照してください。
要件
- Unity Gateway サポート対象リージョンの Databricks ワークスペース。
- ワークスペースでUnity Catalog有効化されていること。 Unity Catalog のワークスペースを有効にする方法をご覧ください。
- モデルサービスを作成するには、次の条件を満たしている必要があります:
USE CATALOG、モデルサービスを作成するカタログおよびスキーマにおけるUSE SCHEMAおよびCREATE SERVICE。EXECUTEon each model that the model サービス references as a destination.EXECUTE、モデルサービスが宛先として参照する各モデルプロバイダー上のUSE CATALOGおよびUSE SCHEMA。USE CATALOG推論ロギングを有効にした場合、推論テーブルが作成されるカタログおよびスキーマにおけるUSE SCHEMAおよびCREATE TABLE。
カスタムモデルサービスの作成
Unity Gateway UI または Catalog Explorer でモデルサービスを作成します。To create one programmatically, use the REST API, the Databricks SDKs, the Databricks CLI, Terraform, or Declarative Automation Bundles (DABs).
モデルサービスとモデルプロバイダーは、Unity Catalogスキーマ内で単一の名前空間を共有します。スキーマ内のモデルプロバイダーがすでに使用している名前をモデルサービスに使用することはできません(逆の場合も同様です)。
- UI
- REST API
- CLI
- Terraform
- DABs (Beta)
- Python SDK
- Go SDK
- Go Modular SDK
- Java SDK
- JS Modular SDK
-
以下のいずれかを実行します。
- ワークスペースのサイドバーで、 AI Gateway をクリックし、 Create をクリックします。
- カタログエクスプローラーで、モデルサービスを作成するスキーマに移動し、[ 作成 ] > [ サービス ] > [ モデルサービス ] の順にクリックします。
-
モデルサービスの名前を入力し、作成先のカタログとスキーマを選択します。カタログエクスプローラーから起動する場合、カタログエクスプローラーによってカタログとスキーマが事前に入力されます。
-
サービングするプライマリ宛先を選択します。この宛先には、
EXECUTEが構成され Unity Gateway がサービングできる Databricks 提供モデル、またはEXECUTE、USE CATALOG、USE SCHEMAが構成されているモデルプロバイダーを指定できます。 -
作成 をクリックします。
モデルサービスを作成すると、Databricks に概要ページが表示され、そこで作業を開始したり、推論ロギングなどの追加機能を構成したりできます。
POSTを/api/2.1/unity-catalog/model-servicesに送信し、クエリーパラメーターとしてparentとmodel_service_idを渡します。ルーティング設定には少なくとも1つの宛先が必要です:
databricks api post \
"/api/2.1/unity-catalog/model-services?parent=schemas/main.default&model_service_id=my_model_service" \
--json '{
"comment": "Routes chat traffic to a foundation model",
"config": {
"routing": {
"destinations": [
{
"name": "primary",
"destination_type": "DESTINATION_TYPE_PAY_PER_TOKEN_FOUNDATION_MODEL",
"pay_per_token_config": { "model": "models/system.ai.databricks-gpt-5" },
"traffic_percentage": 100
}
]
}
}
}'
親スキーマとリーフ名を渡し、--json で構成を指定します。ルーティング構成には少なくとも 1 つの宛先が必要です。CLI をインストールするには、Databricks CLI のインストールまたは更新を参照してください。
databricks ai-gateway create-model-service schemas/main.default my_model_service --json '{
"comment": "Routes chat traffic to a foundation model",
"config": {
"routing": {
"destinations": [
{
"name": "primary",
"destination_type": "DESTINATION_TYPE_PAY_PER_TOKEN_FOUNDATION_MODEL",
"pay_per_token_config": { "model": "models/system.ai.databricks-gpt-5" },
"traffic_percentage": 100
}
]
}
}
}'
Databricks Terraform プロバイダーと databricks_ai_gateway_model_service リソースを使用してモデルサービスを作成および管理します。
resource "databricks_ai_gateway_model_service" "example" {
parent = "schemas/main.default"
model_service_id = "my_model_service"
comment = "Routes chat traffic to a foundation model"
config = {
routing = {
destinations = [{
name = "primary"
destination_type = "DESTINATION_TYPE_PAY_PER_TOKEN_FOUNDATION_MODEL"
pay_per_token_config = { model = "models/system.ai.databricks-gpt-5" }
traffic_percentage = 100
}]
}
}
}
バンドルでモデルサービスを定義し、databricks bundle deployを使用してデプロイします。ルーティング設定には少なくとも1つの宛先が必要です:
resources:
model_services:
my_model_service:
parent: schemas/main.default
model_service_id: my_model_service
comment: Routes chat traffic to a foundation model
config:
routing:
destinations:
- name: primary
destination_type: DESTINATION_TYPE_PAY_PER_TOKEN_FOUNDATION_MODEL
pay_per_token_config:
model: models/system.ai.databricks-gpt-5
traffic_percentage: 100
Databricks SDK for Pythonを使用してモデルサービスを作成および管理します:
from databricks.sdk.service import catalog as c
model_service = w.ai_gateway.create_model_service(
parent="schemas/main.default",
model_service_id="my_model_service",
model_service=c.ModelService(
comment="Routes chat traffic to a foundation model",
config=c.ModelServiceConfig(
routing=c.ModelServiceConfigRoutingConfig(
destinations=[
c.ModelServiceConfigDestinationConfig(
name="primary",
destination_type=(
c.ModelServiceConfigDestinationConfigDestinationType
.DESTINATION_TYPE_PAY_PER_TOKEN_FOUNDATION_MODEL
),
pay_per_token_config=c.ModelServiceConfigPayPerTokenConfig(
model="models/system.ai.databricks-gpt-5"
),
traffic_percentage=100,
)
]
)
),
),
)
Databricks SDK for Go を使用してモデルサービスを作成および管理します。
modelService, err := w.AiGateway.CreateModelService(ctx, catalog.CreateModelServiceRequest{
Parent: "schemas/main.default",
ModelServiceId: "my_model_service",
ModelService: catalog.ModelService{
Comment: "Routes chat traffic to a foundation model",
Config: &catalog.ModelServiceConfig{
Routing: &catalog.ModelServiceConfigRoutingConfig{
Destinations: []catalog.ModelServiceConfigDestinationConfig{{
Name: "primary",
DestinationType: catalog.ModelServiceConfigDestinationConfigDestinationTypeDestinationTypePayPerTokenFoundationModel,
PayPerTokenConfig: &catalog.ModelServiceConfigPayPerTokenConfig{
Model: "models/system.ai.databricks-gpt-5",
},
TrafficPercentage: 100,
}},
},
},
},
})
Databricks AI Gateway SDK for Goを使用してモデルサービスを作成および管理します。オプショナルフィールドはポインターであるため、この例では1行のヘルパー func ptr[T any](v T) *T { return &v }を使用します。
modelService, err := c.CreateModelService(ctx, aigateway.CreateModelServiceRequest{
Parent: ptr("schemas/main.default"),
ModelServiceId: ptr("my_model_service"),
ModelService: &aigateway.ModelService{
Comment: ptr("Routes chat traffic to a foundation model"),
Config: &aigateway.ModelServiceConfig{
Routing: &aigateway.ModelServiceConfig_RoutingConfig{
Destinations: []aigateway.ModelServiceConfig_DestinationConfig{{
Name: ptr("primary"),
DestinationType: aigateway.ModelServiceConfig_DestinationConfig_DestinationType_DestinationTypePayPerTokenFoundationModel,
TrafficPercentage: ptr(100),
TypeConfig: &aigateway.ModelServiceConfig_DestinationConfig_TypeConfig_PayPerTokenConfig{
PayPerTokenConfig: aigateway.ModelServiceConfig_PayPerTokenConfig{
Model: ptr("models/system.ai.databricks-gpt-5"),
},
},
}},
},
},
},
})
Databricks SDK for Java を使用してモデルサービスを作成および管理します。
ModelServiceConfig config =
new ModelServiceConfig()
.setRouting(
new ModelServiceConfigRoutingConfig()
.setDestinations(
Collections.singletonList(
new ModelServiceConfigDestinationConfig()
.setName("primary")
.setDestinationType(
ModelServiceConfigDestinationConfigDestinationType
.DESTINATION_TYPE_PAY_PER_TOKEN_FOUNDATION_MODEL)
.setPayPerTokenConfig(
new ModelServiceConfigPayPerTokenConfig()
.setModel("models/system.ai.databricks-gpt-5"))
.setTrafficPercentage(100L))));
ModelService modelService =
w.aiGateway()
.createModelService(
new CreateModelServiceRequest()
.setParent("schemas/main.default")
.setModelServiceId("my_model_service")
.setModelService(
new ModelService()
.setComment("Routes chat traffic to a foundation model")
.setConfig(config)));
Databricks AI Gateway SDK for JavaScript を使用してモデルサービスを作成および管理します。
import { ModelServiceConfig_DestinationConfig_DestinationType as DestType } from '@databricks/sdk-aigateway/v1';
const created = await client.createModelService({
parent: 'schemas/main.default',
modelServiceId: 'my_model_service',
modelService: {
comment: 'Routes chat traffic to a foundation model',
config: {
routing: {
destinations: [
{
name: 'primary',
destinationType: DestType.DESTINATION_TYPE_PAY_PER_TOKEN_FOUNDATION_MODEL,
typeConfig: {
$case: 'payPerTokenConfig',
payPerTokenConfig: { model: 'models/system.ai.databricks-gpt-5' },
},
trafficPercentage: 100,
},
],
},
},
},
});
モデルサービスへのアクセス権を付与する
defaultでは、モデルサービスの所有者のみがクエリーを実行できます。他のユーザーにモデルサービスのクエリーを許可するには、そのモデルサービスに対する EXECUTE と、そのカタログおよびスキーマに対する USE CATALOG および USE SCHEMA を付与します。モデルサービスが推論テーブルにLogsする場合、ログに記録されたリクエストとレスポンスを読み取ることができるように、テーブルに対する SELECT を付与します。
- UI
- REST API
- CLI
- Terraform
- DABs (Beta)
- Python SDK
- Go SDK
- Java SDK
- カタログエクスプローラーでモデルサービスを開くか、 AI Gateway に移動してサービスを選択します。
- 権限 タブに移動します。
- 付与 をクリックします。
- アクセス権を付与するユーザー、グループ、またはService Principalを選択します。
- EXECUTE 権限を選択します。
- 付与 をクリックします。
databricks api patch \
"/api/2.1/unity-catalog/permissions/model_service/main.default.my_model_service" \
--json '{
"changes": [
{ "principal": "data-team", "add": ["EXECUTE"] }
]
}'
Databricks CLI を使用して EXECUTE を付与します。CLI をインストールするには、Databricks CLI のインストールまたは更新を参照してください。
databricks grants update model_service main.default.my_model_service \
--json '{"changes": [{"principal": "data-team", "add": ["EXECUTE"]}]}'
Databricks Terraform プロバイダーと databricks_grant リソースを使用して EXECUTE を付与します。
resource "databricks_grant" "example" {
model_service = "main.default.my_model_service"
principal = "data-team"
privileges = ["EXECUTE"]
}
バンドル内のモデルサービスリソースに grants ブロックを追加し、アクセスを付与するために再デプロイします。
resources:
model_services:
my_model_service:
parent: schemas/main.default
model_service_id: my_model_service
comment: Routes chat traffic to a foundation model
config:
routing:
destinations:
- name: primary
destination_type: DESTINATION_TYPE_PAY_PER_TOKEN_FOUNDATION_MODEL
pay_per_token_config:
model: models/system.ai.databricks-gpt-5
traffic_percentage: 100
grants:
- principal: data-team
privileges: [EXECUTE]
Databricks SDK for Pythonを使用してEXECUTEを付与します:
from databricks.sdk.service import catalog as c
w.grants.update(
securable_type="model_service",
full_name="main.default.my_model_service",
changes=[c.PermissionsChange(principal="data-team", add=[c.Privilege.EXECUTE])],
)
Databricks SDK for Go を使用して EXECUTE に権限を付与します:
_, err := w.Grants.Update(ctx, catalog.UpdatePermissions{
SecurableType: "model_service",
FullName: "main.default.my_model_service",
Changes: []catalog.PermissionsChange{{
Principal: "data-team",
Add: []catalog.Privilege{catalog.PrivilegeExecute},
}},
})
Databricks SDK for Java で EXECUTE を付与します。
w.grants().update(
new UpdatePermissions()
.setSecurableType("model_service")
.setFullName("main.default.my_model_service")
.setChanges(Arrays.asList(
new PermissionsChange().setPrincipal("data-team").setAdd(Arrays.asList(Privilege.EXECUTE)))));
アクセス権の付与と検出の詳細については、モデルサービスのアクセスの検出とガバナンスを参照してください。
モデルサービスで機能を設定する
Unity Gateway UIからモデルサービスのレート制限、推論ロギング、およびサービスポリシーで実装されたガードレールを設定します。以下を参照してください:
推論ロギング
When you enable inference logging, Databricks creates a new, empty Unity Catalog table with a predefined schema at the location you specify.Note the following:
- ターゲットカタログとスキーマに対する
USE CATALOG、USE SCHEMA、およびCREATE TABLE権限が必要です。 - モデルサービスの作成者が推論テーブルの所有者になります。アクセス権を付与しない限り、他のユーザーはアクセスできません。
- 指定した場所にすでにテーブルが存在する場合、モデルサービスの作成は失敗します。
- 推論テーブルのライフサイクルは、モデルサービスとは独立しています。テーブルを削除しても、モデルサービスは稼働を続けますが、ログの記録は停止します。
推論テーブルの詳細については、推論テーブルへのリクエストと応答の Logs を参照してください。
Update a model サービス
所有者であるか、MANAGE を持っている必要があります。
- UI
- REST API
- CLI
- Terraform
- DABs (Beta)
- Python SDK
- Go SDK
- Go Modular SDK
- Java SDK
- JS Modular SDK
Unity Gateway UI またはカタログエクスプローラーからモデルサービスの構成を編集します。変更はインプレースで適用されます。
databricks api patch \
"/api/2.1/unity-catalog/model-services/main.default.my_model_service?update_mask=comment" \
--json '{"comment": "Updated: routes chat traffic"}'
databricks ai-gateway update-model-service model-services/main.default.my_model_service comment \
--json '{"comment": "Updated: routes chat traffic"}'
databricks_ai_gateway_model_service リソースの comment (またはその他の変更可能なフィールド)を編集して、再適用します。変更はその場で適用されます。
バンドルリソース内の comment (またはその他の変更可能なフィールド) を編集し、databricks bundle deploy をランします。変更はその場で適用されます。
from databricks.sdk.service import catalog as c
from google.protobuf.field_mask_pb2 import FieldMask
updated = w.ai_gateway.update_model_service(
name="model-services/main.default.my_model_service",
update_mask=FieldMask(paths=["comment"]),
model_service=c.ModelService(comment="Updated: routes chat traffic"),
)
updated, err := w.AiGateway.UpdateModelService(ctx, catalog.UpdateModelServiceRequest{
Name: "model-services/main.default.my_model_service",
UpdateMask: *fieldmask.New([]string{"comment"}),
ModelService: catalog.ModelService{Comment: "Updated: routes chat traffic"},
})
mask, err := types.NewFieldMask[aigateway.ModelService]("comment")
updated, err := c.UpdateModelService(ctx, aigateway.UpdateModelServiceRequest{
ModelService: &aigateway.ModelService{
Name: ptr("model-services/main.default.my_model_service"),
Comment: ptr("Updated: routes chat traffic"),
},
UpdateMask: mask,
})
ModelService updated =
w.aiGateway()
.updateModelService(
new UpdateModelServiceRequest()
.setName("model-services/main.default.my_model_service")
.setUpdateMask(FieldMask.newBuilder().addPaths("comment").build())
.setModelService(
new ModelService().setComment("Updated: routes chat traffic")));
import { modelServiceFieldMask } from '@databricks/sdk-aigateway/v1';
const updated = await client.updateModelService({
modelService: {
name: 'model-services/main.default.my_model_service',
comment: 'Updated: routes chat traffic',
},
updateMask: modelServiceFieldMask('comment'),
});
モデルサービスを削除する
所有者であるか、MANAGE を持っている必要があります。system.ai 内のシステム提供モデルサービスは削除できません。
- UI
- REST API
- CLI
- Terraform
- DABs (Beta)
- Python SDK
- Go SDK
- Go Modular SDK
- Java SDK
- JS Modular SDK
Unity Gateway UI または Catalog Explorer でモデルサービスを開き、ケバブメニューから [ 削除 ] を選択します。
databricks api delete "/api/2.1/unity-catalog/model-services/main.default.my_model_service"
databricks ai-gateway delete-model-service model-services/main.default.my_model_service
terraform destroy を実行するか、リソースブロックを削除して再適用します。
バンドルからリソースを削除し、databricks bundle deploy を実行して削除します。databricks bundle destroy でも機能しますが、このリソースだけでなく、バンドルが管理するすべてのリソースが削除されます。
w.ai_gateway.delete_model_service(name="model-services/main.default.my_model_service")
err := w.AiGateway.DeleteModelService(ctx, catalog.DeleteModelServiceRequest{
Name: "model-services/main.default.my_model_service",
})
err := c.DeleteModelService(ctx, aigateway.DeleteModelServiceRequest{
Name: ptr("model-services/main.default.my_model_service"),
})
w.aiGateway()
.deleteModelService(
new DeleteModelServiceRequest().setName("model-services/main.default.my_model_service"));
await client.deleteModelService({ name: 'model-services/main.default.my_model_service' });
ガバナンスと権限
Unity Catalog のセキュリティ保護可能なオブジェクトとして、モデルサービスは次を行います:
- カタログとスキーマに存在し 、ワークスペースのバインディングなどのスキーマ設定が継承されます。
- 名前、所有者、コメント、タグなど、標準的な Unity Catalog メタデータ を保持しています。
- Unity Catalogの権限によって管理される ため、テーブル、関数、およびモデルに使用するのと同じ
GRANTとREVOKEステートメントを使用してアクセスを付与します。 - Unity Catalog の他のアセットと同様に、Catalog Explorer で検出可能です。
次の権限が適用されます。
権限 | 説明 |
|---|---|
| モデルサービスを含むカタログとスキーマにアクセスします。すべてのオペレーションに必要です。 |
| スキーマでモデルサービスを作成します。カタログまたはスキーマに付与されます。 |
| モデルサービスにクエリを実行します。 |
| モデルサービスを変更または削除し、その権限を管理します。所有者は |
モデルサービスは、定義者の権限を使用します。Databricks は、呼び出し元の権限ではなく、 所有者 の権限に対してクエリーを評価します。ユーザーがモデルサービスをクエリーすると、Databricks は、基盤となるモデルや任意のモデルプロバイダーなどの参照される宛先に対して、所有者が EXECUTE を持っていることを確認します。呼び出し元は、それらの宛先への直接アクセスを必要としません。
制限事項
以下の機能はサポートされていません:
- SQL を使用したモデルサービスの作成と管理。
BROWSE権限のみでのモデルサービスの検出。- モデルサービスのグローバル検索。