O PyTorch é um dos prin­ci­pais fra­meworks de deep learning do mundo e é usado tanto por equipes de pesquisa quanto por startups e grandes empresas de tec­no­lo­gia. Ele permite de­sen­vol­ver, treinar e escalar redes neurais com fa­ci­li­dade.

O que é PyTorch?

O PyTorch é um framework open source para machine learning. Ele é baseado em Python, o que o torna es­pe­ci­al­mente acessível para ini­ci­an­tes, mas, ao mesmo tempo, é poderoso o su­fi­ci­ente para projetos complexos de deep learning. O PyTorch permite a criação e a oti­mi­za­ção flexíveis de redes neurais e oferece uma sintaxe intuitiva, que lembra código Python comum.

O framework é muito difundido, prin­ci­pal­mente na pesquisa, pois sua lógica de com­pu­ta­ção dinâmica permite iterações rápidas. Ao mesmo tempo, ele vem sendo cada vez mais usado na indústria, já que os modelos podem ser usados em produção ou ex­por­ta­dos sem di­fi­cul­dade. Graças à in­te­gra­ção estreita com ace­le­ra­ção por GPU, ele também oferece alto de­sem­pe­nho. O PyTorch continua evoluindo e se beneficia de uma co­mu­ni­dade ativa, além de atu­a­li­za­ções regulares.

Soluções de IA
Mais poder digital com In­te­li­gên­cia Ar­ti­fi­cial
  • Online em segundos
  • Aumente seu cres­ci­mento com marketing de IA
  • Economize tempo e recursos

Como o PyTorch funciona?

O PyTorch se baseia na ideia de re­pre­sen­tar cálculos numéricos de forma eficiente e flexível por meio de operações com tensores. Tensores são es­tru­tu­ras de dados mul­ti­di­men­si­o­nais que funcionam de forma se­me­lhante a arrays Python, porém são oti­mi­za­das para com­pu­ta­ção de alto de­sem­pe­nho. O framework executa os cálculos passo a passo e cria o fluxo de com­pu­ta­ção sub­ja­cente di­na­mi­ca­mente durante a execução do programa. Assim, cada etapa de cálculo é executada ime­di­a­ta­mente, de forma parecida com o código Python comum. Com isso, o PyTorch se posiciona de maneira diferente de sistemas estáticos, nos quais todo o grafo precisa ser definido an­te­ci­pa­da­mente.

Essa estrutura dinâmica torna o PyTorch muito intuitivo:

  • Es­tru­tu­ras de controle, como loops, condições ou fluxos re­cur­si­vos, são in­te­gra­das di­re­ta­mente ao processo de com­pu­ta­ção em tempo de execução.
  • De­sen­vol­ve­do­ras e de­sen­vol­ve­do­res não precisam de nenhuma sintaxe especial nem de soluções al­ter­na­ti­vas (wor­ka­rounds).
  • Ao mesmo tempo, o PyTorch consegue rastrear au­to­ma­ti­ca­mente todas as operações e, a partir disso, calcular as derivadas ne­ces­sá­rias para o trei­na­mento de redes neurais.

Outro princípio fun­da­men­tal é a abstração de hardware sem in­ter­rup­ções. Os tensores podem se mover de forma flexível entre a CPU e a GPU, sem que você precise re­for­mu­lar os cálculos sub­ja­cen­tes. O PyTorch se encarrega de executar as operações da forma mais eficiente possível.

Os prin­ci­pais recursos do PyTorch

A variedade de funções torna o PyTorch atraente tanto para a pesquisa quanto para as empresas. Os recursos a seguir estão entre os com­po­nen­tes mais im­por­tan­tes da bi­bli­o­teca Python:

  • Grafos de com­pu­ta­ção dinâmicos: o PyTorch cria grafos de com­pu­ta­ção durante a execução. Isso é es­pe­ci­al­mente útil para modelos cuja estrutura pode mudar durante o trei­na­mento, por exemplo, em redes re­cur­si­vas ou ge­ne­ra­ti­vas, como GANs. Isso também sim­pli­fica bastante o debugging, pois você pode trabalhar no depurador padrão do Python.
  • Autograd para di­fe­ren­ci­a­ção au­to­má­tica: o módulo Autograd calcula gra­di­en­tes au­to­ma­ti­ca­mente com base nas operações exe­cu­ta­das em tensores. Assim, dispensa-se a derivação manual complexa de funções ma­te­má­ti­cas. Es­pe­ci­al­mente no deep learning, isso acelera sig­ni­fi­ca­ti­va­mente o processo de de­sen­vol­vi­mento.
  • Suporte a GPU: com apenas uma linha de código, você pode mover tensores para a GPU. O PyTorch também oferece suporte às tec­no­lo­gias NVIDIA CUDA e cuDNN para acelerar de forma sig­ni­fi­ca­tiva operações com alto custo com­pu­ta­ci­o­nal. Isso torna o framework ideal para grandes modelos de imagem, texto ou fala.
  • Módulo torch.nn: esse módulo dis­po­ni­bi­liza com­po­nen­tes prontos, como camadas (layers) e funções de ativação. Com isso, é possível criar até mesmo modelos complexos de forma rápida e or­ga­ni­zada. Ao mesmo tempo, você mantém total controle sobre cada linha do processo de trei­na­mento.
  • torch.compile para uma execução otimizada: desde a versão 2.0, o PyTorch oferece, com torch.compile(), uma forma simples de otimizar modelos au­to­ma­ti­ca­mente. Assim, muitos modelos podem ser treinados e exe­cu­ta­dos de maneira bem mais rápida, sem ne­ces­si­dade de al­te­ra­ções no código.
  • Co­mu­ni­dade e ecos­sis­tema fortes: bi­bli­o­te­cas como TorchVision, TorchText, PyTorch Lightning e Lightning AI ampliam o PyTorch com funções es­pe­ci­a­li­za­das. Além disso, a co­mu­ni­dade oferece muitas boas práticas, tutoriais e modelos. Assim, começar fica es­pe­ci­al­mente fácil, inclusive para ini­ci­an­tes.

As vantagens e des­van­ta­gens do PyTorch

O PyTorch convence pela fle­xi­bi­li­dade, ve­lo­ci­dade e fa­ci­li­dade de uso. Ainda assim, como em qualquer framework, também há aspectos que podem ser con­si­de­ra­dos des­van­ta­gens em de­ter­mi­na­dos projetos.

Vantagens

O PyTorch se destaca por uma sintaxe muito se­me­lhante à do Python e intuitiva, o que torna o início es­pe­ci­al­mente fácil. Os grafos de com­pu­ta­ção gerados di­na­mi­ca­mente garantem que os modelos possam ser iterados ra­pi­da­mente e depurados sem com­pli­ca­ções. Ao mesmo tempo, o framework oferece um suporte robusto a GPU, sendo adequado também para modelos de deep learning de grande porte. Seu ecos­sis­tema amplo já cobre, de forma nativa, áreas centrais como as seguintes:

Des­van­ta­gens

A grande liberdade na es­tru­tu­ra­ção de projetos traz, ao mesmo tempo, maiores exi­gên­cias para uma con­fi­gu­ra­ção bem planejada. Além disso, por muito tempo, algumas fer­ra­men­tas de produção no ecos­sis­tema do Ten­sor­Flow foram con­si­de­ra­das mais maduras, embora o PyTorch tenha avançado bastante nos últimos anos. Es­pe­ci­al­mente em grandes im­ple­men­ta­ções in­dus­tri­ais, a adoção pode se tornar complexa, sobretudo quando é preciso combinar di­fe­ren­tes ambientes de hardware, como CPU, GPU ou dis­po­si­ti­vos de edge. A curva de apren­di­zado também aumenta ra­pi­da­mente assim que entram em cena modelos muito grandes ou trei­na­mento dis­tri­buído. Para ini­ci­an­tes, o PyTorch também exige uma com­pre­en­são básica de conceitos como tensores, di­fe­ren­ci­a­ção au­to­má­tica e a criação dos próprios loops de trei­na­mento.

Vantagens e des­van­ta­gens do PyTorch em resumo

Vantagens Des­van­ta­gens
Intuitivo de usar, no estilo Python Muitas vezes, exige mais código próprio
Grafos dinâmicos e depuração avançada Trei­na­mento complexo em con­fi­gu­ra­ções grandes
Excelente in­te­gra­ção com GPU A im­ple­men­ta­ção em produção às vezes é exigente
Adequado para pesquisa e indústria Curva de apren­di­zado re­la­ti­va­mente alta para projetos complexos
Muitas bi­bli­o­te­cas com­ple­men­ta­res Não é uma solução completa

Áreas de aplicação do PyTorch

O PyTorch é usado em uma ampla variedade de cenários práticos:

  • No pro­ces­sa­mento de imagens, ele serve para treinar modelos de detecção de objetos, clas­si­fi­ca­ção ou análise médica.
  • No pro­ces­sa­mento de linguagem natural, o PyTorch é a base de muitos modelos Trans­for­mer e chatbots modernos.
  • Também na síntese de fala, como em Text-to-Speech, o framework de­sem­pe­nha um papel im­por­tante.
  • Na área de análise de séries temporais, o PyTorch é usado para previsões no setor fi­nan­ceiro ou de energia.
  • Empresas também usam cada vez mais o framework para sistemas de re­co­men­da­ção.
  • Além disso, ele é fre­quen­te­mente usado em rein­for­ce­ment learning, por exemplo, nas áreas de robótica ou games.
  • Para pro­to­ti­pa­gem, assim como para modelos de IA em produção, o PyTorch é igual­mente adequado.
IONOS AI Model Hub
Sua porta de entrada para uma pla­ta­forma de IA mul­ti­mo­dal segura
  • Uma pla­ta­forma para os modelos de IA mais avançados
  • Preços justos e trans­pa­ren­tes baseados em tokens
  • Sem de­pen­dên­cia de for­ne­ce­dor com código aberto

Exemplo simples: pequena rede neural no PyTorch

Antes de trabalhar com modelos complexos, um exemplo simples ajuda você a entender o princípio básico de trei­na­mento no PyTorch. A minirrede a seguir demonstra como os dados de entrada fluem por um modelo, como os erros são cal­cu­la­dos e como o PyTorch gera au­to­ma­ti­ca­mente os gra­di­en­tes adequados para a oti­mi­za­ção.

import torch
import torch.nn as nn
import torch.optim as optim
# Definir uma rede neural simples
class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.layer1 = nn.Linear(2, 4)  # Entrada: 2 características, saída: 4 neurônios
        self.layer2 = nn.Linear(4, 1)  # Entrada: 4 neurônios, saída: 1 valor
    def forward(self, x):
        x = torch.relu(self.layer1(x))  # Função de ativação ReLU
        return self.layer2(x)
# Inicializar modelo, função de perda e otimizador
model = SimpleNet()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)
# Definir dados de entrada e valores-alvo (dados fictícios)
inputs = torch.tensor([[0.2, 0.4], [0.5, 0.9]], dtype=torch.float32)
targets = torch.tensor([[1.0], [2.0]], dtype=torch.float32)
# Loop de treinamento
for epoch in range(100):
    optimizer.zero_grad()           # Resetar os gradientes
    outputs = model(inputs)         # Calcular a previsão
    loss = criterion(outputs, targets)  # Calcular o erro
    loss.backward()                 # Calcular os gradientes
    optimizer.step()                # Atualizar os pesos
# Exibir o resultado
print("Treinamento concluído. Loss:", loss.item())
python

No exemplo de código, primeiro é definido um modelo bem pequeno, que processa dois valores de entrada e prevê um único valor. Ele é composto por duas camadas (Linear), cada uma com pesos trei­ná­veis, que continuam pro­ces­sando os dados de entrada por meio de mul­ti­pli­ca­ções de matrizes. No método forward, é descrito como os dados passam por essas camadas: primeiro pela primeira camada, depois por uma função ReLU, que define valores negativos como “zero”, e, por fim, pela segunda camada, que entrega a saída final.

Em seguida, o código define dados de exemplo simples como entradas e, para isso, define valores-alvo cor­res­pon­den­tes, que a rede deve re­pro­du­zir passo a passo. No loop de trei­na­mento, o modelo repete sempre o mesmo fluxo:

  1. Ele faz uma previsão.
  2. O erro é calculado.
  3. Em seguida, o PyTorch ajusta os pesos.

Para que o ajuste funcione, optimizer.zero_grad() primeiro zera cálculos antigos. Com loss.backward(), o PyTorch calcula au­to­ma­ti­ca­mente como os erros surgem, e optimizer.step() usa essas in­for­ma­ções para melhorar um pouco o modelo. Esse processo se repete muitas vezes. Após cerca de 100 iterações, dá para ver que a pequena rede já acerta muito bem os valores-alvo. Exa­ta­mente esse ciclo de fazer uma previsão, medir o erro e ajustar os pesos é o núcleo do deep learning e funciona da mesma forma em modelos gigantes quanto no nosso exemplo simples.

Ir para o menu principal