Unity Catalogでモデルのライフサイクルを管理する

重要

この記事では、機械学習ワークフローの一環としてUnity Catalogのモデルを使用し、MLモデルのライフサイクル全体を管理する方法について説明します。Databricksは、Unity CatalogでMLflow Model Registryのホストされたバージョンを提供しています。Unity Catalogのモデルを使用すると、ワークスペース間での一元的なアクセス制御、監査、リネージ、モデルディスカバリーなど、Unity Catalogの利点をMLモデルに拡張できます。Unity Catalogのモデルは、オープンソースのMLflow Pythonクライアントと互換性があります。

Unity Catalogのモデルの主な機能は以下のとおりです。

  • モデルの名前空間とガバナンスにより、環境、プロジェクト、またはチームレベルでモデルをグループ化して管理できます (「データサイエンティストに本番モデルへの読み取り専用アクセスを許可する」)。

  • 時系列のモデルリネージ(どのMLflowのエクスペリメントとランによって、ある時点のモデルが生成されたか)。

  • モデルサービング

  • モデルのバージョン管理。

  • エイリアスを使用したモデルのデプロイ。たとえば、prodカタログ内のモデルの「チャンピオン」バージョンをマークします。

ワークスペースの デフォルト カタログ が Unity Catalog のカタログに構成されている場合、mlflow.<model-type>.log_model(..., registered_model_name)mlflow.register_model(model_uri, name) などの MLflow APIs を使用して登録されたモデルは、デフォルトによって Unity Catalog に登録されます。

この記事には、Unity CatalogのUIとAPIの両方のモデルに関する手順が含まれています。

Model Registry概念の概要については、「MLflow を使用した機械学習ライフサイクル管理」を参照してください。

要件

  1. ワークスペースでUnity Catalog を有効にする必要があります。「 Unity Catalogを使用して Unity Catalog メタストアを作成し、ワークスペースで有効にして、カタログを作成する」を参照してください。Unity Catalog が有効になっていない場合でも、クラシック ワークスペース モデルレジストリを使用できます。

  2. ワークスペースが、権限の継承をサポートするUnity Catalogメタストアにアタッチされている必要があります。2022年8月25日以降に作成されたすべてのメタストアは、これを満たしています。古いメタストアで実行している場合は、こちらのドキュメントに従ってアップグレードしてください。

  3. Unity Catalog にアクセスできるクラスターでコマンドを実行するには、アクセス権が必要です。

  4. 新しい登録済みモデルを作成するには、スキーマとその囲みカタログに対する USE SCHEMA および USE CATALOG 権限に加えて、スキーマに対する CREATE_MODEL 権限が必要です。CREATE_MODEL は、次に示すように、カタログ エクスプローラー UI または SQL GRANT コマンドを使用して付与できる新しいスキーマ レベルの特権です。

    GRANT CREATE_MODEL ON SCHEMA <schema-name> TO <principal>
    

トレーニングワークロードをUnity Catalogにアップグレードする

このセクションには、既存のトレーニングワークロードをUnity Catalogにアップグレードする手順が含まれています。

MLflow Pythonクライアントをインストールする

Databricks Runtime 13.2 ML以降には、Unity Catalogのモデルのサポートが含まれています。

以下のコードを使用して最新バージョンのMLflow Pythonクライアントをノートブックにインストールすることで、Databricks Runtime 11.3 LTS以降でUnity Catalogのモデルを使用することもできます。

%pip install --upgrade "mlflow-skinny[databricks]"
dbutils.library.restartPython()

Unity Catalog内のモデルにアクセスできるようにMLflowクライアントを構成する

デフォルトでは、MLflow PythonクライアントはDatabricksワークスペースのモデルレジストリにモデルを作成します。Unity Catalogのモデルにアップグレードするには、MLflowクライアントを以下のように構成します。

import mlflow
mlflow.set_registry_uri("databricks-uc")

ワークスペースの デフォルト カタログ が ( hive_metastoreではなく) Unity Catalog にあり、Databricks Runtime 13.3 LTS 以降を使用してクラスターを実行している場合、モデルはデフォルト カタログに自動的に作成され、既定のカタログから読み込まれるため、構成は必要ありません。 他の Databricks Runtime バージョンの動作に変更はありません。 デフォルト カタログが 2024 年 1 月より前に Unity Catalog のカタログに構成され、ワークスペース モデル レジストリが 2024 年 1 月より前に使用されていた少数のワークスペースは、この動作から除外されます。

Unity Catalog互換モデルのトレーニングと登録

必要な権限:新しい登録済みモデルを作成するには、それを含むスキーマに対するCREATE_MODEL権限とUSE SCHEMA権限、それを含むカタログに対するUSE CATALOG権限が必要です。登録済みモデルの下に新しいモデルバージョンを作成するには、登録済みモデルの所有者である必要があり、モデルを含むスキーマとカタログに対するUSE SCHEMA権限とUSE CATALOG権限が必要です。

UCのMLモデルバージョンにはモデル署名が必要です。モデルトレーニングワークロードで署名付きのMLflowモデルをまだロギングしていない場合は、以下のいずれかを行うことができます。

  • Databricks の自動ログ記録を使用すると、多くの一般的な機械学習フレームワークの署名を使用して自動的に記録済みモデルが作成されます。サポートされているフレームワークについては、 MLflow のドキュメントを参照してください。

  • MLflow 2.5.0以降では、mlflow.<flavor>.log_modelコールで入力例を指定でき、モデル署名が自動的に推論されます。詳細については、 MLflowドキュメントを参照してください。

次に、モデルの 3 レベル名を <catalog>.<schema>.<model> の形式で MLflow APIsに渡します。

このセクションの例では、 prod カタログの下の ml_team スキーマでモデルを作成し、アクセスします。

本節のモデル学習例では、新しいモデルバージョンを作成し、 prod カタログに登録します。 prodカタログを使用しても、必ずしもモデル バージョンが本番運用トラフィックを処理するとは限りません。モデル バージョンを囲むカタログ、スキーマ、および登録済みモデルには、その環境 (prod) と関連するガバナンス ルール (たとえば、管理者のみが prod カタログから削除できるように特権を設定できます) が反映されますが、デプロイ ステータスは反映されません。 デプロイの状態を管理するには、 モデル エイリアスを使用します。

自動ロギングを使用してモデルをUnity Catalogに登録する

from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier

# Train a sklearn model on the iris dataset
X, y = datasets.load_iris(return_X_y=True, as_frame=True)
clf = RandomForestClassifier(max_depth=7)
clf.fit(X, y)

# Note that the UC model name follows the pattern
# <catalog_name>.<schema_name>.<model_name>, corresponding to
# the catalog, schema, and registered model name
# in Unity Catalog under which to create the version
# The registered model will be created if it doesn't already exist
autolog_run = mlflow.last_active_run()
model_uri = "runs:/{}/model".format(autolog_run.info.run_id)
mlflow.register_model(model_uri, "prod.ml_team.iris_model")

自動的に推論された署名を使用してモデルをUnity Catalogに登録する

自動的に推論された署名のサポートは、MLflowバージョン2.5.0以降で使用でき、 Databricks Runtime 11.3 LTS ML以降でサポートされています。自動的に推論された署名を使用するには、以下のコードを使用して、最新のMLflow Pythonクライアントをノートブックにインストールします。

%pip install --upgrade "mlflow-skinny[databricks]"
dbutils.library.restartPython()

以下のコードは、自動的に推論される署名の例を示しています。

from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier

with mlflow.start_run():
    # Train a sklearn model on the iris dataset
    X, y = datasets.load_iris(return_X_y=True, as_frame=True)
    clf = RandomForestClassifier(max_depth=7)
    clf.fit(X, y)
    # Take the first row of the training dataset as the model input example.
    input_example = X.iloc[[0]]
    # Log the model and register it as a new version in UC.
    mlflow.sklearn.log_model(
        sk_model=clf,
        artifact_path="model",
        # The signature is automatically inferred from the input example and its predicted output.
        input_example=input_example,
        registered_model_name="prod.ml_team.iris_model",
    )

Unity Catalog内のモデルのデータリネージを追跡する

Unity Catalogでのテーブルからモデルへのリネージのサポートは、MLflow 2.11.0 以降で利用できます。

