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;
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}}';
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)
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;
É 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;
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;
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(...) ... ;
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(...) ...;
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;
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;
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;
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;
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;
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(...) ...;
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(...) ...;
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;
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;
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;
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;
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;
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(...) ... ;
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.