メインコンテンツまでスキップ

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

重要

Databricks では、 Unity Catalog のモデル を使用して、ワークスペース間でモデルを共有することをお勧めします。 この記事のアプローチは非推奨です。

Databricks は、複数のワークスペース間でのモデルの共有をサポートしています。 たとえば、開発ワークスペースでモデルを開発してログに記録し、別の本番運用ワークスペースでモデルにアクセスしてモデルと比較できます。 これは、複数のチームがモデルへのアクセスを共有する場合や、組織に開発のさまざまな段階を処理するための複数のワークスペースがある場合に便利です。 ワークスペース間のモデル開発とデプロイの場合、Databricks では、モデル トレーニング コードを複数の環境にデプロイする デプロイ コード アプローチをお勧めします。

マルチワークスペースの状況では、リモート モデルレジストリを使用して、 Databricks ワークスペース間でモデルにアクセスできます。 たとえば、 データサイエンティスト 読み取り専用アクセスで本番運用モデルレジストリにアクセスして、開発中のモデルを現在の本番運用モデルと比較できます。 マルチワークスペースのセットアップ例を以下に示します。

複数のワークスペース

リモートレジストリへのアクセスは、トークンによって制御されます。 アクセスが必要な各ユーザーまたはスクリプトは、リモートレジストリに 個人用アクセストークンを作成し 、そのトークンをローカルワークスペースの シークレットマネージャーにコピーします 。 リモート レジストリ ワークスペースに送信される各 API 要求には、アクセス トークンが含まれている必要があります。 MLflow は、モデルレジストリ操作を実行するときに使用するシークレットを指定する簡単なメカニズムを提供します。

注記

自動化されたツール、システム、スクリプト、アプリで認証する際のセキュリティのベストプラクティスとして、Databricks では OAuth トークンを使用することをお勧めします。

パーソナルアクセストークン認証 を使用する場合、 Databricks では、ワークスペース ユーザーではなく 、サービスプリンシパル に属する パーソナルアクセストークン を使用することをお勧めします。 サービスプリンシパルのトークンを作成するには、「 サービスプリンシパルのトークンの管理」を参照してください。

モデルレジストリのすべての クライアント メソッドと fluent API メソッドは、リモートワークスペースでサポートされています。

必要条件​

ワークスペース間でモデルレジストリを使用するには、リリース1.11.0以降の MLflow Python クライアントが必要です。

注記

このワークフローは、MLflow クライアントのロジックから実装されます。 クライアントを実行している環境が、リモート モデルレジストリを含む Databricks ワークスペースに対してネットワーク要求を行うためのアクセス権を持っていることを確認します。 レジストリ ワークスペースに課せられる一般的な制限は IP 許可リストであり、これにより、別のワークスペースのクラスターで実行されている MLflow クライアントからの接続を禁止できます。

リモートレジストリの API トークンを設定する​

  1. モデルレジストリ ワークスペースで、 アクセス トークンを作成します。
  2. ローカル ワークスペースで、アクセス トークンとリモート ワークスペース情報を格納するシークレットを作成します。
    1. シークレットスコープを作成します: databricks secrets create-scope <scope>。
    2. ターゲット ワークスペースの一意の名前を選択します (ここでは <prefix>と表示されます)。 次に、次の 3 つのシークレットを作成します。
      • databricks secrets put-secret <scope> <prefix>-host : モデルレジストリ ワークスペースのホスト名を入力します。 たとえば、 https://cust-success.cloud.databricks.com/.
      • databricks secrets put-secret <scope> <prefix>-token : モデルレジストリ ワークスペースからアクセス トークンを入力します。
      • databricks secrets put-secret <scope> <prefix>-workspace-id : 任意のページの URL にある モデルレジストリ ワークスペースのワークスペース ID を入力します。
注記

ワークスペースあたりのシークレットスコープの数には制限 があるため、シークレットスコープ を他のユーザーと共有したい場合があります。

リモートレジストリの指定​

リモートレジストリワークスペース用に作成したシークレットスコープと名前プレフィックスに基づいて、次の形式のレジストリURIを構築できます。

Python
registry_uri = f'databricks://<scope>:<prefix>'

URI を使用して fluent API メソッド のリモート レジストリを指定するには、最初に次を呼び出します。

Python
mlflow.set_registry_uri(registry_uri)

または、 MlflowClientをインスタンス化するときに明示的に指定することもできます。

Python
client = MlflowClient(registry_uri=registry_uri)

次のワークフローは、両方のアプローチの例を示しています。

リモートレジストリにモデルを登録する​

モデルを登録する方法の 1 つは、 mlflow.register_model API を使用することです。

Python
mlflow.set_registry_uri(registry_uri)
mlflow.register_model(model_uri=f'runs:/<run-id>/<artifact-path>', name=model_name)

他のモデル登録方法の例は、このページの最後にあるノートブックにあります。

注記

リモートワークスペースにモデルを登録すると、DBFS のモデルアーティファクトの一時的なコピーがリモートワークスペースに作成されます。 モデルバージョンが READY ステータスになったら、このコピーを削除することができます。 一時ファイルは /dbfs/databricks/mlflow/tmp-external-source/<run-id> フォルダの下にあります。

また、registry_uriと同様の方法で、別のワークスペース内の MLflow 追跡サービスを指すようにtracking_uriを指定することもできます。つまり、リモート ワークスペースで実行を行い、そのモデルを現在のリモート ワークスペースまたは別のリモート ワークスペースに登録することができます。

リモートレジストリのモデルを使用する​

リモートレジストリのモデルバージョンを読み込んで使用するには、最初にレジストリURIを設定する mlflow.<flavor>.load_model 方法を使用します。

Python
mlflow.set_registry_uri(registry_uri)
model = mlflow.pyfunc.load_model(f'models:/<model-name>/Staging')
model.predict(...)

または、 models:/ URI でリモート レジストリを明示的に指定することもできます。

Python
model = mlflow.pyfunc.load_model(f'models://<scope>:<prefix>@databricks/<model-name>/Staging')
model.predict(...)

モデルファイルにアクセスするための他のヘルパーメソッドもサポートされています。

Python
client.get_latest_versions(model_name)
client.get_model_version_download_uri(model_name, version)

リモートレジストリでモデルを管理します​

必要な権限がある限り、リモートレジストリ内のモデルに対して任意のアクションを実行できます。 たとえば、モデルに対する CAN MANAGE 権限がある場合は、次の方法を使用してモデル バージョン ステージを移行したり、モデルを削除したりできます MlflowClient 。

Python
client = MlflowClient(tracking_uri=None, registry_uri=registry_uri)
client.transition_model_version_stage(model_name, version, 'Archived')
client.delete_registered_model(model_name)

ノートブック example: Remote モデルレジストリ​

次のノートブックは、Unity Catalog が有効になっていないワークスペースに適用されます。 現在のワークスペースから MLflow トラッキングサーバーにモデルを記録済みにし、別のワークスペースの Model Registry にモデルを登録する方法を示している。 Databricks では、 Unity Catalog のモデル を使用して、ワークスペース間でモデルを共有することをお勧めします。

Remote Model Registry example ノートブック