第4章 アプリケーションの組み立てとデプロイ / 想定学習時間:30〜40分 / 最終確認:2026年8月

4-1. Unity Catalogへのモデル/チェーンの登録

🎯 この節の学習目標

1. なぜUnity Catalogに登録するのか

第3章までで、RAGチェーンやエージェントをMLflowでログする方法を学びました。ログしたモデルを本番デプロイにつなぐ次のステップが、Model Registryへの登録です。Databricksでは、MLflow Model RegistryはUnity Catalog(UC)との統合が標準になっており、モデルはテーブルや関数と同じガバナンス体系の中で管理されます。

UCに登録する利点は次の通りです。

📝 試験のポイント

試験では「Unity Catalogにモデルを登録する目的・利点」がそのまま問われます。キーワードは集中的なアクセス制御・リネージ・監査・環境間での共有です。「単にモデルを保存する場所」ではなく「ガバナンスの仕組みに載せること」が本質だと押さえてください。

2. 3レベル名での登録:catalog.schema.model_name

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モデルも、登録の作法は同じです。

3. エイリアスによるステージ管理:@champion / @challenger

従来のワークスペース版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での仕組みは?」→ エイリアスが答えです。また「本番モデルを無停止で新バージョンに切り替える最も簡単な方法は?」という問いでも、エイリアスの付け替えが正解の軸になります。

4. 登録済みモデルのロードと昇格フロー

登録済みモデルは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昇格の流れ

  1. 開発者がdev.rag.faq_botにバージョン5を登録し、オフライン評価(第5章)を実施
  2. 合格したらprod.rag.faq_botに登録(prodへの書き込みはCI/CDのサービスプリンシパルのみ許可)
  3. prod.rag.faq_bot@challengerを付けて少量トラフィックで検証
  4. 問題なければ@championを付け替えて本番昇格

✅ この節のまとめ

練習問題

問1. Unity Catalog統合のModel Registryにモデルを登録するとき、モデル名として正しい形式はどれか。

  1. support_rag_chain
  2. prod/genai_apps/support_rag_chain
  3. prod.genai_apps.support_rag_chain
  4. models:support_rag_chain@v1
解答と解説を見る

正解:C

UC配下のモデルはテーブルと同じ3レベル名「catalog.schema.model_name」をドット区切りで指定します。Aは単一名でありワークスペース版の旧レジストリの形式、Bはスラッシュ区切りで誤り、Dはロード時のURIの断片に似ていますが登録名の形式ではありません。

問2. あるチームは、旧ワークスペース版レジストリで「Staging」「Production」ステージを使ってモデルのライフサイクルを管理していた。Unity Catalog統合レジストリへ移行した場合、この役割を担う仕組みはどれか。

  1. タグ(tags)にstage=productionと記録する
  2. エイリアス(例:@champion、@challenger)を特定バージョンに付与する
  3. モデル名の末尾に_prodを付けて別モデルとして登録する
  4. UCでは全バージョンが自動的に本番扱いになる
解答と解説を見る

正解:B

UC統合レジストリでは固定ステージが廃止され、後継としてエイリアスを使います。エイリアスは特定バージョンへの可変の参照で、付け替えるだけで本番の実体を切り替えられます。Aのタグは検索・記録用のメタデータで参照の切り替え機能はなく、Cは履歴やリネージが分断されるアンチパターン、Dは事実に反します。

問3. 本番エンドポイントが参照しているRAGチェーンを、コード変更なしで新しいバージョンに切り替え、問題があれば即座に元へ戻せるようにしたい。最も適切な設計はどれか。

  1. 常に最新バージョン番号をハードコードし、切り替えのたびにコードを修正して再デプロイする
  2. 参照側は models:/catalog.schema.name@champion を使い、championエイリアスの付け先バージョンを付け替える
  3. 新バージョンを別名の新モデルとして登録し、参照先モデル名を書き換える
  4. MLflowのrun IDを直接参照する
解答と解説を見る

正解:B

エイリアス参照にしておけば、切り替えもロールバックも「エイリアスの付け替え」だけで完結し、参照側のコードは不変です。AとCはコード変更と再デプロイが必要で切り替え・復旧が遅くなります。Dのrun ID直接参照はレジストリのバージョン管理・ガバナンスを迂回するためアンチパターンです。

問4. モデルをUnity Catalogに登録することの利点として適切でないものはどれか。

  1. テーブルなどと共通のGRANT体系でモデルへのアクセス制御を一元管理できる
  2. モデルの生成元データやノートブックへのリネージを追跡できる
  3. 登録するだけでモデルの応答品質が自動的に向上する
  4. 複数ワークスペースから同じ登録モデルを参照・共有できる
解答と解説を見る

正解:C

UC登録はガバナンス(アクセス制御・リネージ・監査・共有)のための仕組みであり、モデルの品質そのものを変えるものではありません(品質改善は第5章の評価・改善サイクルの領域です)。A・B・DはいずれもUC統合レジストリの正当な利点です。