Unity Catalogのテーブルでモデルをトレーニングする場合、モデルがトレーニングおよび評価された上流のデータセットへのモデルのリネージを追跡できます。 これを行うには、 mlflow.log_input を使用します。 これにより、モデルを生成した MLflow 実行とともに入力テーブル情報が保存されます。 データ リネージはFeature Store APIsを使用してログに記録されたモデルについても自動的にキャプチャされます。 Feature Storeリネージの表示」を参照してください。

モデルをUnity Catalog に登録すると、リネージ情報が自動的に保存され、 カタログ エクスプローラーのモデル バージョン UI の リネージタブ に表示されます。

次のコードは、その例を示しています。

import mlflow
import pandas as pd
import pyspark.pandas as ps
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestRegressor

# Write a table to Unity Catalog
iris = load_iris()
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
iris_df.rename(
  columns = {
    'sepal length (cm)':'sepal_length',
    'sepal width (cm)':'sepal_width',
    'petal length (cm)':'petal_length',
    'petal width (cm)':'petal_width'},
  inplace = True
)
iris_df['species'] = iris.target
ps.from_pandas(iris_df).to_table("prod.ml_team.iris", mode="overwrite")

# Load a Unity Catalog table, train a model, and log the input table
dataset = mlflow.data.load_delta(table_name="prod.ml_team.iris", version="0")
pd_df = dataset.df.toPandas()
X = pd_df.drop("species", axis=1)
y = pd_df["species"]
with mlflow.start_run():
    clf = RandomForestRegressor(n_estimators=100)
    clf.fit(X, y)
    mlflow.log_input(dataset, "training")

UIでモデルを表示する

必要な権限:登録されたモデルとそのモデルのバージョンをUIで表示するには、登録されたモデルに対するEXECUTE権限と、そのモデルを含むスキーマとカタログに対するUSE SCHEMA権限とUSE CATALOG権限が必要です。

カタログ エクスプローラーを使用して、Unity Catalog で登録済みのモデルとモデル バージョンを表示および管理できます。

モデルへのアクセスを制御する

Unity Catalogに登録されているモデルへのアクセスの制御に関する情報については、「 Unity Catalog 権限とセキュリティ保護可能なオブジェクト」を参照してください。カタログとスキーマ間でモデルを整理するためのベスト プラクティスについては、「 データの整理」をご参照ください。

モデルのアクセス許可は、 付与 REST API を使用してプログラムで構成できます。 モデルのアクセス許可を構成する場合は、REST API 要求で securable_type"FUNCTION" に設定します。 たとえば、 PATCH /api/2.1/unity-catalog/permissions/function/{full_name} を使用して、登録されているモデルのアクセス許可を更新します。

エイリアスとタグ を使用したモデルのデプロイと整理

モデル エイリアスとタグは、 Unity Catalogでモデルを整理および管理するのに役立ちます。

モデル エイリアスを使用すると、登録済みモデルの特定のバージョンに変更可能な名前付き参照を割り当てることができます。 エイリアスを使用して、モデルバージョンのデプロイステータスを示すことができます。 たとえば、現在本番運用にあるモデルバージョンに「チャンピオン」エイリアスを割り当て、本番運用モデルを使用するワークロードでこのエイリアスをターゲットにすることができます。 その後、"Champion" エイリアスを別のモデル バージョンに再割り当てすることで、本番運用モデルを更新できます。

タグ は、登録済みモデルおよびモデルバージョンに関連付けるキーと値のペアであり、機能またはステータス別にラベル付けおよび分類できます。 たとえば、キー "task" と値 "question-answering" (UI では task:question-answeringと表示される) を含むタグを、質問応答タスク用の登録済みモデルに適用できます。 モデル バージョン レベルでは、 validation_status:pending を使用して配置前の検証を受けているバージョンと、 validation_status:approvedを使用して配置がクリアされたバージョンにタグを付けることができます。

エイリアスとタグの使用方法については、以下のセクションを参照してください。

モデルの エイリアスの設定と削除

必要な権限:登録されたモデルの所有者である必要があり、そのモデルを含むスキーマとカタログに対するUSE SCHEMA権限とUSE CATALOG権限が必要です。

Unity Catalog のモデルのエイリアスは、 カタログ エクスプローラーを使用して設定、更新、削除できます。 モデルの詳細ページで登録済みモデル全体のエイリアスを管理し、モデルバージョンの詳細ページで特定のモデルバージョンのエイリアスを設定できます。

