Voltar aos Cursos
AI023 Professional

Introdução à Programação em Triton: Um Tutorial Prático

Um tutorial científico abrangente projetado para oferecer um caminho completo de aprendizado sobre o Triton, uma linguagem baseada em Python e um compilador para escrever kernels GPU personalizados. O curso aborda modelos de programação, semântica da linguagem, comportamento numérico e otimização de desempenho, passando do cálculo básico de adição vetorial até operadores fundidos e segmentados usados em sistemas modernos de aprendizado profundo.

5.0
30.0h
561 estudantes
0 curtidas
Inteligência Artificial
Começar a Aprender

Visão Geral do Curso

📚 Resumo do Conteúdo

Um tutorial científico abrangente projetado para fornecer um caminho completo de aprendizado sobre Triton, uma linguagem baseada em Python e compilador para escrever kernels personalizados para GPU. O curso aborda modelos de programação, semântica da linguagem, comportamento numérico e otimização de desempenho, avançando desde a adição vetorial básica até operadores fundidos e segmentados usados em sistemas modernos de aprendizado profundo.

Domine a arte da engenharia de kernels de GPU de alto desempenho a partir dos princípios fundamentais.

Autor: EvoClass

Agradecimentos: Documentação do Triton e repositório GitHub do Triton.

🎯 Objetivos de Aprendizagem

  1. Definir o Triton e seu papel na pilha de software de aprendizado profundo.
  2. Distinguir o Triton do CUDA, código PyTorch em modo eager e assembly de baixo nível para GPU.
  3. Identificar quais cargas de trabalho são candidatas adequadas ao Triton e compreender a relevância da fusão de kernels e dos gargalos.
  4. Realizar uma instalação limpa do ambiente Triton e verificar a pilha de software.
  5. Implementar um kernel básico de cópia vetorial para validar a lógica do ambiente versus a lógica do kernel.
  6. Identificar e categorizar gargalos de GPU para justificar o uso da fusão de operadores do PyTorch.
  7. Definir uma instância de programa e calcular as dimensões de uma grade de lançamento 1D usando cdiv.
  8. Realizar aritmética de ponteiros para mapear IDs de programa específicos (pid) para deslocamentos de memória.
  9. Distinguir entre tensores do PyTorch (metadados do lado host) e tensores do Triton (blocos no nível do compilador).
  10. Calcular o mapeamento entre um ID de Programa (pid) e deslocamentos de memória específicos usando tl.arange.

🔹 Aula 1: Introdução ao Triton: Filosofia e Design

Visão Geral: Esta aula apresenta o Triton, uma linguagem específica de domínio e compilador projetado para reduzir a lacuna entre a produtividade alta de Python e o desempenho de baixo nível em GPU. Os alunos explorarão a filosofia de design central do Triton e estabelecerão um modelo mental conceitual sobre como ele trata a computação paralela de forma diferente em relação ao PyTorch padrão ou ao CUDA.

Resultados de Aprendizagem:

  • Definir o Triton e seu papel na pilha de software de aprendizado profundo.
  • Distinguir o Triton do CUDA, do código PyTorch em modo eager e do assembly de baixo nível para GPU.
  • Identificar quais cargas de trabalho são candidatas adequadas ao Triton e compreender a relevância da fusão de kernels e dos gargalos.

🔹 Aula 2: Configuração do Ambiente e Identificação de Gargalos de GPU

Visão Geral: Esta aula cobre os fundamentos essenciais para o desenvolvimento com Triton, focando na criação de um ambiente estável e limpo, verificado com um "kernel de sanidade" básico. Os alunos aprenderão a distinguir entre diferentes tipos de gargalos de desempenho em GPU — aritméticos, de memória e de sobrecarga de lançamento — para identificar quais operações do PyTorch são as melhores candidatas à fusão manual de operadores.

Resultados de Aprendizagem:

  • Realizar uma instalação limpa do ambiente Triton e verificar a pilha de software.
  • Implementar um kernel básico de cópia vetorial para validar a lógica do ambiente versus a lógica do kernel.
  • Identificar e categorizar gargalos de GPU para justificar o uso da fusão de operadores do PyTorch.

🔹 Aula 3: O Modelo de Programação do Triton: Grades e Ponteiros

Visão Geral: Esta aula introduz o modelo de programação do Triton, passando das abstrações de alto nível do PyTorch para uma abordagem baseada em blocos SPMD (Single Program, Multiple Data). Os alunos aprenderão como o Triton organiza a execução por meio de grades de lançamento 1D e instâncias de programa, como manipular ponteiros para acessar memória e as diferenças fundamentais entre tensores do PyTorch (metadados do lado host) e tensores do Triton (blocos no nível do compilador).

Resultados de Aprendizagem:

  • Definir uma instância de programa e calcular as dimensões de uma grade de lançamento 1D usando cdiv.
  • Realizar aritmética de ponteiros para mapear IDs de programa específicos (pid) para deslocamentos de memória.
  • Distinguir entre tensores do PyTorch (metadados do lado host) e tensores do Triton (blocos no nível do compilador).

🔹 Aula 4: Semântica Fundamental da Linguagem e Máscara de Memória

Visão Geral: Esta aula aborda as operações fundamentais necessárias para mover dados entre a memória global e os registradores da GPU usando a semântica fundamental da linguagem do Triton. Os alunos aprenderão a mapear instâncias de programas paralelos para índices de dados específicos, gerenciar condições de limite através da máscara de memória e diferenciar entre constantes de tempo de compilação e variáveis em tempo de execução.

Resultados de Aprendizagem:

  • Calcular o mapeamento entre um ID de Programa (pid) e deslocamentos de memória específicos usando tl.arange.
  • Implementar acesso robusto à memória usando tl.load e tl.store com máscaras de limite.
  • Explicar a necessidade do tl.constexpr para otimizações do compilador e as restrições sobre valores em tempo de execução em funções que definem formas.

🔹 Aula 5: Implementando Seu Primeiro Kernel: Adição Vetorial

Visão Geral: Esta aula guia você pelo ciclo completo de criação de um kernel Triton, passando da teoria para uma implementação funcional de adição vetorial. Você aprenderá a escrever o kernel do lado GPU, projetar um wrapper robusto em Python do lado host para lançá-lo e implementar um protocolo de validação científica para garantir a correção.

Resultados de Aprendizagem:

  • Implementar um kernel completo de adição vetorial usando a aritmética de ponteiros e sistemas de máscara do Triton.
  • Projetar um wrapper em Python do lado host que gerencie o lançamento da grade, segurança de memória e validação de entradas.
  • Executar um protocolo rigoroso de validação usando torch.allclose para verificar resultados em diversos tamanhos de entrada e casos extremos.

🔹 Aula 6: Fundamentos de Desempenho: Ocupação e Benchmarking

Visão Geral: Esta aula transita da sintaxe básica do kernel para os "Princípios Fundamentais" do desempenho em GPU, focando em por que código logicamente correto pode ainda ser ineficiente. Os alunos explorarão a relação entre tráfego de memória, ocupação e utilização de hardware, culminando em uma abordagem científica de benchmarking e otimização do BLOCK_SIZE.

Resultados de Aprendizagem:

  • Distinguir entre kernels limitados por cálculo e limitados por memória usando os princípios fundamentais de desempenho em GPU.
  • Explicar o "Triângulo da Troca" e como a ocupação serve para ocultar a latência da memória.
  • Executar um protocolo científico de benchmarking, incluindo aquecimento, sincronização e varredura de parâmetros.

🔹 Aula 7: Tensores 2D e Projeto de Kernel Orientado à Disposição

Visão Geral: Esta aula passa das operações elementares 1D para o processamento de tensores 2D no Triton. Foca na relação fundamental entre índices lógicos multidimensionais e a memória física linear através de strides. Os alunos aprenderão a construir grades de endereços 2D no Triton e projetar kernels que respeitem a localidade da memória.

Resultados de Aprendizagem:

  • Compreender como tensores 2D são representados na memória usando ponteiros-base e strides.
  • Construir grades 2D de endereços no Triton usando padrões de deslocamento broadcastidos.
  • Implementar kernels orientados à disposição (cópia, transposição, adição de viés) que lidam corretamente com memória não contígua.

🔹 Aula 8: Reduções, Softmax e Estabilidade Numérica

Visão Geral: Esta aula aborda a transição de kernels elementares simples para operações de redução mais complexas no Triton. Os alunos aprenderão as diferenças arquitetônicas entre esses tipos de kernel, o padrão de implementação padrão para um Softmax por linha e o papel crítico da estabilidade numérica no hardware.

Resultados de Aprendizagem:

  • Contrastar os padrões computacionais de kernels de redução com kernels pontuais.
  • Implementar um kernel de Softmax por linha numericamente estável usando o padrão de redução de 5 etapas do Triton.
  • Explicar a necessidade matemática e de nível de hardware de subtrair o valor máximo antes da exponenciação para evitar overflow numérico.

🔹 Aula 9: Multiplicação de Matrizes e Fusão de Operadores para LLMs

Visão Geral: Esta aula explora a transição de kernels elementares básicos para a Multiplicação de Matrizes Geral (GEMM) e seu papel central nos Modelos de Linguagem de Grande Escala (LLMs). Os alunos aprenderão o modelo mental para segmentação no Triton, os ganhos de eficiência obtidos com a fusão de operadores e os padrões exigidos para kernels prontos para produção.

Resultados de Aprendizagem:

  • Descrever o modelo mental do GEMM no Triton, incluindo instâncias de programa e dimensões de segmentos.
  • Identificar oportunidades de fusão de operadores em fluxos de trabalho de LLMs e explicar seu impacto no desempenho.
  • Projetar uma implementação lógica para fundir a adição de viés ao resultado de um GEMM.

🔹 Aula 10: Ciclo de Otimização: Depuração e Autotuning

Visão Geral: Esta aula aborda a transição de escrever código Triton funcional para desenvolver kernels de alto desempenho e prontos para produção. Estabelece uma pipeline sistemática de depuração "semântica para desempenho" e introduz a mentalidade rigorosa necessária para autotuning e benchmarking.

Resultados de Aprendizagem:

  • Sistematizar a Depuração: Aplicar uma estratégia em camadas que priorize a correção semântica e a estabilidade numérica antes de abordar gargalos de desempenho.
  • Implementar Fluxos de Autotuning: Definir espaços de busca válidos para meta-parâmetros e executar protocolos de benchmarking que evitem armadilhas comuns, como overfitting de hardware.
  • Mapear o Crescimento Profissional: Identificar a "escada prática" desde a implementação básica do Triton até o desenvolvimento avançado de kernels para produção.