1
resposta

Como usar o Mahout em grandes datasets?

Ola, pessoal. Tudo bem?

Estou tentando aplicar o conteudo do curso de Machine Learning: Introdução ao sistemas de recomendações em um dataset de filmes do Kaggle.

Esse dataset possui dois arquivos de avaliacoes, dentro do padrao aceito pelo FileDataModel, ou seja, userID,itemID[,preference[,timestamp]] (se removida a primeira linha).

Um dos arquios se chama ratings_small.csv, o qual conta com aproximadamente 10 mil linhas e para o qual o modelo de recomendacao roda perfeitamente. O outro arquivo, ratings.csv, conta com mais de 26 milhoes de linhas, e o modelo de recomendacoes explode, exibindo as seguintes mensagens no log:

19/07/23 02:20:06 INFO FileDataModel: Reading file info...
19/07/23 02:20:09 INFO FileDataModel: Processed 1000000 lines
19/07/23 02:20:10 INFO FileDataModel: Processed 2000000 lines
19/07/23 02:20:11 INFO FileDataModel: Processed 3000000 lines
19/07/23 02:20:12 INFO FileDataModel: Processed 4000000 lines
19/07/23 02:20:14 INFO FileDataModel: Processed 5000000 lines
19/07/23 02:20:16 INFO FileDataModel: Processed 6000000 lines
19/07/23 02:20:17 INFO FileDataModel: Processed 7000000 lines
19/07/23 02:20:20 INFO FileDataModel: Processed 8000000 lines
19/07/23 02:20:24 INFO FileDataModel: Processed 9000000 lines
19/07/23 02:20:33 INFO FileDataModel: Processed 10000000 lines
[error] (run-main-0) java.lang.OutOfMemoryError: GC overhead limit exceeded
[error] java.lang.OutOfMemoryError: GC overhead limit exceeded
.
.
.

Estou ciente de que essa eh uma situacao extrema e que, para fins didaticos, o dataset menor ja eh o suficiente. Mas no mundo real, onde industrias contam com gigas e gigas de dados armazenados e mais sendo gerados a todo instante, como esse problema eh abordado?

Imagino que uma das linhas possiveis seja utilizando tecnologias de Big Data para processamento paralelo, como o Spark ou Hadoop. Porem, alguem tem uma resposta mais palpavel, para que eu consiga aplicar alguma tecnica ou tecnologia e conseguir treinar esse modelo em datasets gigantescos?

Codigo fonte (Scala + Mahout): https://github.com/crissilvaeng/movies-recommender

Dataset no Kaggle: https://www.kaggle.com/rounakbanik/the-movies-dataset)

Obrigada!

1 resposta

Oi Cristina, tudo bem? Eu não sou um especilista no assunto, mas o erro que aconteceu com você é relativo ao consumo de memória. O processador em si, nem chegou a ser o problema.

Mas como você disse, existem as estratégias de processamento paralelo, não necessariamente por causa do poder de processamento do processador, mas também pelo compartilhamento de memória.

O que acredito acontecer nos casos de gigas e teras de dados é a montagem de um cluster apenas para o treinamento do algoritmo. As tecnologias de nuvem possibilitaram isso de forma elegante.

Acredito sim que possam haver otimizações de código para ganho de performance, mas a limitação do hardware das nossas máquinas pessoais realmente serão uma barreira.

Sinto muito não poder ajudar de forma mais direta, realmente essa não é uma especialidade minha, mas queria deixar meu comentário.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software