カスタムモデルサービス

モデルサービスは、推論リクエストを1つまたは複数のモデルに変換しルーティングし、トラフィック分割とフォールバックを特徴とするエンドポイントです。 リアルタイムリクエストとバッチ推論の両方をサポートします。

以下のようなユースケース向けにカスタムモデルサービスを作成してください:

  • アプリケーションのためのモデルに依存しないエンドポイント。 カスタマーサポートアシスタントに「 production.ai.support-assistant」というサービスを提供しましょう。 アプリケーションが呼び出す名前を変えずに、基盤となるモデルを変更することができます。
  • カスタムルーティングとフォールバック。 トラフィックスプリットを使って、より広範な展開前に10% のトラフィックを新しいモデルに送るか、失敗したリクエストのためのバックアップ宛先を設定することもできます。
  • 一つの作業量のための予算。 サービスに project=support-assistant をタグ付けし、そのタグを対象に 月次予算 を設定し、支出が1,000ドルに達した時点でアラートを出すようにします。
  • チームのアクセス制御。 法務チームとそのアプリケーションサービス担当責任者にlegal-reviewサービスへのアクセスを許可し、他のチームには別々のサービスを利用させましょう。
  • 作業量に対するレート制限。 テストサービスを1分間に100リクエスト、本番サービスを1分間に1,000リクエストに設定し、 サービスレート制限を適用してください。
  • 監視とログは別々に行う。 サポートアシスタントのリクエストと応答を専用の 推論テーブル に送信し、そのトラフィックをコーディングエージェントのトラフィックとは別に検査できるようにします。

サービスを作成せずにサービスAzure Databricksサービス済みの基礎モデルをクエリするには、system.aiのシステム提供モデルサービスを使用してください。

サービスは、ペイパートークンやプロビジョニングスループットを用いてAzure Databricksで提供されたモデルにルーティングするか、モデルプロバイダーを通じて外部モデルにルーティングすることができます。 これらの目的地を一つのサービスで組み合わせることも可能です。

カスタムモデルサービスはUnity Catalogのセキュアラブルです。 呼び出し元は、ワークスペースをまたいで、または Azure Databricks の外部から、完全修飾名 catalog.schema.name を使ってそれらを呼び出します。 「 ガバナンスと特権」を参照してください。

Requirements

メモ

Unity GatewayはAzure Governmentではサポートされていません。

  • Unity Gateway対応リージョン内のAzure Databricksワークスペース。
  • ワークスペースに対して有効になっている Unity カタログ。 「Unity Catalog のワークスペースを有効にする」を参照してください。
  • モデル サービスを作成するには、次が必要です。
    • モデル サービスを作成するカタログとスキーマに対する USE CATALOG、USE SCHEMA、および CREATE SERVICE 権限。
    • EXECUTE は、モデルサービスが宛先として参照している各モデルに対して実行されます。
    • EXECUTE、 USE CATALOG、 USE SCHEMA は、モデルサービスが宛先として参照する各 モデルプロバイダー に対してです。
    • 推論ログを有効にする場合は、推論テーブルが作成されるカタログとスキーマに対する USE CATALOG、USE SCHEMA、および CREATE TABLE 権限。

カスタムモデルサービスを作成する

Unity Gateway UIまたはカタログエクスプローラーでモデルサービスを作成します。 プログラム的に作成するには、REST API、Azure Databricks SDK、Azure Databricks CLI、Terraform、またはDeclarative Automation Bundles(DAB)を使ってください。

モデルサービスと モデルプロバイダー は、Unity Catalogスキーマ内で単一の名前空間を共有します。 スキーマ内のモデルプロバイダーがすでにその名前を使っている場合、そのモデルサービスの名前を使うことはできませんし、その逆も同様です。

