Incluir um modelo treinado em um aplicativo¶
Este tópico descreve como incluir um modo previamente treinado em um Snowflake Native App
Fluxo de trabalho - Adicionar um modelo a um aplicativo¶
O procedimento a seguir descreve o fluxo de trabalho típico que um provedor segue para criar e adicionar um modelo do Snowflake ML a um aplicativo:
O provedor desenvolve um modelo do Snowflake ML e o registra no Snowflake Model Registry.
O provedor exporta os artefatos do modelo do Snowflake Model Registry e os carrega em um estágio para que possam ser acessados pelo pacote de aplicativos.
O provedor cria o modelo no script de configuração do aplicativo.
O aplicativo cria um modelo a partir desses artefatos na conta do consumidor durante a instalação ou após uma atualização. Opcionalmente, o aplicativo pode conceder acesso ao modelo para uma função de aplicativo.
O consumidor usa o modelo de aprendizado de máquina se o provedor configurar o aplicativo para conceder acesso a ele.
Nota
O provedor não é obrigado a conceder acesso ao modelo para o consumidor. O modelo pode ser criado como um objeto que o aplicativo usa internamente, mas não é acessível ao consumidor.
Desenvolver um modelo de aprendizado de máquina¶
Os provedores podem desenvolver novos modelos de aprendizado de máquina ou incluir modelos existentes em um aplicativo.
Para obter informações sobre o desenvolvimento de modelos, consulte Desenvolvimento do modelo Snowflake ML.
Para obter informações sobre o gerenciamento de modelos no Snowflake Model Registry, consulte Registro de modelo Snowflake.
Exportar os artefatos do modelo e fazer o upload para um estágio¶
Para incluir um modelo em um aplicativo, os provedores devem exportar os artefatos do modelo e carregá-los para um estágio em que possam ser acessados pelo pacote de aplicativos.
Exportar manualmente os artefatos do modelo e carregá-los para um estágio¶
Faça o download dos artefatos do modelo. Consulte Registro de modelo Snowflake.
Use um dos métodos a seguir para carregar os artefatos de aprendizado de máquina para o estágio em que os recursos do aplicativo estão localizados:
Para carregar os arquivos usando o Snowsight, consulte Preparação de arquivos usando o Snowsight.
Para carregar os arquivos usando o Snowflake CLI, use o comando
snow app deploy
. Consulte Como criar um pacote de aplicativo e um objeto de aplicativo juntos.Para fazer upload dos arquivos usando SQL, consulte Preparação de arquivos de dados de um sistema de arquivo local.
Usar um procedimento armazenado para exportar os artefatos do modelo e carregá-los para um estágio¶
Os provedores podem usar o exemplo de procedimento armazenado a seguir como um modelo para automatizar o processo de download dos artefatos do modelo e carregá-los para um estágio:
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');
Criar os objetos do modelo na conta do consumidor¶
Para criar os objetos do modelo na conta do consumidor, o provedor adiciona os comandos SQL necessários ao script de configuração, conforme mostrado no exemplo a seguir:
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;
Opcionalmente, os provedores podem conceder acesso ao modelo aos consumidores, concedendo o privilégio USAGE no modelo a uma função de aplicativo:
GRANT USAGE ON MODEL app_code.my_model TO APPLICATION ROLE app_user;
Acessar o modelo dentro do aplicativo¶
Para usar o modelo internamente como parte do aplicativo, os provedores adicionam uma instrução SELECT ao script de configuração, conforme mostrado no exemplo a seguir:
SELECT app_code.my_model!predict(...);
Usar o modelo como um consumidor¶
Se um provedor conceder o privilégio do modelo a um consumidor, este poderá executar o seguinte comando para acessar o modelo:
SELECT app_code.my_model!predict(...);
Para executar esse comando, os consumidores devem usar uma função que tenha uma das seguintes opções:
O privilégio USAGE concedido no modelo.
O privilégio OWNERSHIP no objeto do aplicativo.