{"id":3544,"date":"2024-07-08T08:00:00","date_gmt":"2024-07-08T11:00:00","guid":{"rendered":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/?p=3544"},"modified":"2025-09-08T15:00:40","modified_gmt":"2025-09-08T18:00:40","slug":"aceleracao-de-ia-atraves-de-gpu","status":"publish","type":"post","link":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/2024\/07\/08\/aceleracao-de-ia-atraves-de-gpu","title":{"rendered":"Acelera\u00e7\u00e3o de IA atrav\u00e9s de GPU"},"content":{"rendered":"\n<p><span style=\"font-weight: 400\">A utiliza\u00e7\u00e3o de modelos de intelig\u00eancia artificial cada vez mais potentes levanta a quest\u00e3o de como tornar o treinamento desses algoritmos mais r\u00e1pido. Para que os modelos de IA sejam mais precisos, \u00e9 necess\u00e1ria uma quantidade significativa de dados para treinar os algoritmos, o que, por consequ\u00eancia, demanda mais tempo de processamento. Esse fator, somado \u00e0 elevada complexidade dos algoritmos utilizados, incluindo v\u00e1rias estruturas de dados, recurs\u00f5es e diversos loops, resulta em um tempo de treinamento muito prolongado. Para isso, podemos utilizar um dos recursos mais interessantes e complexos da computa\u00e7\u00e3o para solucionar esse problema, a paraleliza\u00e7\u00e3o.<\/span><\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"size-medium wp-image-3541 aligncenter\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image1-300x300.jpg\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image1-300x300.jpg 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image1-150x150.jpg 150w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image1-768x768.jpg 768w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image1.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h2><strong>GPU x CPU<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">A CPU (Central Processing Unit) \u00e9 o c\u00e9rebro dos computadores, respons\u00e1vel pelo processamento das instru\u00e7\u00f5es e c\u00e1lculos de mem\u00f3ria em fra\u00e7\u00f5es de segundo, apresentando um excelente desempenho em processos sequenciais comuns em tarefas rotineiras. As CPUs mais modernas possuem m\u00faltiplos n\u00facleos (cores), permitindo a execu\u00e7\u00e3o paralela de tarefas, o que eleva a performance do sistema.<\/span><\/p>\n<p><span style=\"font-weight: 400\">No entanto, o n\u00famero de unidades de processamento paralelo em uma CPU n\u00e3o se compara \u00e0 quantidade de n\u00facleos presentes em uma GPU (Graphics Processing Unit), que pode chegar aos milhares. A GPU permite a execu\u00e7\u00e3o de in\u00fameros c\u00e1lculos em paralelo, especialmente opera\u00e7\u00f5es matriciais, otimizando a renderiza\u00e7\u00e3o de gr\u00e1ficos no computador.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Essa capacidade de paraleliza\u00e7\u00e3o proporciona uma vantagem significativa para a GPU no treinamento de modelos de IA, permitindo o processamento de grandes volumes de dados de forma eficiente. Para ilustrar a diferen\u00e7a entre essas duas unidades de processamento, podemos utilizar a seguinte analogia: imagine a CPU como um carro esportivo e a GPU como um \u00f4nibus. Se precisamos transportar pessoas de um ponto A para um ponto B em um determinado per\u00edodo, o carro esportivo, apesar de ser mais r\u00e1pido, s\u00f3 pode transportar uma pessoa por vez, enquanto o \u00f4nibus, embora mais lento, pode transportar 60 pessoas simultaneamente. Assim, a GPU, com sua capacidade de processamento paralelo, \u00e9 mais adequada para tarefas que envolvem grandes quantidades de dados.<\/span><\/p>\n<h2><strong>Porque a GPU tem performance melhor que a CPU em aplica\u00e7\u00f5es de IA?<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">A GPU tem performance melhor que a CPU em aplica\u00e7\u00f5es de IA devido a v\u00e1rias caracter\u00edsticas arquitet\u00f4nicas e funcionais que a tornam mais adequada para o processamento paralelo massivo e opera\u00e7\u00f5es de alta intensidade de c\u00e1lculo, que \u00e9 explorada atrav\u00e9s das seguintes caracter\u00edsticas:<\/span><\/p>\n<ol>\n<li><strong>M\u00faltiplos n\u00facleos de processamento: <\/strong>As GPUs possuem milhares de n\u00facleos de processamento, enquanto as CPUs geralmente t\u00eam de 2 a 64 n\u00facleos. Esses n\u00facleos de GPU s\u00e3o projetados para executar muitas opera\u00e7\u00f5es simultaneamente, tornando-as ideais para tarefas que podem ser divididas em opera\u00e7\u00f5es paralelas.<\/li>\n<li><strong>Unidades de C\u00e1lculos: <\/strong>As GPUs t\u00eam muitas unidades aritm\u00e9ticas e l\u00f3gicas (ALUs) e unidades de ponto flutuante (FPUs), que s\u00e3o essenciais para c\u00e1lculos matem\u00e1ticos intensivos, comuns em algoritmos de aprendizado profundo. Em compara\u00e7\u00e3o, as CPUs t\u00eam menos dessas unidades, focando mais na execu\u00e7\u00e3o de tarefas sequenciais.<\/li>\n<li><strong>Cache Compartilhado: <\/strong>As GPUs t\u00eam uma hierarquia de cache bem otimizada, com cache L2 compartilhado entre todos os n\u00facleos, permitindo acesso r\u00e1pido aos dados. Isso melhora a efici\u00eancia do processamento paralelo em compara\u00e7\u00e3o com as CPUs, que geralmente t\u00eam caches menores e menos otimizados para opera\u00e7\u00f5es paralelas.<\/li>\n<li><strong>Mem\u00f3ria Principal: <\/strong>As GPUs s\u00e3o equipadas com mem\u00f3ria de alta velocidade, como GDDR6 ou HBM2, que oferecem uma largura de banda muito maior em compara\u00e7\u00e3o com a mem\u00f3ria DDR4 usada nas CPUs. Isso permite que as GPUs acessem e transfiram grandes volumes de dados rapidamente, essencial para o treinamento de modelos de IA que processam muitos dados simultaneamente.<\/li>\n<\/ol>\n<h2><strong>Nvidia CUDA<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">NVIDIA CUDA \u00e9 uma plataforma de computa\u00e7\u00e3o paralela e um modelo de programa\u00e7\u00e3o desenvolvido pela NVIDIA. Ele permite que desenvolvedores utilizem GPUs NVIDIA para realizar computa\u00e7\u00e3o geral, n\u00e3o apenas para gr\u00e1ficos, mas tamb\u00e9m para uma ampla gama de aplica\u00e7\u00f5es computacionais intensivas.<\/span><\/p>\n<p><span style=\"font-weight: 400\">A CUDA oferece um modelo de programa\u00e7\u00e3o paralela onde os desenvolvedores podem escrever c\u00f3digo para ser executado diretamente nas GPUs NVIDIA. Isso inclui n\u00e3o apenas opera\u00e7\u00f5es gr\u00e1ficas, mas tamb\u00e9m c\u00e1lculos cient\u00edficos, simula\u00e7\u00f5es f\u00edsicas, aprendizado de m\u00e1quina, e muito mais.<\/span><\/p>\n<p><span style=\"font-weight: 400\">CUDA \u00e9 suportado pela linguagem de programa\u00e7\u00e3o C\/C++, permitindo que os desenvolvedores escrevam kernels CUDA (fun\u00e7\u00f5es que ser\u00e3o executadas paralelamente na GPU) diretamente dentro de seu c\u00f3digo C\/C++ existente. Comparado \u00e0s CPUs tradicionais, GPUs equipadas com CUDA podem realizar c\u00e1lculos paralelos de forma muito mais r\u00e1pida, especialmente em aplica\u00e7\u00f5es intensivas em c\u00e1lculos.&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400\">No exemplo abaixo, \u00e9 poss\u00edvel ganhar desempenho ao utilizar a GPU para rodar o c\u00f3digo de forma paralela utilizando extens\u00f5es da CUDA.<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-3543 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image3.png\" alt=\"\" width=\"524\" height=\"256\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image3.png 524w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image3-300x147.png 300w\" sizes=\"(max-width: 524px) 100vw, 524px\" \/><\/p>\n<h2><strong>O que s\u00e3o tensores?<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">Um tensor \u00e9 uma estrutura de dados que pode ser usada para representar dados multidimensionais. Essencialmente, \u00e9 uma generaliza\u00e7\u00e3o de matrizes para dimens\u00f5es superiores.As opera\u00e7\u00f5es com tensores, como adi\u00e7\u00e3o, multiplica\u00e7\u00e3o, transposi\u00e7\u00e3o, etc., s\u00e3o essenciais para a constru\u00e7\u00e3o e treinamento de modelos de IA. Essas opera\u00e7\u00f5es s\u00e3o eficientes e podem ser paralelizadas, aproveitando a arquitetura das GPUs.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Um tensor pode se apresentar na seguinte forma:&nbsp;<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"><strong>Escalar:<\/strong> Um \u00fanico n\u00famero (0\u00aa ordem tensor).<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"><strong>Vetor:<\/strong> Uma lista de n\u00fameros, ou uma matriz unidimensional (1\u00aa ordem tensor).<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"><strong>Matriz:<\/strong> Uma tabela de n\u00fameros, ou uma matriz bidimensional (2\u00aa ordem tensor).<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"><strong>Tensor de Ordem Superior:<\/strong> Matrizes de 3\u00aa ordem ou superior.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Por exemplo, uma imagem colorida pode ser representada como um tensor tridimensional (altura, largura, canais de cor).<\/span><\/p>\n<p><span style=\"font-weight: 400\">O TensorFlow \u00e9 um framework de aprendizado de m\u00e1quina que utiliza tensores para representar dados e opera\u00e7\u00f5es. Tudo no TensorFlow \u00e9 constru\u00eddo em torno do conceito de tensores e grafos computacionais.<\/span><\/p>\n<h2><strong>Como utilizar GPUs gratuitamente no Google Colab:<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">O<\/span> <a href=\"https:\/\/colab.google\"><span style=\"font-weight: 400\">Google Colab<\/span><\/a><span style=\"font-weight: 400\"> fornece um servi\u00e7o de hospedagem de Jupyter notebook interativo com python, al\u00e9m de prover acesso gratuito a recursos de computa\u00e7\u00e3o como GPUs e TPUs. Para conseguir utilizar a GPU que o servi\u00e7o oferece, voc\u00ea precisa primeiro criar um notebook. Ap\u00f3s isso, v\u00e1 at\u00e9 a op\u00e7\u00e3o \u201cAlterar o tipo de ambiente de execu\u00e7\u00e3o\u201d e selecione o tipo de recurso que voc\u00ea deseja utilizar.<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-3542 \" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image2-300x200.jpg\" alt=\"\" width=\"437\" height=\"291\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image2-300x200.jpg 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image2-768x511.jpg 768w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image2-272x182.jpg 272w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2024\/07\/image2.jpg 857w\" sizes=\"(max-width: 437px) 100vw, 437px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Utilizando o c\u00f3digo em python abaixo, voc\u00ea poder\u00e1 verificar se est\u00e1 com acesso a GPU do ambiente:<\/span><\/p>\n<p><code><span style=\"font-weight: 400\">i<\/span><span style=\"font-weight: 400\">mport tensorflow as tf<\/span><\/code><\/p>\n<p><code><span style=\"font-weight: 400\">device_name = tf.test.gpu_device_name()<\/span><\/code><\/p>\n<p><code><span style=\"font-weight: 400\">if device_name != '\/device:GPU:0':<\/span><\/code><\/p>\n<p><code><span style=\"font-weight: 400\">&nbsp;&nbsp;raise SystemError('GPU n\u00e3o encontrada')<\/span><\/code><\/p>\n<p><code><span style=\"font-weight: 400\">print('Nome da GPU: {}'.format(device_name))<\/span><\/code><\/p>\n<p><span style=\"font-weight: 400\">Utilizar a GPU no Google Colab \u00e9 extremamente \u00fatil para acelerar o treinamento de modelos de aprendizado de m\u00e1quina, especialmente aqueles que exigem processamento intensivo de dados.<\/span><\/p>\n<h2><strong>Conclus\u00e3o<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">A arquitetura paralela das GPUs, juntamente com a alta largura de banda de mem\u00f3ria e efici\u00eancia energ\u00e9tica, as torna superiores \u00e0s CPUs em aplica\u00e7\u00f5es de IA. O suporte robusto a frameworks e bibliotecas de IA, como CUDA e TensorFlow, tamb\u00e9m contribui para sua ado\u00e7\u00e3o generalizada em tarefas de aprendizado de m\u00e1quina e aprendizado profundo. As GPUs continuam a desempenhar um papel crucial na acelera\u00e7\u00e3o e evolu\u00e7\u00e3o da intelig\u00eancia artificial.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A utiliza\u00e7\u00e3o de modelos de intelig\u00eancia artificial cada vez mais potentes levanta a quest\u00e3o de como tornar o treinamento desses algoritmos mais r\u00e1pido. Para que os modelos de IA sejam mais precisos, \u00e9 necess\u00e1ria uma quantidade significativa de dados para treinar os algoritmos, o que, por consequ\u00eancia, demanda mais tempo de processamento. Esse fator, somado [&hellip;]<\/p>\n","protected":false},"author":6950,"featured_media":3545,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[124,112],"tags":[202,149],"class_list":["post-3544","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-destaques","category-redacao","tag-ia","tag-redacao"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/3544","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/users\/6950"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/comments?post=3544"}],"version-history":[{"count":0,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/3544\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media\/3545"}],"wp:attachment":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media?parent=3544"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/categories?post=3544"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/tags?post=3544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}