Aller au contenu principal

Partager des tables de fonctionnalités entre le Workspace (hérité)

important
  • Cette documentation a été retirée et pourrait ne pas être mise à jour.
  • Databricks recommande d'utiliser Feature Engineering dans Unity Catalog pour partager des tables de fonctionnalités entre les workspaces. L'approche de cet article est obsolète.

Databricks prend en charge le partage de tables de fonctionnalités entre plusieurs Workspaces. Par exemple, à partir de votre propre Workspace, vous pouvez créer, écrire ou lire une table de fonctionnalités dans un Magasin de fonctionnalités centralisé. Ceci est utile lorsque plusieurs équipes partagent l'accès aux tables de fonctionnalités ou lorsque votre organisation dispose de plusieurs Workspace pour gérer différentes étapes de développement.

Pour un Magasin de fonctionnalités centralisé, Databricks vous recommande de désigner un seul Workspace pour stocker toutes les métadonnées du Magasin de fonctionnalités, et de créer des comptes pour chaque utilisateur ayant besoin d'accéder au Magasin de fonctionnalités.

Si vos équipes partagent également des modèles entre les workspaces, vous pouvez choisir de dédier le même workspace centralisé pour les tables de fonctionnalités et les modèles, ou vous pouvez spécifier différents workspaces centralisés pour chacun.

Multiples Workspace de magasin de fonctionnalités

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

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.

Exigences

L'utilisation d'un Magasin de fonctionnalités entre les Workspace nécessite :

  • Client Magasin de fonctionnalités v0.3.6 et versions ultérieures.
  • Les deux Workspace doivent avoir accès aux données de fonctionnalités brutes. Ils doivent partager le même Hive metastore externe et avoir accès au même stockage DBFS.
  • Si les listes d'accès IP sont activées, les adresses IP du workspace doivent figurer sur les listes d'accès.

Configurez le jeton API pour un registre distant

Dans cette section, « Workspace B » fait référence au Workspace du Magasin de fonctionnalités centralisé ou distant.

  1. Dans le Workspace B, créez un jeton d'accès.
  2. Dans votre workspace local, créez des secrets pour stocker le jeton d'accès et les informations sur le Workspace B :
    1. Créer un Secret Scope : databricks secrets create-scope --scope <scope>.

    2. Choisissez un identifiant unique pour Workspace B, affiché ici sous la forme <prefix>. Ensuite, créez trois secrets avec les noms de clés spécifiés :

      • databricks secrets put --scope <scope> --key <prefix>-host : Saisissez l'hostname de Workspace B. Utilisez les commandes Python suivantes pour obtenir l'hostname d'un workspace :
      Python
      import mlflow

      host_url = mlflow.utils.databricks_utils.get_webapp_url()
      host_url
      • databricks secrets put --scope <scope> --key <prefix>-token : Saisissez le jeton d’accès du Workspace B.

      • databricks secrets put --scope <scope> --key <prefix>-workspace-id : Saisissez l'ID du Workspace B 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écifier un magasin de fonctionnalités distant

Sur la base du Secret Scope et du préfixe de nom que vous avez créé pour le Workspace de magasin de fonctionnalités à distance, vous pouvez construire un URI de magasin de fonctionnalités de la forme suivante :

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

Ensuite, spécifiez l'URI explicitement lorsque vous instanciez un FeatureStoreClient:

Python
fs = FeatureStoreClient(feature_store_uri=feature_store_uri)

Créer une base de données pour les tables de fonctionnalités dans l'emplacement DBFS partagé

Avant de créer des tables de fonctionnalités dans le magasin de fonctionnalités distant, vous devez créer une base de données pour les stocker. La base de données doit exister à l'emplacement DBFS partagé.

Par exemple, pour créer une base de données recommender à l'emplacement partagé /mnt/shared, utilisez la commande suivante :

%sql CREATE DATABASE IF NOT EXISTS recommender LOCATION '/mnt/shared'

Créer une table de fonctionnalités dans le magasin de fonctionnalités distant

L'API pour créer une table de fonctionnalités dans un magasin de fonctionnalités distant dépend de la version de Databricks Runtime que vous utilisez.

Utiliser l'API FeatureStoreClient.create_table :

Python
fs = FeatureStoreClient(feature_store_uri=f'databricks://<scope>:<prefix>')
fs.create_table(
name='recommender.customer_features',
primary_keys='customer_id',
schema=customer_features_df.schema,
description='Customer-keyed features'
)

Pour des exemples d'autres méthodes de Magasin de fonctionnalités, consultez Notebook exemple : partager des tables de fonctionnalités entre Workspace.

Utiliser une table de fonctionnalités du Magasin de fonctionnalités distant

Vous pouvez lire une table de fonctionnalités dans le Magasin de fonctionnalités distant avec la méthode FeatureStoreClient.read_table en définissant d'abord le feature_store_uri:

Python
fs = FeatureStoreClient(feature_store_uri=f'databricks://<scope>:<prefix>')
customer_features_df = fs.read_table(
name='recommender.customer_features',
)

D'autres méthodes d'aide pour accéder à la table de fonctionnalités sont également prises en charge :

Python
fs.read_table()
fs.get_feature_table() # in v0.3.5 and below
fs.get_table() # in v0.3.6 and above
fs.write_table()
fs.publish_table()
fs.create_training_set()

Utiliser un registre de modèles distant

En plus de spécifier un URI de Magasin de fonctionnalités distant, vous pouvez également spécifier un URI de registre de modèles distant pour partager des modèles entre les Workspaces.

Pour spécifier un registre de modèles distant pour la journalisation ou l'évaluation de modèles, vous pouvez utiliser un URI de registre de modèles pour instancier un FeatureStoreClient.

Python
fs = FeatureStoreClient(model_registry_uri=f'databricks://<scope>:<prefix>')
customer_features_df = fs.log_model(
model,
"recommendation_model",
flavor=mlflow.sklearn,
training_set=training_set,
registered_model_name="recommendation_model"
)

En utilisant feature_store_uri et model_registry_uri, vous pouvez entraîner un modèle en utilisant n’importe quelle table de caractéristiques locale ou distante, puis enregistrer le modèle dans n’importe quel registre local ou distant.

Python
fs = FeatureStoreClient(
feature_store_uri=f'databricks://<scope>:<prefix>',
model_registry_uri=f'databricks://<scope>:<prefix>'
)

Exemple de Notebook : partager les tables de fonctionnalités entre les Workspaces

Le Notebook suivant montre comment travailler avec un Magasin de fonctionnalités centralisé.

Exemple de notebook de Magasin de fonctionnalités centralisé