UI

  1. 次のいずれかの操作を行います。
    • ワークスペースのサイドバーで、[ AI ゲートウェイ] をクリックし、[ 作成] をクリックします。
    • カタログ エクスプローラーで、モデル サービスを作成するスキーマに移動し、>>をクリックします。
  2. モデル サービスの名前を入力し、作成するカタログとスキーマを選択します。 カタログ エクスプローラーから開始すると、カタログとスキーマがカタログ エクスプローラーによって事前入力されます。
  3. 主な目的地を選択してください。 この送信先には、あなたがEXECUTEしており、Unity Gateway が提供できる Azure Databricks で提供されるモデル、またはあなたがUSE CATALOG、USE SCHEMA、しているEXECUTEを指定できます。
  4. Create をクリックしてください。

モデル サービスを作成した後、Azure Databricksは概要ページを開き、推論ログなどの追加機能を開始または構成できます。

REST API

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
        }
      ]
    }
  }
}'

CLI

親スキーマとリーフ名を渡し、設定に --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
        }
      ]
    }
  }
}'

Terraform

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
      }]
    }
  }
}

DAB(ベータ版)

バンドル内でモデルサービスを定義し、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

Python SDK

Databricks SDKの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,
                    )
                ]
            )
        ),
    ),
)

Go SDK (ソフトウェア開発キット)

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,
				}},
			},
		},
	},
})

Go Modular SDK

Go用のDatabricks AI Gateway SDKを使ってモデルサービスを作成・管理します。 オプションフィールドはポインタなので、例では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"),
						},
					},
				}},
			},
		},
	},
})

Java SDK

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)));

JS Modular SDK

Databricks AI Gateway SDKの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,
          },
        ],
      },
    },
  },
});

モデルサービスへのアクセスを付与する

デフォルトでは、モデルサービスの所有者のみがクエリ可能です。 他者がモデルサービスを照会できるように、そのサービスに対してそのサービスに EXECUTE を与え、さらにそのカタログやスキーマに対しても USE CATALOG や USE SCHEMA を付与します。 モデル サービスが推論テーブルにログを記録する場合は、テーブルに SELECT を付与して、ログに記録された要求と応答を読み取るようにします。

UI

  1. カタログエクスプローラーでモデルサービスを開くか、 AI Gateway でサービスを選択してください。
  2. [アクセス許可] タブに移動します。
  3. [許可] をクリックします。
  4. アクセス権を付与するユーザー、グループ、またはサービス プリンシパルを選択します。
  5. EXECUTE 特権を選択します。
  6. [許可] をクリックします。

REST API

databricks api patch \
  "/api/2.1/unity-catalog/permissions/model_service/main.default.my_model_service" \
  --json '{
    "changes": [
      { "principal": "data-team", "add": ["EXECUTE"] }
    ]
  }'

CLI

Databricks CLIで EXECUTE を付与してください。 CLIをインストールするには、「 Databricks CLIのインストールまたは更新」をご覧ください。

databricks grants update model_service main.default.my_model_service \
  --json '{"changes": [{"principal": "data-team", "add": ["EXECUTE"]}]}'

Terraform

Databricks Terraform プロバイダーと databricks_grant リソースを使用して EXECUTE を付与する:

resource "databricks_grant" "example" {
  model_service = "main.default.my_model_service"
  principal     = "data-team"
  privileges    = ["EXECUTE"]
}

DAB(ベータ版)

バンドル内のモデルサービスリソースに 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]

Python SDK

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])],
)

Go SDK (ソフトウェア開発キット)

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},
	}},
})

Java SDK

を、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からモデルサービスに対して、レート制限、推論ログ、ガードレールを設定し、 サービスポリシー で実装します。 See:

推論ログ

推論ログを有効にすると、Azure Databricksは、指定した場所に定義済みのスキーマを持つ新しい空の Unity カタログ テーブルを作成します。 次の点に注意してください。

  • ターゲット カタログとスキーマに USE CATALOG、 USE SCHEMA、および CREATE TABLE が必要です。
  • モデル サービスの作成者は、推論テーブルの所有者です。 許可しない限り、他のユーザーはアクセス権を持っていません。
  • 指定した場所にテーブルが既に存在する場合、モデル サービスの作成は失敗します。
  • 推論テーブルには、モデル サービスからの独立したライフサイクルがあります。 テーブルを削除すると、モデル サービスは動作し続けますが、ログ記録は停止します。

推論テーブルの詳細については、「 推論テーブルへのログリクエストおよび応答」を参照してください。

