BIG DATA MACHINE LEARNING

Como a neurolake reduziu em 80% o custo dos modelos em produção com amazon dynamodb

Em 2015, surgiu a Neurolake, plataforma de Inteligência Artificial e Big Data criada pela Neurotech, que se propõe a facilitar a construção de soluções de Machine Learning as a Service (MLaaS). Escalável e de fácil utilização, a plataforma procura unir o desempenho e poder das tecnologias em cloud sem abrir mão da facilidade de uso e principalmente com foco em baixo custo.

Um dos componentes da Neurolake, o Alfred, é responsável pela disponibilização dos serviços da plataforma aos clientes, incluindo os modelos de machine learning. Dois dos pontos mais críticos quando pensamos nas necessidades deste produto são baixo tempo de resposta e escalabilidade. Isso faz com que sejam empregadas, no Alfred, muitas tecnologias para processamento em tempo real, que, por sua vez, implicam em custos elevados de um ambiente responsivo funcionando a todo vapor.

Devido a esses fatores, é no Alfred que enfrentamos cada
vez mais desafios e percebemos como pequenas e simples
mudanças na arquitetura impactam diretamente na redução
de custos de infraestrutura.

Disponibilização de modelos de machine learning com o Alfred

Os modelos no Alfred são disponibilizados por meio de uma API, pela qual nossos clientes conseguem fazer milhares de requisições por segundo, com um tempo de resposta extremamente baixo (no máximo 100 ms), alta disponibilidade e de modo escalável.

Por trás da disponibilização dos modelos, existe uma etapa de preparação imprescindível: o enriquecimento, que é responsável por processar os dados provenientes dos clientes, utilizando inteligência e principalmente o lago de dados disponível na própria plataforma. O resultado desse processo é a criação de um conjunto de variáveis fortemente relacionadas ao problema do cliente.

Essas variáveis nada mais são do que informações que servem como entrada para um modelo preditivo. O modelo recebe essas informações e retorna um score como resultado do processo de predição. Esse processo de enriquecimento deve ser realizado no menor tempo possível para atender a requisitos de tempo impostos pelos clientes através de SLAs (Service Level Agreement).

A escolha do Banco

Como parte desta solução, precisávamos de um banco de dados capaz de armazenar milhares dessas features, e que fosse capaz de retornar essas informações em questão de milissegundos, independente da quantidade de dados armazenados, de forma escalável e com um custo controlável.

Outros pontos que deveriam ser levados em consideração estão relacionados com a manutenção, gestão e escalabilidade desse banco. Como um dos requisitos, queríamos evitar ao máximo o trabalho manual na configuração, gerenciamento, custo e instalação da infra-estrutura deste banco mas sem abrir mão da confiabilidade e disponibilidade dos nossos dados.

Dadas essas restrições, avaliamos vários bancos e sistemas de armazenamento que pudessem suprir nossas demandas. Dentre as opções, avaliamos tecnologias como o Cassandra, HBase, Amazon RDS, Amazon Aurora, Elastic Search, Redis, Amazon DynamoDB e outros. O banco de dados que obteve a maior pontuação nos pontos que definimos como chaves foi Amazon DynamoDB.

Amazon DynamoDB

O Amazon DynamoDB é um banco de dados baseado em chave-valor, isso significa que o seu diferencial reside principalmente no seu baixo tempo de resposta e alta escalabilidade. Por ser um serviço serverless, conseguiríamos também reduzir consideravelmente o nosso esforço operacional de gestão e manutenção dos servidores.

O poder de escala do Amazon DynamoDB é incrível, conseguindo escalar em milhões de registros mantendo o seu tempo de resposta muito baixo (muitas vezes menor que 10 milissegundos) de forma estável e confiável.

Como utilizaremos esse banco majoritariamente para leitura, temos outro ponto positivo para o Amazon DynamoDB, o custo de leitura é até 5x mais barato que o custo de escrita (por milhão de registros).

Exatamente o que precisávamos para nossa solução!

Como bons adeptos à cultura de corresponsabilidade, antes mesmo de colocar qualquer coisa em produção, sempre avaliamos todos os nossos pilares — um dos principais é o custo.

Fazendo as contas

