Databricks Certified Generative AI Engineer Associate 教科書
第4章 アプリケーションの組み立てとデプロイ(Assembling and Deploying Applications, 22%)
🎯 この節の学習目標
第3章までで、RAGチェーンやエージェントをMLflowでログする方法を学びました。ログしたモデルを本番デプロイにつなぐ次のステップが、Model Registryへの登録です。Databricksでは、MLflow Model RegistryはUnity Catalog(UC)との統合が標準になっており、モデルはテーブルや関数と同じガバナンス体系の中で管理されます。
UCに登録する利点は次の通りです。
📝 試験のポイント
試験では「Unity Catalogにモデルを登録する目的・利点」がそのまま問われます。キーワードは集中的なアクセス制御・リネージ・監査・環境間での共有です。「単にモデルを保存する場所」ではなく「ガバナンスの仕組みに載せること」が本質だと押さえてください。
UC配下のモデルは、テーブルと同じく3レベルの名前空間で識別されます。
<catalog>.<schema>.<model_name> — 例:prod.genai_apps.support_rag_chain
登録の基本コードは次の2ステップです。まずレジストリのURIをUCに向け、次にregister_model(またはログ時のregistered_model_name引数)で登録します。
import mlflow
# レジストリとしてUnity Catalogを使う宣言
mlflow.set_registry_uri("databricks-uc")
# 方法1: ログ済みモデルを後から登録
mlflow.register_model(
model_uri="runs:/<run_id>/chain",
name="prod.genai_apps.support_rag_chain",
)
# 方法2: ログと同時に登録
with mlflow.start_run():
mlflow.langchain.log_model(
lc_model=chain,
artifact_path="chain",
registered_model_name="prod.genai_apps.support_rag_chain",
)
同じ名前で再度登録すると、バージョン番号が自動的に採番されます(1, 2, 3, …)。同名モデルの新バージョンとして履歴が積み上がるため、「どのバージョンを本番に出すか」を明示的に管理できるようになります。
💡 例:LangChainのRAGチェーンを登録する
RAGチェーン(retriever + prompt + LLM)をMLflowのLangChainフレーバーでログし、そのままregistered_model_name="dev.rag.faq_bot"で登録すれば、チェーン全体が1つの「モデル」としてUCに載ります。以降のデプロイ(4-2)は、このUC上の名前とバージョンを指すだけで済みます。チェーンも通常のMLモデルも、登録の作法は同じです。
従来のワークスペース版Model Registryには「Staging」「Production」という固定のステージがありましたが、UC統合レジストリではこの仕組みは廃止され、後継としてエイリアス(alias)を使います。エイリアスは「モデルの特定バージョンに付ける可変のニックネーム」で、任意の名前を付けられます。慣例としてよく使われるのは次の2つです。
| エイリアス | 意味 | 典型的な使い方 |
|---|---|---|
@champion | 現在の本番採用バージョン | 本番エンドポイントはこのエイリアスを参照する |
@challenger | 本番候補の挑戦者バージョン | 評価・A/Bテストを経てchampionへの昇格を判断する |
from mlflow import MlflowClient
client = MlflowClient()
# バージョン3にchampionエイリアスを付ける
client.set_registered_model_alias(
name="prod.genai_apps.support_rag_chain",
alias="champion",
version=3,
)
エイリアスの強みは、参照側のコードを変えずに実体を差し替えられることです。エンドポイントやバッチ処理が@championを参照していれば、エイリアスをバージョン3から4に付け替えるだけで新バージョンへ切り替わり、問題があれば3に戻すだけでロールバックできます(運用フローは4-5で詳述)。
📝 試験のポイント
「旧レジストリのStaging/Productionステージに相当するUCでの仕組みは?」→ エイリアスが答えです。また「本番モデルを無停止で新バージョンに切り替える最も簡単な方法は?」という問いでも、エイリアスの付け替えが正解の軸になります。
登録済みモデルはmodels:/スキームのURIでロードします。バージョン番号での固定参照と、エイリアスでの可変参照の2通りがあります。
# エイリアスで参照(推奨:実体の差し替えに追従する)
model = mlflow.pyfunc.load_model(
"models:/prod.genai_apps.support_rag_chain@champion"
)
# バージョン番号で固定参照(再現性が必要な検証など)
model = mlflow.pyfunc.load_model(
"models:/prod.genai_apps.support_rag_chain/3"
)
model.predict({"query": "返品の手順を教えてください"})
環境間の昇格は、カタログを環境ごとに分けるのが定石です。たとえばdevカタログで開発・評価したモデルを、検証に合格したらprodカタログへコピー(または再登録)し、本番はprod側だけを参照します。カタログ単位で権限を分けられるため、「開発者はdevに書けるがprodには書けない」という統制が自然に実現します。
💼 例:dev→prod昇格の流れ
dev.rag.faq_botにバージョン5を登録し、オフライン評価(第5章)を実施prod.rag.faq_botに登録(prodへの書き込みはCI/CDのサービスプリンシパルのみ許可)prod.rag.faq_bot@challengerを付けて少量トラフィックで検証@championを付け替えて本番昇格✅ この節のまとめ
catalog.schema.model_nameの3レベル名で登録する。mlflow.set_registry_uri("databricks-uc") + mlflow.register_model()(またはログ時のregistered_model_name)。バージョンは自動採番。@champion/@challengerで本番・候補を表し、付け替えだけで切り替え・ロールバックできる。mlflow.pyfunc.load_model("models:/catalog.schema.name@champion")。問1. Unity Catalog統合のModel Registryにモデルを登録するとき、モデル名として正しい形式はどれか。
正解:C
UC配下のモデルはテーブルと同じ3レベル名「catalog.schema.model_name」をドット区切りで指定します。Aは単一名でありワークスペース版の旧レジストリの形式、Bはスラッシュ区切りで誤り、Dはロード時のURIの断片に似ていますが登録名の形式ではありません。
問2. あるチームは、旧ワークスペース版レジストリで「Staging」「Production」ステージを使ってモデルのライフサイクルを管理していた。Unity Catalog統合レジストリへ移行した場合、この役割を担う仕組みはどれか。
正解:B
UC統合レジストリでは固定ステージが廃止され、後継としてエイリアスを使います。エイリアスは特定バージョンへの可変の参照で、付け替えるだけで本番の実体を切り替えられます。Aのタグは検索・記録用のメタデータで参照の切り替え機能はなく、Cは履歴やリネージが分断されるアンチパターン、Dは事実に反します。
問3. 本番エンドポイントが参照しているRAGチェーンを、コード変更なしで新しいバージョンに切り替え、問題があれば即座に元へ戻せるようにしたい。最も適切な設計はどれか。
正解:B
エイリアス参照にしておけば、切り替えもロールバックも「エイリアスの付け替え」だけで完結し、参照側のコードは不変です。AとCはコード変更と再デプロイが必要で切り替え・復旧が遅くなります。Dのrun ID直接参照はレジストリのバージョン管理・ガバナンスを迂回するためアンチパターンです。
問4. モデルをUnity Catalogに登録することの利点として適切でないものはどれか。
正解:C
UC登録はガバナンス(アクセス制御・リネージ・監査・共有)のための仕組みであり、モデルの品質そのものを変えるものではありません(品質改善は第5章の評価・改善サイクルの領域です)。A・B・DはいずれもUC統合レジストリの正当な利点です。