モデルサービスの更新

所有者であるか、MANAGE を保有している必要があります。

UI

Unity Gateway UIまたはカタログエクスプローラーからモデルサービスの設定を編集してください。 変更は現地で適用されます。

REST API

databricks api patch \
  "/api/2.1/unity-catalog/model-services/main.default.my_model_service?update_mask=comment" \
  --json '{"comment": "Updated: routes chat traffic"}'

CLI

databricks ai-gateway update-model-service model-services/main.default.my_model_service comment \
  --json '{"comment": "Updated: routes chat traffic"}'

Terraform

databricks_ai_gateway_model_serviceリソースのcomment(または他の可変フィールド)を編集して再適用してください。 変更は現地で適用されます。

DAB(ベータ版)

バンドルリソース内の comment (または他の可変フィールド)を編集して databricks bundle deployを実行します。 変更は現地で適用されます。

Python SDK

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"),
)

Go SDK (ソフトウェア開発キット)

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"},
})

Go Modular SDK

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,
})

Java SDK

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")));

JS Modular SDK

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

Unity Gateway UIまたはカタログエクスプローラーでモデルサービスを開き、kebabメニューから 削除 を選択します。

REST API

databricks api delete "/api/2.1/unity-catalog/model-services/main.default.my_model_service"

CLI

databricks ai-gateway delete-model-service model-services/main.default.my_model_service

Terraform

terraform destroyを実行するか、リソースブロックを削除して再適用してください。

DAB(ベータ版)

リソースをバンドルから削除し、 databricks bundle deploy を実行して削除してください。 databricks bundle destroy これも動作しますが、バンドルが管理するすべての資源を除去してしまい、このリソースだけではありません。

Python SDK

w.ai_gateway.delete_model_service(name="model-services/main.default.my_model_service")

Go SDK (ソフトウェア開発キット)

err := w.AiGateway.DeleteModelService(ctx, catalog.DeleteModelServiceRequest{
	Name: "model-services/main.default.my_model_service",
})

Go Modular SDK

err := c.DeleteModelService(ctx, aigateway.DeleteModelServiceRequest{
	Name: ptr("model-services/main.default.my_model_service"),
})

Java SDK

w.aiGateway()
    .deleteModelService(
        new DeleteModelServiceRequest().setName("model-services/main.default.my_model_service"));

JS Modular SDK

await client.deleteModelService({ name: 'model-services/main.default.my_model_service' });

統治と特権

Unity Catalogのセキュラブルオブジェクトとして、モデルサービスとして:

  • カタログとスキーマ内に存在し、ワークスペース バインドなどのスキーマ設定を継承します。
  • 名前、所有者、コメント、タグなどの標準の Unity カタログ メタデータを格納します。
  • Unity カタログ特権によって管理されるため、テーブル、関数、モデルに使用するのと同じ GRANT ステートメントと REVOKE ステートメントを使用してアクセス権を付与します。
  • カタログ エクスプローラーで、残りの Unity カタログ アセットと共に検出できます。

次の特権が適用されます。

権限 説明
USE CATALOG、USE SCHEMA モデル サービスを含むカタログとスキーマにアクセスします。 すべての操作に必要です。
CREATE SERVICE スキーマにモデル サービスを作成します。 カタログまたはスキーマに対して付与されます。
EXECUTE モデル サービスのクエリを実行します。
MANAGE モデル サービスを変更または削除し、その許可を管理します。 所有者には、 MANAGEのスーパーセットがあります。

モデルサービスはdefinerの権限を使用します。 Azure Databricksはクエリを発信者の権限ではなく所有者の権限と比較して評価します。 ユーザーがモデルサービスに問い合わせるとき、Azure Databricks所有者が参照先(基盤となるモデルやモデルプロバイダーなど)に情報EXECUTEを持っているかを確認します。 発信者はこれらの宛先に直接アクセスする必要はありません。

Limitations

以下の機能はサポートされていません:

  • SQLを使ったモデルサービスの作成と管理。
  • BROWSE特権のみを持つモデル サービスを検出する。
  • モデルサービスのグローバル検索。

追加リソース