Um ótimo serviço para cálculo de custos na plataforma da AWS é o: AWS Simple Monthly Calculator, uma ferramenta gratuita disponibilizada pela própria AWS. Nela podemos simular diversos cenários de utilização dos mais diversos serviços da plataforma e, automaticamente, receber uma estimativa relativamente precisa de quanto será o custo daquele serviço mensalmente, dado a sua utilização.

Decidimos fazer uma simples simulação de um caso de uso com o Amazon DynamoDB com precificação on-demand e com os seguintes requisitos:

Precisamos armazenar uma tabela de features de 500gb em que cada registro tenha aproximadamente 300kb. Esperamos ter em torno de 100 milhões de leituras nessa tabela mensalmente, com 20 milhões de atualizações (escritas) também mensalmente (vamos desconsiderar a carga inicial total do banco no início).Colocando esses valores na ferramenta, pudemos observar uma previsão mensal de custos apenas com o Amazon DynamoDB em torno de: US$ 10.456,56 mensais!

Um custo mensal bastante assustador para um serviço, tornando completamente inviável o uso do Amazon DynamoDB na nossa solução.

Refazendo as contas

Começamos então a investigar mais a fundo o motivo principal para o custo do Amazon DynamoDB estar tão elevado, e como poderíamos reduzir ao máximo esse custo principalmente sem afetar o nosso operacional e requisitos da nossa solução.

Após realizarmos alguns estudos, percebemos que boa parte do custo do Amazon DynamoDB está relacionado basicamente com o tamanho do registro em si, ou seja: o tamanho de cada chave-valor que estava armazenado era responsável diretamente pelo custo do serviço. Tão relacionadas, que ao realizar o teste do mesmo caso de uso anterior e apenas reduzindo em 50% o tamanho do registro (de 300kb para 150kb), tivemos uma surpresa. O custo estimado caiu para: US$ 5.314,06 mensais!

Falando em números, uma redução de 50% no tamanho do registro impactou diretamente na mesma redução do custo total!

Solução

Para reduzir o tamanho dos nossos registros sem perder informações, decidimos utilizar um algoritmo de compactação que nos permitisse reduzir o tamanho total dos nossos dados de forma significativa mas sem adicionar muito custo de processamento para descompactação e que fosse paralelizável (utilizamos muitas ferramentas de big data que necessitam disso), e após várias análises decidimos por utilizar o formato LZMA de compressão.

Realizamos a compressão apenas dos valores de cada registro, deixando as chaves dos mesmos no seu formato original para facilitar os processos de busca.

Utilizando essa compactação simples,
conseguimos reduzir o nosso registro para
10% a 15% do seu tamanho original.

Voltando para nosso caso de uso — agora com o tamanho por registro atualizado para 45 kb (compactado em 15% do valor original que era 300kb), e utilizando os demais valores iguais — , obtivemos a seguinte expectativa de custo: US$ 1.711,56 mensais!

Uma redução em mais de 8,5 mil dólares mensais se comparado com nossas avaliações iniciais! Uma diferença enorme principalmente considerando a mesma capacidade de processamento e armazenamento dos dados, com baixíssimo overhead de processamento (algo em torno de 10ms a mais para descompactar cada registro). Agora, sim, o Amazon DynamoDB tinha se tornado uma solução muito mais viável!

Conclusão

No universo dos sistemas de alta disponibilidade e confiabilidade, utilizar tecnologias de ponta quase sempre implica em um custo maior. Saber como utilizar essas tecnologias, suas aplicações e melhores práticas pode significar a viabilidade financeira de uma solução ou não. Vale sempre lembrar que, no mundo de infraestruturas em cloud, sempre temos prontas, no famoso “plug-and-play”, soluções com diversos componentes já pré-configurados que estão prontos para serem utilizados com uma curva de aprendizado muito menor que soluções on-demand, porém convertendo estas vantagens em um custo maior. E é exatamente neste mundo em que experimentar novas idéias e soluções fora da caixa — às vezes pequenas e simples adaptações como a mostrada aqui — causam um impacto enorme nos custos ao final do mês e que podem fazer total diferença para o seu negócio!

CONHEÇA O BLOG DA NEUROLAKE

Conteúdo retirado de NEUROLAKE