Treinamento e inferência de modelos

Nota

A API do Snowflake Feature Store está disponível no pacote Snowpark ML Python (snowflake-ml-python) v1.5.0 e posterior.

Geração de tabelas para treinamento

É possível gerar um conjunto de dados com o método generate_training_set do repositório de recursos, que enriquece um DataFrame Snowpark que contém os dados de origem com os valores de recurso derivados. Para selecionar um subconjunto de recursos de uma exibição de recursos, use fv.slice.

Para recursos de séries temporais, forneça o nome da coluna do carimbo de data/hora para automatizar a pesquisa de valor do recurso em um determinado momento.

training_set = fs.generate_training_set(
    spine_df=MySourceDataFrame,
    features=[registered_fv],
    save_as="data_20240101",                    # optional
    spine_timestamp_col="TS",                   # optional
    spine_label_cols=["LABEL1", "LABEL2"],      # optional
    include_feature_view_timestamp_col=False,   # optional
)
Copy

Nota

Aqui, o spine_df (MySourceDataFrame) é um DataFrame com as IDs de entidade nos dados de origem, o carimbo de data e hora, a colunas de rótulo e as colunas adicionais com dados de treinamento. Os recursos solicitados são recuperados para IDs da lista de entidades, com exatidão no momento em relação ao registro de data e hora fornecido.

Os conjuntos de treinamento são efêmeros por padrão; eles existem apenas como DataFrames Snowpark e não são materializados. Para materializar o conjunto de treinamento em uma tabela, especifique o argumento save_as com um nome de tabela válido e inexistente. O conjunto de treinamento é gravado na tabela recém-criada.

Atualmente, as tabelas materializadas não garantem imutabilidade e têm suporte limitado a metadados. Se você precisar desses recursos, considere usar conjuntos de dados Snowflake.

Nota

A API generate_training_set está disponível na versão 1.5.4 de snowflake-ml-python ou posterior.

Como gerar conjuntos de dados Snowflake para treinamento

É possível gerar um conjunto de dados Snowflake usando o método generate_dataset do armazenamento de recurso. A assinatura do método é semelhante a generate_training_set; as principais diferenças são o argumento name obrigatório, o argumento version opcional e os campos de metadados adicionais. generate_dataset sempre materializa o resultado.

Os conjuntos de dados Snowflake fornecem um instantâneo de dados imutável e baseado em arquivo, o que ajuda a garantir a reprodutibilidade do modelo e a ingestão eficiente de dados para grandes conjuntos de dados e/ou treinamento distribuído. Os conjuntos de dados também têm suporte expandido de metadados para facilitar a descoberta e o consumo.

O código a seguir ilustra a geração de um conjunto de dados a partir de uma exibição de recurso:

dataset: Dataset = fs.generate_dataset(
    name="MY_DATASET",
    spine_df=MySourceDataFrame,
    features=[registered_fv],
    version="v1",                               # optional
    spine_timestamp_col="TS",                   # optional
    spine_label_cols=["LABEL1", "LABEL2"],      # optional
    include_feature_view_timestamp_col=False,   # optional
    desc="my new dataset",                      # optional
)
Copy

Treinamento de modelo

Após criar um conjunto de dados de treinamento, é possível passá-lo para seu modelo durante o treinamento, da seguinte forma.

Se você gerou um DataFrame Snowpark, passe-o diretamente ao seu modelo:

my_model = train_my_model(training_set)
Copy

Se você gerou um conjunto de dados Snowflake, converta-o em um DataFrame Snowpark e passe-o para seu modelo:

my_model = train_my_model(dataset.read.to_snowpark_dataframe())
Copy

Uma vez treinado, o modelo pode ser registrado no Snowflake Model Registry.

Como recuperar recursos e fazer previsões

Se você criou um modelo em sua sessão Python, é possível recuperar a exibição de recurso do repositório de recursos e passá-la para seu modelo para previsão, conforme mostrado aqui:

prediction_df: snowpark.DataFrame = fs.retrieve_feature_values(
    spine_df=prediction_source_dataframe,
    features=[registered_fv],
    spine_timestamp_col="TS",
    exclude_columns=[],
)

# predict with your previously trained model
my_model.predict(prediction_df)
Copy

É possível excluir colunas especificadas usando o argumento exclude_columns ou incluir a coluna de carimbo de data/hora da exibição de recurso configurando include_feature_view_timestamp_col.