Gerenciamento de modelos com Snowflake Model Registry

O Snowflake Model Registry simplifica o processo de levar um modelo de aprendizado de máquina do desenvolvimento à produção. Um registro de modelo bem organizado serve como centro e fonte única para todos os modelos, suas métricas e metadados. Registrar seu modelo é o primeiro e mais significativo passo em sua jornada com o Snowflake ML Ops, colocando suas operações de aprendizado de máquina sob o controle, a segurança e a governança pelos quais o Snowflake é conhecido.

O Snowflake Model Registry é flexível o suficiente para abordar uma ampla gama de casos de uso e cenários de gerenciamento de modelo de ML. Este tópico oferece orientação sobre a melhor forma de usar o registro para gerenciar modelos perfeitamente, do desenvolvimento à produção, incluindo:

  • Como controlar o acesso aos modelos para que o grupo certo de usuários ou funções possa executar várias operações.

  • Como consultar as métricas e outros metadados de todos os seus modelos.

  • Como gerenciar o ciclo de vida de um modelo, do desenvolvimento à produção.

  • Como lançar uma nova versão de um modelo sem nenhuma alteração no código de produção.

Governança

Como os modelos de aprendizado de máquina são objetos de primeira classe no Snowflake, você pode usar todos os recursos de governança padrão do Snowflake com eles, incluindo o controle de acesso baseado em função e o esquema de informações.

controle de acesso baseado em função

Objetos de modelo têm dois privilégios: OWNERSHIP e USAGE.

Privilégio

Descrição

OWNERSHIP

Controle total do modelo, incluindo gerenciamento de versões do modelo, acesso a artefatos e atualização de metadados do modelo. Somente uma função pode possuir o modelo, mas é possível conceder essa função a vários usuários ou a outras funções.

USAGE

Acesso somente leitura ao modelo, permitindo inferência (previsão) e uso dos comandos SHOW MODELS e SHOW VERSIONS IN MODEL. Funções com apenas USAGE não podem acessar o código, pesos ou outros artefatos do modelo.

O proprietário de um modelo pode conceder acesso a qualquer função da seguinte forma:

GRANT USAGE ON MODEL my_model TO ROLE prod_role;
Copy

Consultas do esquema de informação

Como todos os objetos Snowflake, os modelos são representados em uma exibição no Snowflake Information Schema. A exibição de modelos e suas versões é INFORMATION_SCHEMA.MODEL_VERSIONS. As informações da versão do modelo são um superconjunto das informações dos modelos, portanto, não há uma exibição MODEL separada.

Por meio dessa exibição, você pode consultar o próprio registro. Por exemplo, suponha que você mantenha uma métrica de precisão, adicionando-a a cada versão do modelo usando SQL como o seguinte.

ALTER MODEL my_model MODIFY VERSION v1
    SET METADATA = '{"metric": {"accuracy": 0.769}}';
Copy

Nota

Também é possível definir métricas com a API Python do registro.

mv = reg.get_model("my_model").version("v1").set_metric("accuracy", 0.769)
Copy

Após adicionar essa métrica a todas as versões dos modelos, é possível usar uma consulta como esta aqui para recuperar informações sobre todos os objetos do modelo e listá-los em ordem da maior precisão para a menor.

SELECT
    catalog_name,
    schema_name,
    model_name,
    model_version_name,
    metadata:metric:accuracy AS accuracy,
    comment,
    owner,
    functions,
    created_on,
    last_altered_on
FROM my_database.INFORMATION_SCHEMA.MODEL_VERSIONS
ORDER BY accuracy DESC;
Copy

É possível criar consultas mais complexas que se unem a outras exibições de esquema de informações ou outras tabelas para uma análise mais detalhada.

Gerenciamento do ciclo de vida do modelo

Para atender às diversas necessidades de pequenas e grandes empresas, o Snowflake Model Registry fornece quatro esquemas simples, mas poderosos, para gerenciar o ciclo de vida de um modelo, do desenvolvimento à produção. Escolha a que funciona melhor para você com base na estrutura de governança de sua preferência.

Como usar a versão padrão

Os modelos são versionados e uma versão é designada como versão padrão. É possível tratar a versão padrão de um modelo como a versão de produção por convenção; o código de produção só chama a versão padrão do modelo.

Neste cenário, você promove uma versão do modelo para produção simplesmente configurando-a como padrão, talvez depois que ela atenda aos requisitos de fluxo de trabalho de pontuação do modelo ou avaliação de desempenho. Essa é a maneira mais simples de controlar qual versão de um modelo é usada na produção.

Use este método quando:

  • O proprietário do modelo tem autoridade para decidir qual versão usar na produção.

  • Você não precisa rastrear nenhum estágio do ciclo de vida além do desenvolvimento/produção.

Configuração inicial

O proprietário do modelo concede uso no modelo a uma função de produção.

GRANT USAGE ON MODEL my_model TO ROLE prod_role;
Copy

Quando o modelo é registrado inicialmente, sua única versão é a padrão e essa versão está pronta para ser usada.

Importante

Um modelo deve sempre ter uma versão padrão. Sob esse esquema, então, você não pode designar um modelo como se ainda não tivesse uma versão de produção. Se você precisar evitar que modelos sejam usados antes de estarem prontos, você pode registrar uma versão inicial que imediatamente gera um erro. Essa versão permanecerá como padrão até que outra versão esteja pronta.

Promoção de um modelo para produção

Quando uma nova versão, chamada new_version no SQL abaixo, tiver passado dos limites de qualidade, designe-a como padrão para marcá-la como versão de produção.

ALTER MODEL my_model SET DEFAULT_VERSION = new_version;
Copy

Como usar o modelo em produção

Na produção, chame o modelo diretamente para usar a versão padrão.

SELECT my_model!predict(...) ... ;
Copy

Desenvolvimento e testes

Para usar uma versão de pré-lançamento, chame a versão do modelo desejada pelo nome:

WITH my_version AS MODEL my_model VERSION new_version
    SELECT my_version!predict(...) ...;
Copy

Como usar aliases

Muitas organizações gerenciam os ciclos de vida do modelo usando vários estágios, como desenvolvimento, canário, preparação, produção e descontinuação. As versões do modelo podem ter aliases, rótulos ou tags definidos pelo usuário que você pode anexar exclusivamente a qualquer uma das versões de um modelo. É possível usar aliases para representar os estágios do ciclo de vida que sua organização usa.

Use este método quando:

  • O proprietário do modelo tem autoridade para tomar decisões sobre o estágio do ciclo de vida do modelo.

  • Você quer rastrear vários estágios do ciclo de vida, não apenas o desenvolvimento/produção.

O exemplo abaixo usa dois estágios de pré-produção (alpha e beta) e um estágio de produção (production).

Configuração inicial

O proprietário do modelo concede uso no modelo a uma função de produção.

GRANT USAGE ON MODEL my_model TO ROLE prod_role;
Copy

Promoção da versão inicial do modelo

Ao registrar o modelo, defina o alias production para apontar para a primeira versão, aqui nomeada v1.

ALTER MODEL my_model VERSION v1 SET ALIAS = production;
Copy

Gerenciamento de versões de pré-produção

Inicialmente o modelo não possui versão alpha ou beta designada. Ao adicionar uma nova versão, inicialmente designe-a como alpha.

ALTER MODEL my_model VERSION v2 SET ALIAS = alpha;
Copy

Mais tarde, para promover a nova versão para beta:

ALTER MODEL my_model VERSION v2 UNSET ALIAS;
ALTER MODEL my_model VERSION v2 SET ALIAS = beta;
Copy

Promoção de versões subsequentes do modelo

Quando uma nova versão de um modelo for aprovada, remova o alias de production da versão de produção atual, aqui v1, e aplique-o à nova versão, aqui v2.

ALTER MODEL my_model VERSION v1 UNSET ALIAS;
ALTER MODEL my_model VERSION v2 UNSET ALIAS;
ALTER MODEL my_model VERSION v2 SET ALIAS = production;
Copy

