Habr AI mostra como montar uma Linear Layer em C++ e CUDA na série «De MNIST a Transformer»

O Habr AI publicou a terceira parte da série «De MNIST a Transformer». Desta vez, o tema são tensores, multiplicação de tensores e uma Linear Layer própria, sem PyTorch. O artigo tem bastante C++ e CUDA: o autor monta passo a passo uma camada totalmente conectada, explica o uso de memória na GPU e termina com uma rede simples para reconhecer MNIST. O foco não está nas APIs das bibliotecas, mas em como essas operações são realmente executadas na GPU.

Processado por IA de Habr AI; editado por Hamidun News
Habr AI mostra como montar uma Linear Layer em C++ e CUDA na série «De MNIST a Transformer»
Fonte: Habr AI. Colagem: Hamidun News.
Ouvir artigo
Ficha técnica e números-chave
ParâmetroDados
Fonte originalHabr AI ↗
Editor-chefe
Dado-chave #1Implementação da multiplicação de tensores
Dado-chave #2Criação da primeira Linear Layer, isto é, uma camada totalmente conectada
Dado-chave #3Trabalho com memória e posicionamento de dados na GPU

O Habr AI publicou a terceira parte da série «De MNIST a Transformer», que analisa a passagem das matrizes comuns para os tensores e mostra como montar à mão uma Linear Layer básica, sem PyTorch. O material leva o leitor até uma rede neural simples para reconhecer MNIST e foca não nas APIs das bibliotecas, mas em como essas operações realmente rodam na GPU.

Sobre o que é a terceira parte

O novo artigo continua o caminho do código CUDA de baixo nível até as arquiteturas sobre as quais depois se constroem o Transformer e os LLMs modernos. Em vez de abstrações prontas, o autor propõe olhar diretamente para o cálculo: como os dados ficam na memória, como a GPU dispara as operações e por que até uma camada de rede neural aparentemente elementar exige muito trabalho de engenharia. É um bom formato para quem cansou de enxergar os frameworks de ML como mágica de uma linha de código.

A principal mudança nesta parte é a passagem das matrizes para os tensores. Para o aprendizado de máquina aplicado, esse é um tema básico, porque dados reais raramente se limitam a duas dimensões. O autor mostra como muda a forma de pensar do desenvolvedor quando ele passa a trabalhar não só com tabelas de números, mas com estruturas multidimensionais, das quais depois se formam os batches, os pesos das camadas, as representações intermediárias e outros blocos do futuro modelo. É nesse nível que começa a preparação para entender blocos mais complexos, como attention e embeddings.

O que é implementado à mão

A parte prática gira em torno de código próprio em C++ e CUDA. Não há tentativa de esconder a complexidade atrás de uma interface conveniente; ao contrário, o leitor percorre o caminho da fórmula matemática até a implementação manual. Essa abordagem é útil porque liga a álgebra linear abstrata a passos concretos de desenvolvimento: alocação de dados, chamadas de kernels, verificação das formas das dimensões e compreensão de onde exatamente surgem erros ou perdas de desempenho. Sem esse elo, é difícil sentir a diferença entre um exemplo didático e um sistema real.

  • Implementação da multiplicação de tensores
  • Criação da primeira Linear Layer, isto é, uma camada totalmente conectada
  • Trabalho com memória e posicionamento de dados na GPU
  • Ligação entre matemática e código para treinar no MNIST
  • Montagem de uma rede simples para reconhecer dígitos manuscritos
«Só assim é possível entender de verdade como os LLMs funcionam».

Depois de implementar as operações básicas, o artigo chega a uma camada totalmente conectada própria e, em seguida, a uma pequena rede para reconhecer dígitos manuscritos do MNIST. É um ponto importante: o material não para em primitivas isoladas, mas mostra como combiná-las numa cadeia funcional. Também fica claro que até um classificador simples se apoia em uma pilha de conhecimento bastante profunda, da matemática à estrutura da memória de vídeo e às particularidades da computação paralela.

