Partager des modèles entre les workspaces
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.

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.
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.
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
- Dans le workspace du registre de modèles, créez un jeton d'accès.
- Dans le Workspace local, créez des secrets pour stocker le jeton d'accès et les informations du Workspace distant :
- Créer un Secret Scope :
databricks secrets create-scope <scope>. - 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.
- Créer un Secret Scope :
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 :
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 :
mlflow.set_registry_uri(registry_uri)
Ou, vous pouvez le spécifier explicitement lorsque vous instanciez un MlflowClient:
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 :
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.
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 :
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:/ :
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 :
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 :
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.