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.