MLflow クライアント API を使用してエイリアスを設定、更新、削除するには、以下の例を参照してください。

from mlflow import MlflowClient
client = MlflowClient()

# create "Champion" alias for version 1 of model "prod.ml_team.iris_model"
client.set_registered_model_alias("prod.ml_team.iris_model", "Champion", 1)

# reassign the "Champion" alias to version 2
client.set_registered_model_alias("prod.ml_team.iris_model", "Champion", 2)

# get a model version by alias
client.get_model_version_by_alias("prod.ml_team.iris_model", "Champion")

# delete the alias
client.delete_registered_model_alias("prod.ml_team.iris_model", "Champion")

モデルの タグの設定と削除

必要な権限: 登録済みモデルの所有者であるか、登録済みモデルに対する APPLY_TAG 権限に加えて、モデルを含むスキーマおよびカタログに対する USE SCHEMA および USE CATALOG 権限を持っている。

UIを使用してタグを設定および削除する方法については、「 カタログエクスプローラでのタグの管理 」を参照してください。

MLflow クライアント API を使用してタグを設定および削除するには、以下の例を参照してください。

from mlflow import MlflowClient
client = MlflowClient()

# Set registered model tag
client.set_registered_model_tag("prod.ml_team.iris_model", "task", "classification")

# Delete registered model tag
client.delete_registered_model_tag("prod.ml_team.iris_model", "task")

# Set model version tag
client.set_model_version_tag("prod.ml_team.iris_model", "1", "validation_status", "approved")

# Delete model version tag
client.delete_model_version_tag("prod.ml_team.iris_model", "1", "validation_status")

登録済みのモデルタグとモデルバージョンタグの両方 が、プラットフォーム全体の制約を満たす必要があります。

エイリアスとタグ クライアント APIsの詳細については、 MLflow API のドキュメントを参照してください。

推論用のモデルを読み込む

推論ワークロードでエイリアスを指定してモデルバージョンを使用する

必要な権限: 登録済みモデルに対する EXECUTE 権限に加えて、モデルを含むスキーマおよびカタログに対する USE SCHEMA および USE CATALOG 権限。

エイリアスでモデルバージョンを参照するバッチ推論ワークロードを作成できます。たとえば、以下のスニペットは、バッチ推論用の「チャンピオン」モデルバージョンを読み込んで適用します。「チャンピオン」バージョンが新しいモデルバージョンを参照するように更新された場合、バッチ推論ワークロードでは次回の実行時に自動的にそれが選択されます。これにより、モデルのデプロイをバッチ推論ワークロードから切り離すことができます。

import mlflow.pyfunc
model_version_uri = "models:/prod.ml_team.iris_model@Champion"
champion_version = mlflow.pyfunc.load_model(model_version_uri)
champion_version.predict(test_x)

また、モデル サービング REST API を使用して、エイリアス別にモデル バージョンを取得し、そのバージョンを提供するようにモデル サービス エンドポイントを更新するデプロイ ワークフローを記述することもできます。

import mlflow
import requests
client = mlflow.tracking.MlflowClient()
champion_version = client.get_model_version_by_alias("prod.ml_team.iris_model", "Champion")
# Invoke the model serving REST API to update endpoint to serve the current "Champion" version
model_name = champion_version.name
model_version = champion_version.version
requests.request(...)

推論ワークロードでバージョン番号を指定してモデルのバージョンを使用する

バージョン番号を指定してモデルのバージョンを読み込むこともできます。

import mlflow.pyfunc
# Load version 1 of the model "prod.ml_team.iris_model"
model_version_uri = "models:/prod.ml_team.iris_model/1"
first_version = mlflow.pyfunc.load_model(model_version_uri)
first_version.predict(test_x)

ワークスペース間でモデルを共有する

同じリージョンのユーザーとモデルを共有する

適切な権限を持っている限り、モデルを含むメタストアに接続されている任意のワークスペースからUnity Catalog内のモデルにアクセスできます。 たとえば、開発ワークスペースのprodカタログからモデルにアクセスすると、新しく開発されたモデルと本番運用ベースラインの比較が容易になります。

作成した登録済みモデルで他のユーザーと共同作業(書き込み権限を共有)するには、自分自身と共同作業したいユーザーが含まれるグループにモデルの所有権を付与する必要があります。共同作業者には、モデルを含むカタログとスキーマに対するUSE CATALOG権限とUSE SCHEMA権限も必要があります。詳細については、「Unity Catalog権限とセキュリティ保護可能なオブジェクト」を参照してください。

別のリージョンまたはアカウントのユーザーとモデルを共有する

他の地域のユーザーまたはアカウントとモデルを共有するには、 Delta Sharing Databricks間共有Databricksを使用します。 「共有へのモデルの追加(プロバイダーの場合)」およびDatabricks Databricksモデルでのアクセスの取得(受信者の場合)」を参照してください。 受信者は、共有からカタログを作成した後、 Unity Catalog内の他のモデルと同じ方法で、その共有カタログ内のモデルにアクセスします。

モデルまたはモデルバージョンにアノテーションを付ける

必要な権限:登録されたモデルの所有者である必要があり、そのモデルを含むスキーマとカタログに対するUSE SCHEMA権限とUSE CATALOG権限が必要です。

アノテーションによって、モデルまたはモデルのバージョンに関する情報を提供できます。たとえば、問題の概要や、使用された方法論およびアルゴリズムに関する情報を含めることができます。

UIを使用してモデルまたはモデルバージョンにアノテーションを付ける

カタログエクスプローラでマークダウンコメントを使用してデータをドキュメント化する」を参照してください。

APIを使用してモデルまたはモデルバージョンにアノテーションを付ける

登録されたモデルの説明を更新するには、MLflowクライアントAPIのupdate_registered_model()メソッドを使用します。

client = MlflowClient()
client.update_registered_model(
  name="<model-name>",
  description="<description>"
)

モデルバージョンの説明を更新するには、MLflowクライアントAPIのupdate_model_version()メソッドを使用します。

client = MlflowClient()
client.update_model_version(
  name="<model-name>",
  version=<model-version>,
  description="<description>"
)

モデルの名前を変更する(APIのみ)

権限が必要:登録されたモデルの所有者である必要があり、登録されたモデルを含むスキーマのCREATE_MODEL権限、モデルを含むスキーマとカタログのUSE SCHEMA権限とUSE CATALOG権限が必要です。

登録されたモデルの名前を変更するには、MLflowクライアントAPIのrename_registered_model()メソッドを使用します。

client=MlflowClient()
client.rename_registered_model("<model-name>", "<new-model-name>")

モデルまたはモデルバージョンを削除する

必要な権限:登録されたモデルの所有者である必要があり、そのモデルを含むスキーマとカタログに対するUSE SCHEMA権限とUSE CATALOG権限が必要です。

登録済みモデルまたは登録済みモデル内のモデルバージョンは、 カタログエクスプローラ UI または API を使用して削除できます。

APIを使用してモデルバージョンまたはモデルを削除する

警告

この操作は元に戻せません。モデルを削除すると、Unity Catalogによって保存されたすべてのモデルアーティファクトと、登録されたモデルに関連付けられているすべてのメタデータが削除されます。

モデルバージョンを削除する

モデルバージョンを削除するには、MLflowクライアントAPIのdelete_model_version()メソッドを使用します。

# Delete versions 1,2, and 3 of the model
client = MlflowClient()
versions=[1, 2, 3]
for version in versions:
  client.delete_model_version(name="<model-name>", version=version)

モデルを削除する

モデルを削除するには、MLflowクライアントAPIのdelete_registered_model()メソッドを使用します。

client = MlflowClient()
client.delete_registered_model(name="<model-name>")

モデルの一覧表示と検索

MLflowのsearch_registered_models() Python APIを使用すると、Unity Catalogに登録されているモデルを一覧表示できます。

client=MlflowClient()
client.search_registered_models()

search_model_versions()メソッドを使用して、特定のモデル名を検索し、そのバージョンの詳細を一覧表示することもできます。

from pprint import pprint

client=MlflowClient()
[pprint(mv) for mv in client.search_model_versions("name='<model-name>'")]

この例では、Unity Catalogのモデルを使用して機械学習アプリケーションを構築する方法を示します。

Unity Catalogのモデルの例

ワークフローとモデルをUnity Catalogに移行する

