A loja de recursos de aprendizado de máquina (ML) tem atraído atenção e uso para aplicações críticas para os negócios desde que a Uber introduziu o conceito com Michelangelo em 2017. Neste post de blog, vamos mergulhar nos fundamentos das lojas de recursos ML e explorar por que e como o ScyllaDB pode ser uma parte crítica da arquitetura da sua loja de recursos.
Para entender o que são lojas de recursos, é importante primeiro entender o que são recursos.
O que é um Recurso?
No Aprendizado de Máquina, um recurso é um conjunto de pontos de dados que podem ser usados para treinar um modelo e fazer previsões sobre o futuro com base em dados históricos. Por exemplo, nosso aplicativo de exemplo de loja de recursos permite fazer previsões sobre atrasos de vôos com base em registros históricos de vôos.
Os recursos são o resultado de pipelines complexos de processamentos e transformações de dados. Quantidades enormes de dados de recursos permitem previsões precisas e projetos de aprendizado de máquina bem-sucedidos.
O que é uma Loja de Recursos?
A feature store is a central database in your machine-learning architecture that contains your real-time and historical features. Feature stores allow your data engineers and data scientists to use the same central repository to discover, monitor, and analyze features.
What does a feature store architecture look like?
Bancos de Dados Online e Offline na Loja de Recursos
Ao falarmos de lojas de recursos, os usuários geralmente diferenciam entre dois tipos de bancos de dados em sua arquitetura. Por um lado, eles usam um banco de dados online, e por outro, também podem ter um banco de dados offline. Esses bancos de dados têm propósitos diferentes.
Banco de dados offline: Este tipo de banco de dados armazena recursos processados historicamente, geralmente ingeridos em lotes. Os bancos de dados offline possuem dados de recursos que cobrem um grande período de tempo do passado; portanto, são úteis para trabalhar com um conjunto de recursos em um período específico da história.
Banco de dados online: Este banco de dados pode conter dados de fluxos de dados em tempo real e do banco de dados offline também. O armazenamento online é usado para servir ao modelo de produção e outras aplicações em tempo real com os dados de recursos mais atualizados. O desempenho e a baixa latência são realmente importantes aqui. Se seu banco de dados não for capaz de fornecer recursos em tempo real com rapidez suficiente, seu modelo pode usar dados desatualizados ou imprecisos para fazer previsões.
Modelagem de Dados da Loja de Recursos: Design de Tabela Larga vs. Estreita
Ao projetar o modelo de dados dentro de sua loja de recursos, seja uma loja offline ou online, você pode optar entre dois tipos de designs de tabela: largo e estreito. Cada um tem seus próprios benefícios e desvantagens. Vamos ver exemplos reais para ambos e por que eles podem ou não ser os melhores para seu caso de uso:
Design de Tabela Larga
O design de tabela larga inclui colunas separadas para cada recurso. Quanto mais tipos de recursos você deseja armazenar na tabela, mais colunas você terá que criar.
Exemplo de Layout de Tabela Larga
create table feature_store.wide_example( | |
date TIMESTAMP, | |
feature_id INT, | |
feature_col1 FLOAT, | |
feature_col2 FLOAT, | |
feature_col3 FLOAT, | |
feature_col4 FLOAT, | |
feature_col5 FLOAT, | |
feature_col6 FLOAT, | |
feature_col7 FLOAT | |
) |
Este tipo de layout pode ser fácil de começar, mas também se torna mais complicado de manter ao longo do tempo e difícil de fazer alterações. Sempre que você deseja introduzir um novo recurso (ou descartar um existente), você precisa modificar o esquema, o que pode ser complicado.
Design de Tabela Estreita
Design de tabelas estreitas é simples e mais fácil de manter. Isso ocorre porque o número de colunas não está destinado a aumentar ou diminuir no futuro, mesmo que você adicione ou remova recursos.
Exemplo de Layout de Tabela Estreita
create table feature_store.narrow_example( | |
feature_id INT, | |
feature_name TEXT, | |
feature_value FLOAT | |
) |
Usando este layout, você pode se safar de usar apenas duas colunas fixas a longo prazo para armazenar recursos. Uma para o nome do recurso (por exemplo, LATE_AIRCRAFT_DELAY) e uma para o valor desse recurso.
Em geral, tabelas estreitas podem exigir a conversão dos tipos de dados ao recuperar dados, pois não estão na forma correta (por exemplo, o tipo de coluna é FLOAT, mas, na realidade, o valor dos dados é um INTEGER. Felizmente, quando falamos de lojas de recursos, lojas online e offline já têm os dados em formato limpo numérico (FLOAT) adequado, e todos os valores têm o mesmo tipo de dados, o que significa que isso não é uma desvantagem no caso de lojas de recursos.
O que é o ScyllaDB e como pode ser usado em sua arquitetura de loja de recursos?
Para que equipes de machine learning construam aplicativos de inferência em tempo real, eles precisam de bancos de dados que possam retornar recursos em escala com baixa latência. ScyllaDB é um banco de dados NoSQL de alto desempenho e baixa latência que pode lidar com altos volumes de operações de leitura e escrita. Além disso, o ScyllaDB é um banco de dados confiável para cargas de trabalho críticas de loja de recursos em empresas como GE Healthcare ou ShareChat. Devido à sua alta disponibilidade e tolerância a falhas, ele pode fazer o trabalho pesado em sua infraestrutura onde desempenho e confiabilidade são importantes.
Além de utilizar o ScyllaDB como loja online em sua arquitetura de feature store, o ScyllaDB também é utilizado como uma solução de armazenamento híbrido online/offline. Com essa abordagem, você pode diminuir a carga de manutenção em sua equipe, tendo um único banco de dados para atender a todas as cargas de trabalho da sua feature store.
Os usuários costumam colocar o ScyllaDB no centro de sua arquitetura para persistir e recuperar recursos e metadados da feature store. Nesse caso, o ScyllaDB atua como loja online. Outros usuários também utilizam o ScyllaDB como armazenamento híbrido online/offline. O desempenho é um requisito chave para acelerar o desenvolvimento de modelos, e o desempenho de leitura e escrita do ScyllaDB consistentemente atende ou supera as expectativas dos usuários.
De fato, alguns usuários descobriram que o ScyllaDB poderia substituir vários bancos de dados e servir como uma única loja central para todas as suas necessidades de dados de aprendizado de máquina. Por exemplo, o ScyllaDB pode substituir o Redis (loja online) e o PostgreSQL (loja offline) — tornando a manutenção da infraestrutura menos dispendiosa e mais simples.
O ScyllaDB se destaca em casos de uso onde você requer baixa latência e alto desempenho. Além disso, o ScyllaDB é compatível com o Cassandra e o DynamoDB, o que significa que se você já usa um desses bancos de dados, pode migrar sem problemas sem precisar alterar suas consultas.
Tutorial: Loja Online ScyllaDB
Para ajudá-lo a começar com o ScyllaDB como sua loja online, criamos uma aplicação de exemplo (também disponível no GitHub).
- Clone o repositório
- Inscreva-se no ScyllaDB Cloud ou instale o ScyllaDB localmente
- Crie o esquema:
cqlsh “node-0.aws_us_east_1.xxxxxxxxx.clusters.scylla.cloud” 9042 -u scylla -p “password” -f schema.cql
- Conecte-se à instância com cqlsh e importe um conjunto de dados de amostra
cqlsh “node-0.aws_us_east_1.xxxxxxxxx.clusters.scylla.cloud” 9042 -u scylla -p “password” scylla@cqlsh> COPY feature_store.flight_features FROM ‘flight_features.csv’;
Este comando ingere um conjunto de dados de vôos de amostra:
op_carrier_fl_num|actual_elapsed_time|air_time|arr_delay|arr_time|cancellation_code|cancelled|carrier_delay|crs_arr_time|crs_dep_time|crs_elapsed_time|dep_delay|dep_time|dest|distance|diverted|fl_date |late_aircraft_delay|nas_delay|op_carrier|origin|security_delay|taxi_in|taxi_out|weather_delay|wheels_off|wheels_on| | |
—————–+——————-+——–+———+——–+—————–+———+————-+————+————+—————-+———+——–+—-+——–+——–+——————-+——————-+———+———-+——+————–+——-+——–+————-+———-+———+ | |
4317| 96.0| 73.0| -19.0| 2113.0| | 0.0| | 2132| 2040| 112.0| -3.0| 2037.0|MLI | 373.0| 0.0|2018-12-31 02:00:00| | |OO |DTW | | 5.0| 18.0| | 2055.0| 2108.0| | |
3372| 94.0| 74.0| 81.0| 1500.0| | 0.0| 0.0| 1339| 1150| 109.0| 96.0| 1326.0|RNO | 564.0| 0.0|2018-12-31 02:00:00| 81.0| 0.0|OO |SEA | 0.0| 3.0| 17.0| 0.0| 1343.0| 1457.0| | |
1584| 385.0| 348.0| -21.0| 2023.0| | 0.0| | 2034| 1700| 394.0| -9.0| 1658.0|SFO | 2565.0| 0.0|2018-12-31 02:00:00| | |UA |EWR | | 13.0| 33.0| | 1731.0| 2019.0| | |
4830| 119.0| 85.0| -35.0| 1431.0| | 0.0| | 1437| 1245| 136.0| -13.0| 1232.0|MSP | 546.0| 0.0|2018-12-31 02:00:00| | |OO |MSP | | 16.0| 18.0| | 1250.0| 1415.0| | |
2731| 158.0| 146.0| -19.0| 1911.0| | 0.0| | 1930| 1800| 160.0| -8.0| 1800.0|MSP | 842.0| 0.0|2018-12-31 02:00:00| | |WN |PVD | | 7.0| 7.0| | 1807.0| 1904.0| |
view rawgistfile1.txt hosted with ❤ by GitHub.
ScyllaDB + Feast
O ScyllaDB também se integra a ferramentas de armazenamento de recursos como Feast. Feast é uma popular loja de recursos de código aberto para o ML de produção. Você pode usar vários bancos de dados como sua loja de recursos online ao usar o Feast, incluindo o ScyllaDB.
Para configurar o ScyllaDB como uma loja online do Feast, você precisa editar o arquivo de configuração do Feast e adicionar as credenciais do ScyllaDB. O ScyllaDB é compatível com Cassandra, então você pode usar o conector interno do Cassandra do Feast.
# feature_store.yaml | |
project: scylla_feature_repo | |
registry: data/registry.db | |
provider: local | |
online_store: | |
type: cassandra | |
hosts: | |
– node-0.aws_us_east_1.xxxxxxxx.clusters.scylla.cloud | |
– node-1.aws_us_east_1.xxxxxxxx.clusters.scylla.cloud | |
– node-2.aws_us_east_1.xxxxxxxx.clusters.scylla.cloud | |
keyspace: feast | |
username: scylla | |
password: password |
view rawgistfile1.txt hosted with ❤ by GitHub.
Conclusão
Lojas de recursos são necessárias para engenharia de recursos e construção de modelos de machine learning. Se você está construindo uma infraestrutura de loja de recursos em tempo real, é necessário considerar cuidadosamente o desempenho. Requisitos de baixa latência, alto desempenho e alta taxa de transferência tornam os bancos de dados NoSQL um candidato perfeito como solução de armazenamento online em sua loja de recursos.
Source:
https://dzone.com/articles/tutorial-whats-an-aiml-feature-store-and-how-to-bu