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 :
Le fournisseur développe un modèle Snowflake ML et le connecte au Snowflake Model Registry.
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.
Le fournisseur crée le modèle dans le script de configuration de l’application.
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.
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.
Pour obtenir des informations sur le développement de modèles, voir Développement de modèles de ML Snowflake.
Pour obtenir des informations sur la gestion des modèles dans un Snowflake Model Registry, voir Registre des modèles de Snowflake.
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¶
Téléchargez les artefacts du modèle. Voir Registre des modèles de Snowflake
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 :
Pour charger les fichiers à l’aide de Snowsight, voir Mise des fichiers en zone de préparation à l’aide de Snowsight.
Pour charger les fichiers à l’aide de la CLI Snowflake, utilisez la commande
snow app deploy
. Voir Comment créer un paquet d’application et un objet d’application ensemble ?.Pour charger les fichiers à l’aide de la commande SQL, voir Mise en zone de préparation de fichiers de données à partir d’un système de fichiers local.
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');
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;
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;
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(...);
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(...);
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.