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:

  1. O provedor desenvolve um modelo do Snowflake ML e o registra no Snowflake Model Registry.

  2. 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.

  3. O provedor cria o modelo no script de configuração do aplicativo.

  4. 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.

  5. 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.

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

  1. Faça o download dos artefatos do modelo. Consulte Registro de modelo Snowflake.

  2. 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:

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');
Copy

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;
Copy

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;
Copy

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(...);
Copy

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(...);
Copy

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.