Por que isso importa

O valor desse tipo de análise está em desfazer a ilusão de facilidade que o wrapper em Python costuma criar. Quando o desenvolvedor vê apenas chamadas prontas de bibliotecas, fica difícil avaliar o custo de cada operação e entender por que o modelo de repente esbarra em memória, largura de banda ou tamanho do batch. Analisar no nível de tensores e camadas ajuda a ler melhor os profilers, a projetar a arquitetura com mais cuidado e a escolher com mais consciência os compromissos entre velocidade, precisão e complexidade de implementação.

A série «De MNIST a Transformer» é especialmente útil para quem quer não apenas rodar modelos alheios, mas entender a mecânica dos sistemas de IA modernos. Ela não promete entrada rápida e avisa de forma direta: haverá muito código, CUDA, matemática e trabalho manual com memória. Mas esse formato dá uma base que serve tanto na otimização de inferência quanto na leitura de implementações CUDA de terceiros e na tentativa de entender por que certas decisões de arquitetura rodam mais rápido que outras.

O que isso significa

Para o público de língua russa, é um bom sinal: a demanda está saindo de tutoriais superficiais e indo para a análise de engenharia dos bastidores da pilha de IA. Quanto mais materiais assim surgem, menos os LLMs são vistos como caixa-preta e mais fácil fica para os desenvolvedores passar do uso de modelos prontos para o ajuste e a otimização conscientes. Isso é especialmente importante agora, quando cresce rapidamente entre engenheiros em atividade a demanda por otimização de GPU e pelo entendimento do funcionamento interno dos modelos.

História

Perguntas frequentes sobre a notícia

O que se sabe sobre Sobre o que é a terceira parte?

O novo artigo continua o caminho do código CUDA de baixo nível até as arquiteturas sobre as quais depois se constroem o Transformer e os LLMs modernos. Em vez de abstrações prontas, o autor propõe olhar diretamente para o cálculo: como os dados ficam na memória, como a GPU dispara as operações e por que até uma camada de rede neural aparentemente elementar exige muito trabalho de engenharia. É um bom formato para quem cansou de enxergar os frameworks de ML como mágica de uma linha de código. A principal mudança nesta parte é a passagem das matrizes para os tensores. Para o

O que é implementado à mão?

A parte prática gira em torno de código próprio em C++ e CUDA. Não há tentativa de esconder a complexidade atrás de uma interface conveniente; ao contrário, o leitor percorre o caminho da fórmula matemática até a implementação manual. Essa abordagem é útil porque liga a álgebra linear abstrata a passos concretos de desenvolvimento: alocação de dados, chamadas de kernels, verificação das formas das dimensões e compreensão de onde exatamente surgem erros ou perdas de desempenho. Sem esse elo, é difícil sentir a diferença entre um exemplo didático e um sistema real. Implementa

Por que isso importa?

O valor desse tipo de análise está em desfazer a ilusão de facilidade que o wrapper em Python costuma criar. Quando o desenvolvedor vê apenas chamadas prontas de bibliotecas, fica difícil avaliar o custo de cada operação e entender por que o modelo de repente esbarra em memória, largura de banda ou tamanho do batch. Analisar no nível de tensores e camadas ajuda a ler melhor os profilers, a projetar a arquitetura com mais cuidado e a escolher com mais consciência os compromissos entre velocidade, precisão e complexidade de implementação. A série «De MNIST a Transformer» é es

ZK
Zhemal Khamidun — CPO da Alpina Digital, gerente de produto do AlpinaGPT. Cria produtos de IA desde 2019. O Hamidun News é um projeto pessoal que virou um agregador em produção com mais de 6.000 leitores.
✦ Unified AI Workspace · Nomad

Test Frontier LLMs & Autonomous Agents in One Workspace

Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.

Try Nomad AI →Launch Nomad Agent
O que você acha?
Carregando comentários…