Criação e fornecimento de recursos online¶
Crie e forneça recursos online para fluxos de trabalho de inferência de machine learning sensíveis à latência. Habilite os recursos online em uma exibição de recurso que você criar ou atualize uma exibição de recurso existente para habilitar o fornecimento online.
Importante
Você deve ter o Snowflake versão 9.26 ou mais recente e o snowflake-ml-python versão 1.18.0 para usar o fornecimento de recursos online.
O fornecimento de recursos online oferece os seguintes benefícios:
Pesquisas pontuais de baixa latência para inferência em tempo real
Sincronização automática de dados de fontes offline
Infraestrutura e manutenção totalmente gerenciadas
Dimensionamento elástico para cargas de trabalho exigentes
O fornecimento de recursos online é auxiliado pelas tabelas de recursos online.
Atualidade dos dados¶
Uma exibição de recurso com fornecimento de recursos online sincroniza automaticamente os dados do armazenamento offline.
Use o parâmetro target_lag para configurar a frequência de sincronização dos dados com a tabela de recursos online. Você pode definir esse valor de um mínimo de 10 segundos até um máximo de 8 dias.
Modos de atualização¶
O Snowflake usa os seguintes modos de atualização para atualizar os dados:
Atualização incremental: este é o modo preferencial e mais eficiente. O Snowflake rastreia as alterações nas fontes e mescla apenas as linhas novas ou atualizadas no armazenamento online. Isso minimiza os custos de computação e E/S.
Atualização completa: este modo descarta todos os dados existentes na tabela e recarrega tudo da fonte. Ele requer mais recursos e é usado quando a atualização incremental não é possível.
Você pode definir explicitamente o modo de atualização como INCREMENTAL ou FULL, ou como AUTO para que o Snowflake determine o modo de atualização mais eficiente disponível.
Tratamento de dados de série temporal¶
Para garantir a consistência dos dados, você pode especificar timestamp_col. Quando várias linhas com a mesma chave primária são encontradas na fonte, o Snowflake ingere apenas a versão com o carimbo de data/hora mais recente. Se você não especificar uma coluna de carimbo de data/hora, a linha processada mais recentemente terá precedência.
Acesso para criar e fornecer recursos online¶
Antes de começar a usar o armazenamento de recursos online, você deve conceder as permissões necessárias às funções relevantes.
Para conceder permissões, use o script de controle de acesso descrito em Configuração de controle de acesso em SQL. Depois de executar o script, conceda os seguintes privilégios:
GRANT CREATE ONLINE FEATURE TABLE ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);
GRANT SELECT, MONITOR ON FUTURE ONLINE FEATURE TABLES IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
GRANT SELECT, MONITOR ON ALL ONLINE FEATURE TABLES IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
Gerenciamento e fornecimento de recursos online usando a Python API¶
O exemplo a seguir mostra como configurar o fornecimento de recursos online ao criar uma nova exibição de recurso. Você pode usar o objeto OnlineConfig para especificar as configurações de fornecimento online, como o atraso da atualização dos dados de destino.
from snowflake.ml.feature_store import FeatureView
from snowflake.ml.feature_store.feature_view import OnlineConfig
online_config = OnlineConfig(enable=True, target_lag="30 seconds")
fv = FeatureView(
name="MY_FV",
entities=[entity],
feature_df=my_df, # Snowpark DataFrame containing feature transformations
timestamp_col="ts", # optional timestamp column name in the dataframe
refresh_freq="5 minutes",
refresh_mode="AUTO", # refresh mode of the feature data
desc="my feature view", # optional description
online_config=online_config
)
fv = fs.register_feature_view(feature_view=fv, version="v1")
Veja a seguir os parâmetros OnlineConfig:
Parâmetro |
Tipo |
Descrição |
Padrão |
|---|---|---|---|
enable |
Booliano, opcional |
Especifica se o fornecimento de recursos online deve ser habilitado para exibição de recurso. |
Padrão: False |
target_lag |
Cadeia de caracteres, opcional |
Cadeia de caracteres no formato «<num> (segundos|minutes|horas|days|s|m|h|d)» que especifica o atraso da atualização dos dados de destino. |
Padrão: 10 segundos |
Nota
refresh_freq e OnlineConfig.target_lag agem de forma independente. No exemplo acima, o atraso efetivo da propagação dos dados de destino em relação aos dados de origem representados por my_df para o armazenamento de dados online será refresh_freq + online_config.target_lag.
Atualização da exibição de recurso para habilitar/desabilitar o fornecimento de recursos online¶
Para as exibições de recurso existentes, é possível atualizar a configuração do fornecimento de recursos online usando o método update_feature_view. Você pode usar esse método para habilitar o fornecimento de recursos online para as exibições de recurso existentes.
Use o código a seguir para habilitar o fornecimento de recursos online.
# Enable online feature serving
fs.update_feature_view(
name="<name>",
version="<version>",
online_config=OnlineConfig(enable=True, target_lag="5 minutes")
)
Use o código a seguir para desabilitar o fornecimento de recursos online.
# Disable online feature serving
fs.update_feature_view(
name="<name>",
version="<version>",
online_config=OnlineConfig(enable=False)
)
Recuperação de recursos do armazenamento online¶
Para recuperar valores de recurso do armazenamento online para uma determinada amostra, use o método read_feature_view e passe a lista de nomes de recursos e as chaves de junção da amostra:
fs.read_feature_view(
feature_view=fv,
keys=[["<k_1>", "<k_2>"]],
feature_names=["<feature1>", "<feature2>", "<feature3>"],
store_type=StoreType.ONLINE
)
Suspender/retomar a atualização de dados online¶
Use o código a seguir para suspender temporariamente a atualização de dados.
fs.suspend_feature_view(feature_view=fv)
Use o código a seguir para retomar a atualização de dados.
fs.resume_feature_view(feature_view=fv)
Essas operações suspendem/retomam a exibição de recurso offline (tabela dinâmica e tarefa associada) e a tabela de recursos online (se houver) para garantir o estado consistente de todos os tipos de armazenamento.
Atualização manual da exibição de recurso¶
fs.refresh_feature_view(
feature_view=fv,
store_type=<store_type>
)
O argumento store_type especifica se é para atualizar os dados do recurso offline (StoreType.OFFLINE) ou online (StoreType.ONLINE).
Exibição do histórico de atualização¶
fs.get_refresh_history(
feature_view=fv,
store_type=store_type
)
O argumento store_type especifica se é para retornar o histórico de atualização do armazenamento offline (StoreType.OFFLINE) ou online (StoreType.ONLINE).
Compreensão dos custos¶
As tabelas de recursos online geram custos nos seguintes modos de consumo:
Computação de warehouse virtual: tanto as pesquisas de chaves quanto as operações de ingestão de dados consomem créditos de warehouse virtual conforme as taxas padrão. Para obter mais informações, consulte Uso de crédito do warehouse virtual.
Computação de serviços de nuvem: esse modo é requerido para identificar alterações em objetos base subjacentes e determinar quando as operações de atualização são necessárias. Para obter mais informações, consulte Uso de crédito de serviços de nuvem.
Armazenamento de tabelas híbridas: custos de armazenamento baseados na taxa fixa mensal por GB. Esse recurso custa mais caro que o armazenamento tradicional do Snowflake, mas tem o mesmo custo de armazenamento das tabelas híbridas. Para obter mais informações, consulte a tabela 3(b) na Tabela de consumo de crédito.
Solicitações de tabela híbrida: essas solicitações requerem Uso de crédito sem servidor para operações de leitura/gravação em clusters de armazenamento de linhas. A quantidade de dados gravados ou lidos nesses clusters é usada para calcular o consumo de crédito, com uso mínimo de 4 KB por operação. Há também consumo de créditos para os recursos de computação usados para executar operações em segundo plano, como compactação. Para obter mais informações, consulte a tabela 5 na Tabela de consumo de crédito.
Dica
A atualização incremental pode ajudar a reduzir custos. Geralmente, as atualizações incrementais apresentam um melhor custo-benefício do que a atualização completa, resultando em custos mais baixos de computação e ingestão de dados.
Monitoramento de custos¶
Para monitorar os custos, use estas exibições:
-- Hybrid table request credits
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.HYBRID_TABLE_USAGE_HISTORY;
-- Storage consumption
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.STORAGE_USAGE;
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.DATABASE_STORAGE_USAGE_HISTORY;
-- Overall costs
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY;