Databricks Certified Generative AI Engineer Associate 教科書
第4章 アプリケーションの組み立てとデプロイ(Assembling and Deploying Applications, 22%)
🎯 この節の学習目標
Unity Catalogに登録したモデルやチェーンを、アプリケーションから呼び出せるようにする仕組みがMosaic AI Model Servingです。UC登録済みモデルをREST APIエンドポイントとして公開するマネージドサービスで、次の特徴を持ちます。
Model Servingのエンドポイントには、配信対象によって主に3種類があります。試験ではこの整理がよく問われます。
| 種類 | 配信するもの | 例 |
|---|---|---|
| Foundation Model API | Databricksが提供する基盤モデル。pay-per-tokenなら自前デプロイ不要で即利用可、Provisioned Throughputなら専用スループットを確保 | Llama系などのオープン基盤モデル |
| 外部モデル(External Models) | OpenAIなど外部プロバイダのモデルへのプロキシ。ガバナンスを一元化できる(4-4) | OpenAIやAnthropicのAPI |
| カスタムモデル | UCに登録した自作モデル・チェーン・エージェント | 自作RAGチェーン、ファインチューニング済みモデル |
📝 試験のポイント
「すぐにLLMを試したい・低頻度利用」→ Foundation Model APIのpay-per-token、「自作のRAGチェーンを本番公開したい」→ カスタムモデルエンドポイント、「OpenAIのモデルもDatabricksのガバナンス下で使いたい」→ 外部モデルエンドポイント、という対応付けを即答できるようにしておきましょう。
カスタムモデルのエンドポイントは、Serving UIの画面操作、REST API、SDKのいずれでも作成できます。中核概念はserved entity(配信対象の指定)で、UC上のモデル名とバージョン(またはエイリアス)を指定します。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import (
EndpointCoreConfigInput, ServedEntityInput
)
w = WorkspaceClient()
w.serving_endpoints.create(
name="support-rag-endpoint",
config=EndpointCoreConfigInput(
served_entities=[
ServedEntityInput(
entity_name="prod.genai_apps.support_rag_chain",
entity_version="3",
workload_size="Small",
scale_to_zero_enabled=True,
)
]
),
)
作成後はhttps://<workspace>/serving-endpoints/support-rag-endpoint/invocationsというURLでRESTリクエストを受け付けるようになります。
RAGチェーンやエージェントをデプロイする場合、素のModel Servingを手作業で構成する代わりに、databricks.agents.deploy()を使うのが推奨パターンです。UC登録済みのエージェント(チェーン)を指定して呼び出すだけで、次が自動でセットアップされます。
from databricks import agents
deployment = agents.deploy(
model_name="prod.genai_apps.support_rag_chain",
model_version="3",
)
# Review AppのURLや、エンドポイント名が返る
💼 例:どちらでデプロイするか
需要予測モデルのような従来型MLモデルなら、Model Servingのエンドポイントを直接作成すれば十分です。一方、人間のフィードバック収集やログ記録が品質改善に不可欠なRAGボットでは、agents.deploy()を使えばReview Appと推論テーブルまで一度に揃い、評価・監視のループ(第5章・第6章)へ最短で接続できます。試験でも「エージェントのデプロイとフィードバック収集を最小工数で」ときたらagents.deploy()が答えの軸です。
エージェント/チェーンのデプロイは、本節のModel Serving + agents.deploy()を中心に出題されることがありえます。Review Appと推論テーブルが自動セットアップされる流れを押さえておきましょう。
エージェントのホスティング先としては現在Databricks Appsが推奨されています(モデル推論エンドポイントの配信は引き続きModel Servingの役割)。使い分けと現行アーキテクチャの詳細は4-8で扱います。
公開したエンドポイントは、用途に応じて複数の方法で呼び出せます。
| 方法 | 使いどころ | 形 |
|---|---|---|
| REST API | 言語を問わない外部アプリからの呼び出し | POST /serving-endpoints/{name}/invocations |
| SDK / クライアント | PythonアプリやノートブックからOpenAI互換クライアント等で呼ぶ | w.serving_endpoints.query(...) など |
| ai_query() | SQLからの呼び出し。テーブル全行へのバッチ推論に強い | SELECT ai_query('endpoint', request) FROM ... |
-- SQLからのバッチ推論の例
SELECT
ticket_id,
ai_query(
"support-rag-endpoint",
concat("次の問い合わせを要約してください: ", body)
) AS summary
FROM prod.support.tickets;
📝 試験のポイント
「SQLしか書けないアナリストがテーブル内の全テキストにLLMを適用したい」→ ai_query()。「外部のWebアプリから呼びたい」→ RESTの/invocations。この使い分けはよく問われます。
本番エンドポイントの更新(新バージョンへの差し替え)は、エンドポイントのconfig更新として行います。更新中も旧構成がリクエストを処理し続け、新構成の準備が整ってから切り替わるローリング更新のため、ダウンタイムなしで差し替えられます。
さらに、1つのエンドポイントに複数のserved entityを載せ、トラフィックを%で振り分けることができます。段階的リリース(カナリアリリース)やA/Bテストの基盤になります。
w.serving_endpoints.update_config(
name="support-rag-endpoint",
served_entities=[
ServedEntityInput(entity_name="prod.genai_apps.support_rag_chain",
entity_version="3", workload_size="Small",
scale_to_zero_enabled=True),
ServedEntityInput(entity_name="prod.genai_apps.support_rag_chain",
entity_version="4", workload_size="Small",
scale_to_zero_enabled=True),
],
traffic_config=TrafficConfig(routes=[
Route(served_model_name="support_rag_chain-3", traffic_percentage=90),
Route(served_model_name="support_rag_chain-4", traffic_percentage=10),
]),
)
💼 例:段階的リリースのシナリオ
新バージョン4をまず10%のトラフィックで公開し、推論テーブルのログと評価指標(第5章)を監視します。問題がなければ50%→100%と引き上げ、異常があれば即座に0%へ戻します。エイリアス運用(4-1・4-5)と組み合わせることで、リリースとロールバックの両方が低リスクになります。
✅ この節のまとめ
問1. Unity Catalogに登録済みのRAGエージェントを本番公開したい。あわせて、業務担当者が回答品質をレビューできるアプリと、リクエスト/レスポンスの自動ログも最小の工数で用意したい。最も適切な方法はどれか。
正解:B
agents.deploy()はエンドポイント作成に加えてReview Appと推論テーブルを自動で用意するため、要件を最小工数で満たします。Aは自作分の工数が過大、Cはリアルタイム公開にならず、Dはガバナンスやスケーリングを失うアンチパターンです。
問2. SQLアナリストが、Deltaテーブルに格納された数万件のレビュー文すべてに対し、デプロイ済みエンドポイントのLLMで感情分析を実行したい。最も適切な方法はどれか。
正解:B
ai_query()はSQLからServingエンドポイントを呼び出す関数で、テーブル全行へのバッチ推論に適しています。Aは実装・運用負荷とエラー処理の面で非効率、Cはコンテキスト長超過と結果の対応付け不能で破綻し、Dは不要かつガバナンスを失います。
問3. 本番稼働中のカスタムモデルエンドポイントを新しいモデルバージョンに更新したい。サービスを止めずに、まず一部のユーザーだけに新バージョンを適用してリスクを抑えたい。どうすべきか。
正解:B
Model Servingは1エンドポイントに複数バージョンを載せてトラフィックを%で振り分けでき、構成更新は無停止のローリングで反映されます。Aはダウンタイムが発生、Cは「止めずに」の要件に反し、Dは段階適用にならず切替リスクが大きい方法です。
問4. Model Servingのエンドポイント種別に関する説明として正しいものはどれか。
正解:B
外部モデルエンドポイントは外部プロバイダのAPIへのプロキシとして働き、レート制限やロギングなどのガバナンス(4-4)を一元適用できます。AはFoundation Model APIがDatabricks提供の基盤モデルを登録不要で使える仕組みである点で誤り、Cはリアルタイム推論が主用途である点で誤り、Dはscale-to-zeroの目的(アイドル時のコスト削減)と正反対です。