ML Lineage: rastrear o fluxo de dados do ML

Nota

O ML Lineage está disponível no pacote snowflake-ml-python versão 1.6.0 e posterior.

O ML Lineage fornece um rastreamento abrangente dos dados à medida que eles fluem pelo pipeline de aprendizado de máquina. Esse recurso permite que você rastreie a linhagem entre vários artefatos de dados, incluindo tabelas/exibições/estágios de origem, visualizações de recursos, conjuntos de dados, modelos registrados e serviços de modelos implantados. Além disso, o ML Lineage captura as relações entre artefatos clonados e artefatos de tipos semelhantes, garantindo uma visão completa das transformações e dependências de dados em seu pipeline. Um possível pipeline é ilustrado abaixo:

Uma ilustração de um pipeline compatível com o ML Lineage

As relações de linhagem que podem ser rastreadas entre os tipos de nós em seu pipeline estão resumidas na tabela abaixo. Cada linha representa a origem da dependência e cada coluna representa o destino. A interseção de uma linha ou coluna contém um ícone que indica se esse relacionamento é capturado pelo ML Lineage.

Tabela/Exibição/Estágio

Exibição de recursos

Conjunto de dados

Modelo

Serviço de modelo implantado

Tabela/Exibição/Estágio

-

Exibição de recursos

✔ (somente para a tabela)

-

-

Conjunto de dados

-

-

Modelo

-

-

Serviço de modelo implantado

-

-

-

-

  • ✔: essa relação é capturada pelo ML Lineage.

  • ❌: essa relação ainda não é capturada pelo ML Lineage, mas está no roteiro.

  • -: Essa combinação de objetos não representa uma relação.

Com o ML Lineage, você pode entender como os artefatos de aprendizado de máquina se relacionam entre si e pode responder a perguntas como:

  • De onde vieram os dados para treinar meu modelo?

  • De quais exibições de recursos meu conjunto de dados depende?

  • Quais modelos foram treinados nos dados do meu conjunto de dados?

  • Quais serviços usam meu modelo?

Acesse o Guia de início rápido Notebook para ver como usar ML Lineage APIs. Acompanhe com um guia de início rápido mais completo de ponta a ponta do ML com Feature Store e Model Registry que incorpora ML Lineage em um fluxo de trabalho de ML completo.

Limitações

  • Atualmente, as tabelas e exibições criadas a partir de previsões de modelos não capturam a relação de linhagem com o modelo.

  • As informações de linhagem não são replicadas no momento.

A Snowflake pretende abordar essas limitações em versões futuras do ML Lineage.

Privilégios obrigatórios

Os usuários precisam ter o privilégio VIEW LINEAGE para explorar a linhagem de Python APIs. Esse privilégio é concedido automaticamente à função ACCOUNTADMIN, que pode então concedê-lo a outras funções no nível da conta. Por exemplo:

USE ROLE ACCOUNTADMIN;
GRANT VIEW LINEAGE ON ACCOUNT TO ROLE test_role;
Copy

Criação do ML Lineage

Em geral, o Snowflake registra informações de linhagem quando os objetos são criados. A linhagem dos modelos é capturada quando o modelo é registrado no Model Registry. O treinamento de um modelo usando o Snowpark ML gera automaticamente registros de linhagem se o modelo for treinado a partir de um Snowpark DataFrame.

Outros cenários, como os listados abaixo, também podem gerar registros de linhagem com um pouco mais de esforço.

  • Treinar um modelo usando o Snowpark MLfrom de algum outro tipo de fonte de dados (como um pandas DataFrame).

  • Treinar um modelo sem usar o Snowpark ML ou um Snowpark DataFrame.

  • Treinar um modelo fora do Snowflake.

Nesses cenários, você ainda pode associar o objeto de dados de origem e o modelo treinado passando um Snowpark DataFrame apoiado pelo objeto de dados de origem como sample_data para o método log_model do Model Registry, conforme mostrado abaixo.

registry.log_model(...,
          sample_input_data=df_backed_by_source_table)
Copy

Nota

Somente os objetos criados após a ativação do recurso ML Lineage em sua conta contêm informações de linhagem.

Consulta do ML Lineage

Você pode consultar a linhagem dos artefatos do ML de várias maneiras.

Snowsight UI

A página de destino de cada artefato tem uma guia Lineage. A visualização padrão exibe objetos a montante e a jusante a um passo do objeto selecionado. Para uma exploração mais detalhada da linhagem da Snowsight UI, consulte Linhagem de dados no Snowsight.

Uma amostra da exibição do Snowsight dos dados de linhagem é mostrada abaixo.

Exemplo de captura de tela do ML Lineage no Snowsight

Biblioteca Snowpark ML

A biblioteca Snowpark ML (o pacote snowflake-ml-python) oferece uma API fácil de usar em todos os objetos de artefato do Snowflake ML para explorar a linhagem nas direções a montante e a jusante. Ele retorna objetos de artefatos conectados, e você pode encadear chamadas da API para explorar ainda mais na direção desejada. Esta API funciona diretamente com objetos Python do Snowflake ML. Para obter mais informações, consulte API de linhagem do Snowpark ML.

Biblioteca Snowpark Python

A biblioteca Snowpark oferece uma API flexível para explorar dados e linhagem de ML de artefatos Snowflake suportados com maior profundidade na direção de sua escolha. Ele aceita domínios e nomes totalmente qualificados, retornando um DataFrame com detalhes dos artefatos conectados. Para obter mais informações, consulte snowflake.snowpark.lineage.Lineage.trace na Referência da API do Snowpark Python.

Snowflake SQL

A função SQL SNOWFLAKE.CORE.GET_LINEAGE pode ser usada para consultar informações de linhagem semelhantes às da biblioteca Snowpark. Para obter mais informações, consulte GET_LINEAGE (SNOWFLAKE.CORE).

API de linhagem do Snowpark ML

O método lineage disponível nos objetos FeatureView, ModelVersion e Dataset recupera as relações de linhagem do objeto atual, para que você possa rastrear a linhagem dos objetos de dados recuperados do Snowflake Feature Store ou do Model Registry.

Para todos os objetos compatíveis, o método lineage aceita os seguintes argumentos:

  • direction, UPSTREAM ou DOWNSTREAM. DOWNSTREAM é o padrão.

  • domain_filter, uma lista de tipos de objetos de destino para os quais a linhagem será recuperada. O padrão é retornar todas as relações de linhagem. Os domínios disponíveis são "feature_view", "dataset", "model", "table" e "view".

O método retorna uma lista de nós de linhagem conectados. Esses nós podem ser instâncias de Dataset, FeatureView ou ModelVersion, se você tiver importado essas classes para a sua sessão Python. Caso contrário, cada nó é representado por uma instância genérica do LineageNode.

Exemplos

Os exemplos a seguir demonstram como responder a perguntas comuns usando a API de linhagem do Snowpark ML.

  • Dada uma versão do modelo, de onde vieram os dados de treinamento?

    model_version.lineage(direction="upstream")
    
    Copy
  • De quais exibições de recursos um determinado conjunto de dados depende?

    my_dataset.lineage(direction="upstream", domain_filter=["feature_view"])
    
    Copy
  • Quais modelos foram treinados em dados de um determinado conjunto de dados?

    my_dataset.lineage(direction="downstream", domain_filter=["model"])
    
    Copy

Para obter exemplos mais completos, consulte estes recursos: