Aller au contenu principal

Partager des modèles entre les workspaces

important

Databricks recommande d'utiliser les Modèles dans Unity Catalog pour partager des modèles entre les Workspace. L'approche de cet article est obsolète.

Databricks prend en charge le partage de modèles entre plusieurs workspaces. Par exemple, vous pouvez développer et enregistrer un modèle dans un Workspace de développement, puis y accéder et le comparer à des modèles dans un Workspace de production distinct. Ceci est utile lorsque plusieurs équipes partagent l'accès aux modèles ou lorsque votre organisation possède plusieurs workspaces pour gérer les différentes étapes de développement. Pour le développement et le déploiement de modèles multi-Workspace, Databricks recommande l'approche de déploiement de code, où le code d'entraînement des modèles est déployé sur plusieurs environnements.

Dans les situations multi-Workspace, vous pouvez accéder aux modèles à travers les Workspaces Databricks en utilisant un registre de modèles distant. Par exemple, les data scientists pourraient accéder au registre des modèles de production avec un accès en lecture seule pour comparer leurs modèles en développement aux modèles de production actuels. Un exemple de configuration multi-workspace est présenté ci-dessous.

Plusieurs Workspace

L'accès à un registre distant est contrôlé par des jetons. Chaque utilisateur ou script qui a besoin d'accéder crée un jeton d'accès personnel dans le registre distant et copie ce jeton dans le gestionnaire de secrets de son Workspace local. Chaque requête API envoyée au workspace du registre distant doit inclure le jeton d'accès ; MLflow fournit un mécanisme simple pour spécifier les secrets à utiliser lors de l'exécution des opérations du registre de modèles.

remarque

En tant que bonne pratique de sécurité lorsque vous vous authentifiez avec des outils, des systèmes, des scripts et des applications automatisés, Databricks vous recommande d'utiliser des jetons OAuth.

Si vous utilisez l'authentification par jeton d'accès personnel, Databricks recommande d'utiliser des jetons d'accès personnels appartenant aux Service Principal plutôt qu'aux utilisateurs du Workspace. Pour créer des jetons pour les Service Principals, consultez Gérer les jetons pour un Service Principal.

Toutes les méthodes d'API client et d'API fluent pour le registre de modèles sont prises en charge pour les workspaces distants.

Exigences

L'utilisation d'un registre de modèles sur plusieurs Workspace nécessite le client MLflow Python, version 1.11.0 ou supérieure.

remarque

Ce workflow est implémenté à partir de la logique du client MLflow. Veillez à ce que l'environnement exécutant le client ait accès pour effectuer des requêtes réseau auprès du Workspace Databricks contenant le registre de modèles distant. Une restriction courante appliquée au workspace du registre est une liste d'autorisation d'adresses IP, qui peut empêcher les connexions des clients MLflow exécutés dans un cluster d'un autre workspace.

Configurez le jeton API pour un registre distant

  1. Dans le workspace du registre de modèles, créez un jeton d'accès.
  2. Dans le Workspace local, créez des secrets pour stocker le jeton d'accès et les informations du Workspace distant :
    1. Créer un Secret Scope : databricks secrets create-scope <scope>.
    2. Choisissez un nom unique pour le Workspace cible, présenté ici comme <prefix>. Puis créez trois secrets :
      • databricks secrets put-secret <scope> <prefix>-host : Saisissez le Hostname du Workspace de registre de modèles. Par exemple, https://cust-success.cloud.databricks.com/.
      • databricks secrets put-secret <scope> <prefix>-token : Saisissez le jeton d'accès du workspace de registre de modèles.
      • databricks secrets put-secret <scope> <prefix>-workspace-id : Saisissez l'ID du Workspace pour le Workspace du registre de modèles qui peut être trouvé dans l'URL de n'importe quelle page.
remarque

Vous souhaiterez peut-être partager le Secret Scope avec d'autres utilisateurs, car il existe une limite sur le nombre de Secret Scopes par Workspace.

Spécifiez un registre distant

Basé sur le Secret Scope et le préfixe de nom que vous avez créés pour le Workspace de registre distant, vous pouvez construire un URI de registre de la forme :

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

Vous pouvez utiliser l'URI pour spécifier un registre distant pour les méthodes API fluides en appelant d'abord :

Python
mlflow.set_registry_uri(registry_uri)

Ou, vous pouvez le spécifier explicitement lorsque vous instanciez un MlflowClient:

Python
client = MlflowClient(registry_uri=registry_uri)

Les workflows suivants montrent des exemples des deux approches.

Enregistrer un modèle dans le registre distant

Une façon d'enregistrer un modèle est d'utiliser l'API mlflow.register_model :

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

Des exemples d'autres méthodes d'enregistrement de modèle peuvent être consultés dans le Notebook à la fin de cette page.

remarque

L’enregistrement d’un modèle dans un workspace distant crée une copie temporaire des artefacts du modèle dans DBFS dans le workspace distant. Vous souhaiterez peut-être supprimer cette copie une fois que la version du modèle sera au statut READY. Les fichiers temporaires peuvent être trouvés dans le dossier /dbfs/databricks/mlflow/tmp-external-source/<run-id>.

Vous pouvez également spécifier un tracking_uri pour pointer vers un service MLflow Tracking dans un autre workspace d'une manière similaire à registry_uri. Cela signifie que vous pouvez exécuter une tâche sur un workspace distant et enregistrer son modèle dans le workspace actuel ou un autre workspace distant.

Utiliser un modèle du registre distant

Vous pouvez charger et utiliser une version de modèle dans un registre distant avec les méthodes mlflow.<flavor>.load_model en définissant d'abord l'URI du registre :

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

Ou, vous pouvez spécifier explicitement le registre distant dans l'URI models:/ :

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

D'autres méthodes auxiliaires pour accéder aux fichiers du modèle sont également prises en charge, telles que :

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

Gérer un modèle dans le registre distant

Vous pouvez effectuer n'importe quelle action sur les modèles du registre distant tant que vous disposez des autorisations requises. Par exemple, si vous disposez des autorisations CAN MANAGE sur un modèle, vous pouvez faire passer une version de modèle à un autre stage ou supprimer le modèle à l'aide des méthodes 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)

Exemple de Notebook : Registre de modèles distant

Le Notebook suivant est applicable aux Workspaces qui ne sont pas activés pour Unity Catalog. Il montre comment Log des modèles sur le serveur de suivi MLflow à partir du workspace actuel, et enregistrer les modèles dans Model Registry dans un workspace différent. Databricks recommande d'utiliser des modèles dans Unity Catalog pour partager des modèles entre les workspaces.

Exemple de Notebook de Model Registry distant