Como usar o modelo em produção

Chame a versão de produção do modelo através do alias production.

WITH my_version AS MODEL my_model VERSION production
    SELECT my_version!predict(...) ...;
Copy

Desenvolvimento e testes

Para usar versões de pré-lançamento, chame o modelo por meio do alias alpha ou beta. Por exemplo, para testar a versão alpha:

WITH my_version AS MODEL my_model VERSION alpha
    SELECT my_version!predict(...) ...;
Copy

Como usar tags

Os esquemas de gerenciamento de ciclo de vida de versão padrão e alias já descritos pressupõem que o proprietário do modelo pode gerenciar os ciclos de vida do modelo. Em muitas organizações, porém, essa responsabilidade cabe a uma função separada de engenharia de produção, e os cientistas de dados não têm autoridade para promover versões de modelo para produção. Como os modelos são objetos Snowflake de primeira classe, você pode aplicar tags a eles para essa finalidade. As tags podem ser protegidas por controle de acesso baseado em função e são adequadas para essa separação de responsabilidades.

Use este método quando:

  • Uma função diferente do proprietário do modelo determina quando promover uma versão do modelo de um estágio do ciclo de vida para o próximo.

Configuração inicial

O proprietário do modelo concede uso no modelo a uma função de produção.

GRANT USAGE ON MODEL my_model TO ROLE prod_role;
Copy

A função de produção também precisa da capacidade de ver as tags em um modelo e ler os valores das tag. Aqui, o primeiro é alcançado concedendo-se o amplo privilégio APPLY TAG ON ACCOUNT à função. O último é obtido concedendo USAGE ao esquema.

USE ROLE ACCOUNTADMIN;
GRANT APPLY TAG ON ACCOUNT ON MODEL my_model TO ROLE prod_role;
GRANT USAGE ON SCHEMA model_database.model_schema TO ROLE prod_role;
Copy

Para criar tags, uma função precisa do privilégio CREATE TAG ON SCHEMA.

Crie uma tag nomeada live_version em um esquema de propriedade de prod_role para conter o nome da versão de produção atual do modelo.

USE ROLE prod_role;
USE SCHEMA prod_db.prod_schema;

CREATE TAG live_version;
Copy

Nota

Aqui, a tag é criada no esquema de produção, pois é gerenciada pela função de produção. Ao usá-la em outros esquemas, use seu nome totalmente qualificado.

Promoção da versão inicial do modelo

Para disponibilizar um modelo em produção, aplique a tag live_version ao modelo, especificando a versão de produção inicial como o valor da tag.

USE ROLE prod_role;
USE SCHEMA prod_db.prod_schema;

ALTER MODEL model_database.model_schema.my_model
    SET TAG live_version = 'V1';
Copy

Promoção de versões subsequentes do modelo

Quando uma nova versão do modelo estiver pronta, atualize a tag live_version com o nome dessa versão.

USE ROLE prod_role;

ALTER MODEL model_database.model_schema.my_model
    SET TAG prod_db.prod_schema.live_version = 'V2';
Copy

Como usar o modelo em produção

Chame a versão de produção do modelo recuperando o valor da tag live_version do modelo usando SYSTEM$GET_TAG e, em seguida, chamando a versão do modelo com esse nome. A seguir SQL exibe esse processo de duas etapas.

Nota

O domínio SQL dos modelos, para uso com SYSTEM$GET_TAG, é MODULE.

-- get production model version from live_version tag
SET live_version = (SELECT
    SYSTEM$GET_TAG('prod_db.prod_schema.live_version', 'my_model', 'MODULE'));

-- call that version
WITH my_version AS MODEL my_model VERSION IDENTIFIER($live_version)
    SELECT my_version!predict(...) ... ;
Copy

Desenvolvimento e testes

Para versões de pré-lançamento, você pode usar o mesmo método com tags adicionais (como alpha_version e beta_version). Em muitas organizações, no entanto, apenas a promoção para produção é gerenciada pela engenharia, e é razoável gerenciar os estágios de pré-lançamento usando o método de alias mais simples.

