Big Data
Big data são dados demasiado volumosos, rápidos ou variados para as ferramentas de uma única máquina. Aborda os três Vs, MapReduce e Spark, e os conjuntos de dados por detrás da IA moderna.
Big data é um conjunto de dados cujo tamanho, taxa de chegada ou variedade de formatos excede a capacidade de armazenamento e processamento de uma única máquina e das ferramentas convencionais de banco de dados; por isso, os dados são distribuídos por clusters de máquinas que trabalham em paralelo. Em 2001, o analista Doug Laney, da META Group, descreveu o desafio por meio dos três Vs: volume, a quantidade de dados; velocidade, a rapidez com que chegam e precisam ser processados; e variedade, a combinação de tabelas estruturadas, registros, texto, imagens, áudio e vídeo. Definições posteriores acrescentam veracidade, isto é, o grau de confiabilidade dos dados, e valor. No aprendizado de máquina, big data é tanto a matéria-prima quanto um desafio de engenharia: os modelos melhoram com mais dados de treinamento, e os pipelines que coletam, limpam e disponibilizam esses dados consomem grande parte do esforço necessário para criá-los.
Big data em IA e visão computacional#
O aprendizado profundo cresceu junto com conjuntos de dados grandes demais para um único disco. O ImageNet, apresentado em 2009, chegou a mais de 14 milhões de imagens rotuladas, e as 1,28 milhão de imagens de treinamento do desafio de 1.000 classes foram usadas para treinar a rede neural convolucional AlexNet, vencedora da competição de 2012. O conjunto de dados SA-1B da Meta, lançado em 2023 com o Segment Anything Model, contém 11 milhões de imagens e 1,1 bilhão de máscaras de segmentação; a Meta pré-treinou o Llama 3 com mais de 15 trilhões de tokens de texto. As leis de escala explicam por que essas coleções são vantajosas: a perda diminui de forma previsível à medida que dados, parâmetros e capacidade computacional aumentam juntos.
Na visão computacional, o volume vem de frotas de câmeras e sensores. Um único veículo autônomo registra fluxos de câmeras, radar e lidar a cada hora de condução, enquanto fábricas e lojas acrescentam milhares de transmissões contínuas de vídeo. A velocidade é importante quando os resultados são necessários à medida que os dados chegam, como na inferência em tempo real de vídeos de trânsito ou de linhas de produção. A variedade abrange imagens e vídeos, além de anotações, metadados de sensores e registros. Mais dados só ajudam quando os rótulos são precisos; por isso, grandes conjuntos de dados de visão dependem de limpeza de dados, remoção de duplicatas e aprendizado ativo para escolher quais imagens novas vale a pena rotular.
Como big data é armazenado e processado#
Os sistemas de big data escalam horizontalmente: distribuem dados e computação por muitas máquinas comuns, em vez de usar um único servidor maior. O artigo do Google sobre MapReduce, de 2004, descreveu o modelo popularizado pelo Apache Hadoop de código aberto: dividir a entrada em fragmentos, executar uma função map em cada fragmento em paralelo na máquina que o armazena e reduzir os resultados parciais a uma única resposta. O Apache Spark, iniciado na UC Berkeley em 2009, mantém resultados intermediários na memória, o que torna tarefas iterativas, como o treinamento de modelos, muito mais rápidas que o MapReduce baseado em disco. Os arquivos brutos geralmente ficam em armazenamento de objetos na nuvem, organizado como um data lake; formatos colunares, como o Apache Parquet, permitem que uma consulta leia apenas as colunas necessárias, e plataformas de streaming, como o Apache Kafka, transportam eventos de alta velocidade.
Este exemplo executa as etapas map e reduce em três fragmentos de rótulos de imagens usando a biblioteca padrão do Python:
from collections import Counter
from multiprocessing import Pool
# Três fragmentos de rótulos de imagens; um cluster armazena cada fragmento em uma máquina diferente
shards = [
["car", "person", "car", "bus"],
["person", "person", "bicycle"],
["car", "person", "dog", "car"],
]
def count_labels(shard):
"""Map step: count the labels in one shard."""
return Counter(shard)
if __name__ == "__main__":
with Pool(processes=3) as pool:
partial_counts = pool.map(count_labels, shards) # um processo worker por fragmento
# Etapa reduce: combinar as contagens parciais em um total
totals = sum(partial_counts, Counter())
print(totals.most_common())Cada fragmento é contado em seu próprio processo, e a etapa reduce combina as contagens parciais em [('car', 4), ('person', 4), ('bus', 1), ('bicycle', 1), ('dog', 1)]. O Spark e o Hadoop executam as mesmas duas etapas em milhares de máquinas, enviando o código map às máquinas que contêm cada fragmento.
Treinamento de modelos com big data#
Uma execução de treinamento lê big data em lotes. Os carregadores de dados decodificam de algumas dezenas a algumas centenas de imagens por vez, a partir do disco local ou do armazenamento de objetos, usando vários processos workers; assim, o conjunto de dados inteiro não precisa caber na memória, e o treinamento distribuído divide cada lote entre várias GPUs. Para detecção de objetos, o conjunto de detecção Open Images V7 do Google tem 561 GB para baixar e contém 1,74 milhão de imagens de treinamento distribuídas por 601 classes, muito mais do que a maioria das máquinas consegue manter na RAM. Quando solicitado a armazenar um conjunto de dados em cache na memória com cache="ram", o treinamento do Ultralytics YOLO estima o tamanho decodificado usando 30 imagens aleatórias e cria o cache somente se o dobro dessa estimativa couber na RAM disponível; conjuntos de dados maiores são lidos e decodificados do disco a cada época.
Big data versus termos relacionados#
- Mineração de dados: Busca padrões, anomalias e associações em dados de qualquer tamanho, geralmente executada em plataformas de big data.
- Análise de dados: Consulta, resume e visualiza dados para apoiar decisões; a análise de big data é a parte que precisa de mecanismos distribuídos.
- IA centrada em dados: Melhora modelos ao aprimorar a qualidade e a abrangência dos dados, algo especialmente importante quando um conjunto de dados é grande demais para ser inspecionado manualmente.










