Com todos os holofotes em frameworks gratuitos para processamento de Big Data, como Hadoop e Spark, a maioria dos profissionais não está familiarizada com o conceito de utilização das GPU’s (Graphical Processing Units ou Unidades de Processamento Gráfico) para processar soluções analíticas de Big Data. Ao falarmos de GPU’s, a grande maioria das pessoas que trabalham com tecnologia associam o termo ao contexto de games ou supercomputadores. Muitos acreditam que seja muito exótico a escolha de GPU’s como opção de hardware para processar aplicações de Analytics. Mas embora existam desafios, o fato é que cada vez mais as GPU’s tem sido usadas para análises avançadas utilizando algoritmos de Machine Learning, especialmente Deep Learning. Vamos começar compreendendo a diferença entre CPU e GPU.
GPU x CPU
Ao longo dos últimos anos tem havido uma revolução na computação, trazida pela empresa que tem se tornado ícone na produção de hardware para a indústria de games, a NVIDIA. A NVIDIA percebeu que as GPU’s, tipicamente utilizadas para renderização de imagens e vídeos, poderiam ser usadas para ajudar a resolver problemas matemáticos que requerem computação intensiva. Dessa forma, a NVIDIA desenvolveu as GPU’s para uso geral e a linguagem de programação CUDA (Compute Unified Device Architecture), permitindo que os poderosos processadores gráficos sejam usados para processar dados. Desde sistemas embarcados até utilização por usuários domésticos ou mesmo supercomputadores, podemos presenciar esta revolução acontecendo neste momento. Podemos agora escrever código que interage diretamente com a GPU.
As CPU’s (Central Processing Units ou Unidades de Processamento Central) são consideradas o cérebro dos computadores. Porém o cérebro tem recebido cada vez mais ajuda no trabalho de processamento. E essa ajuda tem vindo exatamente das GPU’s, ou como alguns tem chamado, a alma do computador.
Todos os computadores possuem chips que renderizam as imagens para os monitores. Mas nem todos os chips são criados da mesma forma. Chips integrados da Intel por exemplo, fornecem gráficos básicos que conseguem realizar a renderização de vídeos de baixa resolução, games básicos e aplicações usadas para tarefas mais simples, como o Microsoft Power Point por exemplo.
As GPU’s por outro lado, são uma outra classe de chips que fornecem funções muito além de gráficos básicos. As GPU’s possuem características avançadas como renderização de games 3D. As GPU’s são otimizadas para processar aplicações e realizar a mesma operação várias vezes, de forma bastante rápida, ideal para processamento iterativo, a base de algoritmos de Machine Learning.
As GPU’s foram originalmente criadas para renderizar gráficos. Mas devido sua alta performance e baixo custo, elas têm se tornado o novo padrão para o processamento de imagens. Suas aplicações incluem: restauração de imagens, segmentação, filtragem, interpolação e reconstrução. GPU’s são chips de computador que realizam cálculos matemáticos de forma veloz e paralelizada.
Para compreender a diferença entre CPU e GPU, veja a imagem abaixo. A CPU consiste em poucos “cores” otimizados para processamento serial sequencial, enquanto a GPU possui uma arquitetura paralelizada consistindo de milhares de “cores” menores e mais eficientes para tratar múltiplas tarefas simultaneamente.
A arquitetura das CPU’s é composta de poucos “cores” com memória de cache que podem tratar threads uma por vez, embora façam isso de forma bem rápida. Em contraste, as GPU’s possuem uma arquitetura composta de milhares de “cores” que conseguem tratar milhares de threads simultaneamente. Um mesmo software pode ser muito mais veloz sendo processado em uma GPU que em uma CPU e tudo isso com custo e utilização de energia menores.
E como funciona a computação acelerada via GPU?
A computação acelerada via GPU é o uso de unidades de processamento gráfico (GPU’s) em conjunto com as CPU’s, a fim de acelerar análise científica, analytics, engenharia, e aplicações. Basicamente o que faz a GPU, é receber da aplicação o processamento que requer maior uso intensivo de computação. A GPU recebe uma parte da aplicação, enquanto a CPU recebe o restante. Paralelizando a execução, as aplicações ficam mais velozes. E com a adoção do processamento em GPU feita pela Apple (com o OpenCL) e pela Microsoft (com DirectCompute), é uma questão de tempo para o processamento em GPU se tornar padrão no mercado.
E as Aplicações Analíticas?
A comunidade de desenvolvimento em Machine Learning tem começado a adotar sistemas baseados em GPU’s para algumas das atividades mais desafiadoras, principalmente para treinamento em Deep Learning. Treinar um algoritmo de Deep Learning utilizando CPU (Central Processing Unit) pode levar dias. Com o processamento feito em sistemas baseados em GPU’s, a mesma tarefa pode levar horas. Empresas como Google, Yahoo, Baidu, Microsoft e Facebook tem conseguido ótimo resultados no campo de computer vision e reconhecimento de voz, utilizando Deep Learning e GPU’s.
A GPU pode processar dados muitas vezes mais rápido que uma CPU. Mas claro, existem limitações. Processamento serial é menos efetivo em GPU que em CPU. Além disso, desenvolver algoritmos para GPU é bem mais complexo e requer um nível bem mais alto de sofisticação em programação. Alguns algoritmos simplesmente não podem ser paralelizados. Alguns sistemas mais novos permitem a utilização do melhor dos dois mundos: processamento serial sequencial com CPU’s e processamento altamente paralelizado com GPU’s. O gráfico abaixo mostra a comparação de algoritmos de Machine Learning sendo processados em CPU e GPU. A diferença no tempo de execução é significativa.
Deep Learning
O aprendizado profundo (Deep Learning) é a área de mais rápido crescimento em inteligência artificial, ajudando os computadores a compreender dados, como imagens, som e texto. Usando vários níveis de redes neurais, os computadores agora têm a capacidade de ver, aprender e reagir a situações complexas tão bem quanto ou melhor que os humanos. Isso está levando a uma forma totalmente diferente de pensar sobre seus dados, sua tecnologia, e os produtos e serviços que você oferece.
As soluções atuais de aprendizado profundo contam quase exclusivamente com a computação acelerada pelas placas de vídeo NVIDIA (GPU’s) para treinar e acelerar aplicações desafiadoras, como identificação de imagens, caligrafia e vozes. As GPU’s se destacam em cargas de trabalho paralelas e aceleram as redes neurais em até 10 a 20 vezes, reduzindo cada uma das muitas iterações de treinamento de dados de semanas para dias. De fato, as placas de vídeo têm acelerado o treinamento de redes neurais profundas em 50 vezes em apenas três anos — um ritmo muito mais rápido do que a lei de Moore — com outras 10 vezes previstas para os próximos anos. A inovação em Inteligência Artificial está acontecendo em ritmo acelerado. Atualmente, os computadores não estão só aprendendo, estão pensando por si mesmos. Isso está abrindo oportunidades fantásticas em aplicações como robôs, medicina e carros com direção automática. É possível projetar e implementar rapidamente aplicações de aprendizado profundo para aproveitar esses avanços incríveis.
As empresas atentas ao futuro que se aproxima rapidamente e que estão atentas às transformações, estão adotando o aprendizado profundo para lidar com volumes de dados que crescem exponencialmente, melhorias nos algoritmos de aprendizagem automática e avanços em hardware de computação . Isso as ajuda a encontrar novas formas de explorar a riqueza dos dados a seu alcance para desenvolver novos produtos, serviços e processos — e a criar uma vantagem competitiva inovadora.
Neste link você encontra diversos exemplos de como as GPU’s estão sendo usadas para Deep Learning em reconhecimento de imagens:
https://news.developer.nvidia.com/tag/image-recognition/
Frameworks para GPU
Existem 2 frameworks principais para programação em GPU: OpenCL (solução open-source para programação paralela em diferentes dispositivos incluindo GPU, CPU e FPGA’s) e CUDA da NVIDIA, que só pode ser usado em soluções da NVIDIA. Existe ainda o DirectCompute da Microsoft.
GPU e Linguagem R e Python
Existem alguns pacotes em linguagem R que permitem processar operações na GPU. Os pacotes gputools e gmatrixand estão disponíveis no CRAN, enquanto o pacote Rth pode ser instalado a partir do seu repositório no Github (link abaixo na seção de referências). Para a linguagem Python existe o PyCuda, que permite interação com o CUDA para a criação de aplicações analíticas que sejam processadas em GPU’s.
As GPU’s estão disponíveis em desktops, notebooks, servidores e supercomputadores pelo mundo, bem como em serviços em nuvem da Amazon, IBM e Microsoft. Você pode criar suas próprias soluções ou “conectar” uma solução de aprendizado profundo acelerada pelas GPU’s e pelas tecnologias de software de apoio. Como Cientista de Dados, você deve compreender as diferenças entre processamento paralelo, bem como as diferenças entre GPU e CPU, a fim de escolher o que vai oferecer maior performance a sua aplicação.
Referências:
Mythbusters Demo GPU versus CPU
GPU Technology Conference 2015 Leaps in Visual Computing
Programação Paralela com GPU e R
David Matos
excelente artigo!!!
Com hype da IA, acabei vindo parar aqui na minha pesquisa sobre uso da GPUs nos modelos de linguagem profunda. Consegui sanar minhas dúvidas. Parabéns pelo artigo!