Como usar vários esquemas

É possível usar vários esquemas para gerenciar estágios do ciclo de vida. Com essa abordagem, o código chama exclusivamente modelos em um esquema de produção designado, que contém apenas modelos usados na produção. Modelos em outros estágios são armazenados em outro lugar. Quando uma versão do modelo está pronta para produção, ela é copiada para o esquema de produção. Como os modelos de produção são objetos separados com seu próprio controle de acesso, você pode protegê-los de modificações acidentais enquanto os desenvolvedores de modelo têm liberdade sobre os modelos em estágios de desenvolvimento.

Use este método quando:

  • Uma função diferente da de proprietário do modelo promove modelos para produção.

  • Você quer uma forte separação entre os ambientes de desenvolvimento e produção.

Configuração inicial

Crie uma função (chamada, por exemplo, ml_admin) que tenha acesso aos esquemas de desenvolvimento e produção. Neste exemplo, o acesso a esses dois ambientes é encapsulado em funções existentes denominadas model_owner e prod_role, com privilégios como USAGE e CREATE MODEL nos esquemas de desenvolvimento e produção, respectivamente. A nova função ml_admin obtém os privilégios necessários ao receber essas funções.

USE ROLE ACCOUNTADMIN;
CREATE ROLE ml_admin;

USE ROLE model_owner;
GRANT ROLE model_owner TO ROLE ml_admin;

USE ROLE prod_role;
GRANT ROLE prod_role TO ROLE ml_admin;
Copy

Promoção da versão inicial do modelo

Use a função ml_admin para copiar versões do modelo do esquema de desenvolvimento para o esquema de produção, executando a cópia inicial usando CREATE MODEL … FROM MODEL para copiar apenas a versão desejada. É possível usar o mesmo identificador para a versão de produção ou estabelecer um esquema de numeração diferente para a produção. Aqui, a versão V12 de desenvolvimento se torna a versão V1 de produção.

USE ROLE ml_admin;

CREATE MODEL prod_db.prod_schema.prod_model WITH VERSION V1
    FROM MODEL dev_db.dev_sch.dev_model VERSION V12;
Copy

Após criar a versão de produção inicial do modelo, conceda USAGE e quaisquer outros privilégios necessários às funções que o utilizarão na produção.

USE ROLE ml_admin;

GRANT USAGE ON MODEL my_model TO ROLE prod_role;
Copy

Promoção de versões subsequentes do modelo

Quando uma nova versão do modelo estiver pronta para produção, copie apenas a nova versão do modelo para o ambiente de produção. Aqui, a versão V24 de desenvolvimento se torna versão V2 de produção. V2 é então definida como a versão padrão.

USE ROLE ml_admin;

ALTER MODEL prod_db.prod_schema.prod_model ADD VERSION V2
    FROM MODEL dev_db.dev_schema.dev_model VERSION V24;

ALTER MODEL prod_db.prod_schema.prod_model
    SET DEFAULT_VERSION = V2;
Copy

Dica

É uma boa ideia manter versões de produção anteriores caso você precise reverter, o que pode ser feito configurando a versão padrão para uma versão anterior, conforme mostrado abaixo.

ALTER MODEL prod_db.prod_schema.prod_model SET DEFAULT_VERSION = V1;
Copy

Estabeleça uma política sobre quantas versões antigas manter e por quanto tempo mantê-las.

Como usar o modelo em produção

Na produção, chame a versão padrão do modelo.

SELECT prod_model!predict(...) ... ;
Copy

Desenvolvimento e testes

Para gerenciar versões de pré-lançamento, é possível usar esquemas adicionais, promovendo versões de um estágio para outro, copiando-as de um esquema para outro. Se o proprietário do modelo puder gerenciar os estágios de pré-produção, será possível usar um método mais simples, como aliases, para gerenciar essas versões. Usar esquemas adicionais ainda pode ser útil para segregar vários ambientes de pré-produção, como desenvolvimento e teste, quando um ou mais desses estágios são gerenciados por outra função.