在应用程序中加入经过训练的模型¶
本主题介绍如何将先前训练过的模式包含在 Snowflake Native App 中
工作流程 – 向应用程序添加模型¶
以下过程概述了提供商在创建和向应用程序中添加 Snowflake ML 模型时遵循的典型工作流程:
提供商开发了一个 Snowflake ML 模型并将其记录在 Snowflake Model Registry 中。
提供商从 Snowflake Model Registry 中导出模型工件并将其上传到一个暂存区,以便应用程序包可以访问它们。
提供商在应用程序的设置脚本中创建模型。
该应用程序在安装期间或升级后使用使用者账户中的工件创建模型。或者,应用程序可以向应用程序角色授予模型访问权限。
如果提供商将应用程序配置为授予访问权限,则使用者使用机器学习模型。
备注
提供商无需向使用者授予模型访问权限。该模型可以创建为应用程序内部使用的对象,但使用者无法访问。
开发机器学习模型¶
提供商可以开发新的机器学习模型或将现有模型包含在应用程序中。
有关开发模型的信息,请参阅 Snowflake ML 模型开发。
有关在 Snowflake Model Registry 中管理模型的信息,请参阅 Snowflake Model Registry。
导出模型工件并上传到暂存区¶
要将模型包含在应用程序中,提供商必须导出模型工件并将其上传到应用程序包可以访问的暂存区。
手动导出模型工件并将其上传到暂存区¶
下载模型工件。请参阅 Snowflake Model Registry
使用以下方法之一将机器学习工件上传到应用程序资源所在的暂存区:
要使用 Snowsight 上传文件,请参阅 使用 Snowsight 暂存文件。
要使用 Snowflake CLI 上传文件,请使用
snow app deploy
命令。请参阅 如何同时创建应用程序包和应用程序对象。要使用 SQL 上传文件,请参阅 从本地文件系统暂存数据文件。
使用存储过程导出模型工件并将其上传到暂存区¶
提供者可以使用以下存储过程示例作为模板,自动执行下载模型工件并将其上传到暂存区的过程:
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');
在使用者账户中创建模型对象¶
要在使用者账户中创建模型对象,提供商将必要的 SQL 命令添加到安装脚本中,如以下示例所示:
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;
或者,提供商可以通过向应用程序角色授予模型 USAGE 权限来向使用者授予模型访问权限:
GRANT USAGE ON MODEL app_code.my_model TO APPLICATION ROLE app_user;
在应用程序中访问模型¶
要在内部使用该模型作为应用程序的一部分,提供商在安装脚本中添加一条 SELECT 语句,如以下示例所示:
SELECT app_code.my_model!predict(...);
将模型用作使用者¶
如果提供商向使用者授予模型权限,则使用者可以运行以下命令来访问该模型:
SELECT app_code.my_model!predict(...);
要运行此命令,使用者必须使用具有以下条件之一的角色:
授予模型的 USAGE 权限。
应用程序对象的 OWNERSHIP 权限。