Inclure un modèle formé dans une application

Cette rubrique décrit comment inclure un mode déjà entraîné dans une Snowflake Native App

Workflow - Ajouter un modèle à une application

La procédure suivante décrit le workflow type qu’un fournisseur suit pour créer et ajouter un modèle Snowflake ML à une application :

  1. Le fournisseur développe un modèle Snowflake ML et le connecte au Snowflake Model Registry.

  2. Le fournisseur exporte les artefacts de modèle à partir du Snowflake Model Registry et les charge dans une zone de préparation afin qu’ils soient accessibles au paquet d’application.

  3. Le fournisseur crée le modèle dans le script de configuration de l’application.

  4. L’application crée un modèle à partir de ces artefacts dans le compte du consommateur lors de l’installation ou après une mise à niveau. En option, l’application peut accorder l’accès pour le modèle à un rôle d’application.

  5. Le consommateur utilise le modèle de machine learning si le fournisseur configure l’application pour lui en accorder l’accès.

Note

Un fournisseur n’est pas tenu d’accorder l’accès pour le modèle au consommateur. Le modèle peut être créé comme un objet que l’application utilise en interne, mais qui n’est pas accessible au consommateur.

Développer un modèle de machine learning

Les fournisseurs peuvent développer de nouveaux modèles de machine learning ou inclure des modèles existants dans une application.

Exporter les artefacts du modèle et les charger dans une zone de préparation

Pour inclure un modèle dans une application, les fournisseurs doivent exporter les artefacts du modèle et les charger dans une zone de préparation où ils sont accessibles au paquet d’application.

Exporter manuellement les artefacts du modèle et les charger dans une zone de préparation

  1. Téléchargez les artefacts du modèle. Voir Registre des modèles de Snowflake

  2. Utilisez l’une des méthodes suivantes pour charger les artefacts de machine learning dans la zone de préparation où se trouvent les ressources de votre application :

Utiliser une procédure stockée pour exporter les artefacts du modèle et les charger dans une zone de préparation

Les fournisseurs peuvent utiliser l’exemple de procédure stockée suivant comme modèle pour automatiser le processus de téléchargement des artefacts de modèle et leur chargement dans une zone de préparation :

CREATE OR REPLACE PROCEDURE copy_model_artifacts_to_stage(src_registry_schema_fqn string, src_model string, src_model_version string, dst string)
  RETURNS STRING
  LANGUAGE python
  runtime_version = 3.11
  handler = 'copy_model_artifacts_to_stage'
  packages = ('snowflake-snowpark-python')
  execute as caller
as
$$

def copy_model_artifacts_to_stage(session, src_registry_schema_fqn, src_model, src_model_version, dst):
  session.use_schema(src_registry_schema_fqn)
  list_files = session.sql(f"list 'snow://model/{src_model}/versions/{src_model_version}/'")
  list_files.collect()
  for row in list_files.toLocalIterator():
     parts = row["name"].rsplit('/', 1)
     directory = parts[0]
     filename = parts[1]
     session.file.get(f"snow://model/{src_model}/{directory}/{filename}", f"/tmp/{directory}")
     session.file.put(f"/tmp/{directory}/{filename}", f"{dst}/{src_model}/{directory}", auto_compress=False, overwrite=True, source_compression="NONE")

  return f"Copied [snow://model/{src_model}/versions/{src_model_version}/*] to [{dst}/{src_model}/{directory}/]"
$$;

CALL copy_model_artifacts_to_stage('my_db.my_model_registry, 'my_model', 'V1', '@my_app_pkg.source_schema.source_stage/models');
Copy

Créer les objets du modèle dans le compte du consommateur

Pour créer les objets du modèle dans le compte du consommateur, le fournisseur ajoute les commandes SQL nécessaires au script de configuration, comme le montre l’exemple suivant :

CREATE APPLICATION ROLE IF NOT EXISTS app_user;

CREATE OR ALTER VERSIONED SCHEMA app_code;
GRANT USAGE ON SCHEMA app_code TO APPLICATION ROLE app_user;

CREATE OR REPLACE MODEL app_code.my_model FROM '/models/my_model/versions/V1;
Copy

Les fournisseurs peuvent également accorder l’accès pour le modèle aux consommateurs en accordant le privilège USAGE pour le modèle à un rôle d’application :

GRANT USAGE ON MODEL app_code.my_model TO APPLICATION ROLE app_user;
Copy

Accéder au modèle dans l’application

Pour utiliser le modèle en interne dans le cadre de l’application, les fournisseurs ajoutent une instruction SELECT au script de configuration, comme le montre l’exemple suivant :

SELECT app_code.my_model!predict(...);
Copy

Utiliser le modèle en tant que consommateur

Si un fournisseur accorde le privilège pour le modèle à un consommateur, ce dernier peut exécuter la commande suivante pour accéder au modèle :

SELECT app_code.my_model!predict(...);
Copy

Pour exécuter cette commande, les consommateurs doivent utiliser un rôle ayant l’un des privilèges suivants :

  • Le privilège USAGE accordé pour le modèle.

  • Le privilège OWNERSHIP pour l’objet de l’application.