Databricks では、ガバナンスの向上、ワークスペースや環境間での簡単な共有、より柔軟な MLOps ワークフローのために、Unity Catalog のモデルを使用することを推奨しています。 この表は、 Workspace Model Registry と Unity Catalog の機能を比較したものです。

Workspace Model Registry (レガシー)

Unity Catalog のモデル (推奨)

名前付きエイリアスによるモデルバージョンの参照

Model Registry ステージ: モデル バージョンを 4 つの固定ステージのいずれかに移動して、そのステージで参照します。 ステージの名前変更や追加はできません。

Model Registry エイリアス: 登録されたモデルごとに、モデル バージョンへのカスタムおよび再割り当て可能な名前付き参照を最大 10 個作成します。

モデルのアクセス制御された環境を作成する

Model Registry ステージ: 1 つの登録済みモデル内のステージを使用して、そのモデル バージョンの環境を示し、4 つの固定ステージ (StagingProduction) のうち 2 つのみに対するアクセス制御を行います。

登録済みモデル: MLOps ワークフローの環境ごとに登録済みモデルを作成し、Unity Catalog の 3 レベルの名前空間とアクセス許可を利用してガバナンスを表現します。

環境間でのモデルの昇格 (モデルのデプロイ)

transition_model_version_stage() MLflow クライアント API を使用してモデル バージョンを別のステージに移動すると、前のステージを参照するワークフローが中断される可能性があります。

copy_model_version() MLflow クライアント API を使用して、登録されているモデルから別のモデルにモデル バージョンをコピーします。

ワークスペース間でのモデルへのアクセスと共有

ワークスペース間でモデルを手動でエクスポートおよびインポートするか、personal アクセストークンとワークスペース シークレットスコープを使用してリモート モデル レジストリへの接続を構成します。

同じアカウント内のワークスペース間でモデルにすぐにアクセスできます。 設定は必要ありません。

アクセス許可の構成

ワークスペース レベルでアクセス許可を設定します。

アカウント レベルでアクセス許可を設定し、ワークスペース全体に一貫したガバナンスを適用します。

Databricks マークプレースでモデルにアクセスする

使用禁止。

Databricks Marketplace から Unity Catalog メタストアにモデルを読み込み、ワークスペース間でアクセスします。

以下にリンクされている記事では、ワークフロー (モデル トレーニングとバッチ推論ジョブ) とモデルを Workspace Model Registry から Unity Catalog に移行する方法について説明します。

Unity Catalog サポート の制限

  • ステージは、Unity Catalog のモデルではサポートされていません。 Databricks では、Unity Catalog の 3 レベルの名前空間を使用してモデルが存在する環境を表現し、エイリアスを使用してデプロイするモデルを昇格させることをお勧めします。 詳細については 、アップグレードガイド を参照してください。

  • Webhook は、Unity Catalog のモデルではサポートされていません。 アップグレードガイドの推奨代替案を参照してください。

  • Unity Catalog のモデルでは、一部の検索 API フィールドと演算子がサポートされていません。これは、サポートされているフィルタを使用して検索 API を呼び出し、結果をスキャンすることで軽減できます。以下にいくつかの例を示します。

    • search_model_versions または search_registered_models クライアント API では、order_by パラメーターがサポートされていません。

    • search_model_versions または search_registered_models では、タグベースのフィルター(tags.mykey = 'myvalue')がサポートされていません。

    • search_model_versions または search_registered_models では、完全等価以外の演算子(例:LIKEILIKE!=)がサポートされていません。

    • 名前による登録済みモデルの検索(例:MlflowClient().search_registered_models(filter_string="name='main.default.mymodel'"))はサポートされていません。特定の登録済みモデルを名前で取得するには、get_registered_model を使用します。

  • Unity Catalog では、登録されているモデルおよびモデルバージョンに関する E メール通知とコメントディスカッションスレッドがサポートされていません。

  • アクティビティ ログは、Unity Catalog のモデルではサポートされていません。 ただし、 監査ログを使用して Unity Catalog のモデルでのアクティビティを追跡できます。

  • search_registered_models Delta Sharingを通じて共有されたモデルに対して古い結果が返される可能性があります。 最新の結果を確認するには、Databricks CLI またはSDKを使用してスキーマ内のモデルを一覧表示します。