Guia de Desenvolvimento Primus-Turbo

Desenvolva, depure e valide operadores e módulos Primus-Turbo em GPUs AMD. Abrange a arquitetura em camadas (ops / kernels-dispatcher / Triton / HIP-CK csrc / modules), como adicionar ou alterar um recurso de ponta a ponta, verificação de precisão (SNR, tolerâncias, implementações de referência), análise de desempenho, o sistema de despacho de backend e comandos de build/teste/benchmark. Use para qualquer tarefa de desenvolvimento Primus-Turbo (GEMM, Attention, GroupedGEMM, MoE, quantização, normalização, ativação) e para validação de precisão ou desempenho.

O que é Guia de Desenvolvimento Primus-Turbo?

Este guia de desenvolvimento do Primus-Turbo é o recurso central para engenheiros que trabalham com operadores de treinamento de alto desempenho em GPUs AMD (gfx942/gfx950). Ele fornece uma visão completa da arquitetura em camadas — desde módulos Python e operações autograd até kernels Triton e implementações C++/HIP — permitindo que você adicione ou modifique rapidamente qualquer funcionalidade de ponta a ponta. O guia inclui instruções de build e instalação, um mapa detalhado do código-fonte para todas as famílias de operadores (GEMM, Attention, GroupedGEMM, MoE, quantização, normalização, ativação) e explica o sistema de seleção de backend (hipBLASLt, Triton, CK, Turbo, AITER, DeepEP). Além disso, cobre comandos de teste e benchmark para validação de precisão e desempenho, incluindo métricas como SNR e tolerâncias. O ponto de partida é escolher sua tarefa específica (desenvolvimento, verificação de precisão, benchmark de desempenho ou otimização autônoma de kernels) e seguir os arquivos SKILL.md vinculados. As plataformas suportadas são PyTorch e JAX, com foco em GPUs AMD.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Z-Y00/rocm-skills/tree/main/skills/primus-turbo-develop

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Guia de Desenvolvimento Primus-Turbo faz?

Primus-Turbo é uma biblioteca de operadores de treinamento de alto desempenho para GPUs AMD (gfx942 / gfx950). Esta skill é o ponto de entrada para desenvolver um recurso e validar sua precisão e desempenho.

Escolha sua Tarefa

ObjetivoComece aqui
Adicionar ou alterar um operador / módulo de ponta a pontadevelop-feature/SKILL.md
Verificar a correção numéricaverify-accuracy/SKILL.md
Medir latência / throughputverify-performance/SKILL.md
Conduzir uma campanha autônoma de otimização de kerneloptimize-handoff/SKILL.md → kernel-optimize/SKILL.md
Perfilar um kernel quente com evidências de tempo de execuçãorun_profile/tool-rocprof/SKILL.md

O restante deste arquivo é a referência compartilhada (build, arquitetura, mapa de código, sistema de backend) da qual esses documentos dependem. Leia uma vez e depois vá para o arquivo específico da tarefa. (run_profile/ é uma pasta de categoria para ferramentas de perfil e atualmente contém a única skill tool-rocprof/.)

Build e Iteração

Instalação

# Sempre instale as dependências fixadas primeiro (versões do Triton / PyTorch são críticas).
pip install -r requirements.txt

# Instalação editável (recomendada para desenvolvimento).
GPU_ARCHS=gfx942 pip install --no-build-isolation -e . -v
  • GPU_ARCHS: gfx942 (MI300X/MI325X), gfx950 (MI350X/MI355X), native (detecção automática) ou "gfx942;gfx950".
  • --no-build-isolation é necessário para que o build veja os torch / triton já instalados.
  • pip install . copia para site-packages (alterações no código-fonte não têm efeito); pip install -e . é editável.
  • O build também instala automaticamente amd-aiter e origami fixados (veja setup.py).

O que precisa de um rebuild

Você alterouPrecisa de rebuild?
Python / Triton (primus_turbo/**.py)Não (instalação editável captura imediatamente)
C++ / HIP (csrc/**) ou schema de op em bindings_pytorch.cppSim: execute novamente o comando de instalação editável

Fontes especializadas por arquitetura são filtradas pelo sufixo do nome do arquivo: *_gfx942.{cu,hip} e *_gfx950.{cu,hip} compilam apenas quando essa arquitetura está em GPU_ARCHS (veja setup.py: filter_files_by_arch).

Artefatos de build (3 camadas, biblioteca de kernel desacoplada dos frontends)

ArtefatoFonteNotas
libprimus_turbo_kernels.socsrc/kernels/Todos os kernels HIP/CK/hipBLASLt/turbo, independentes de frontend
primus_turbo.pytorch._Ccsrc/pytorch/Bindings PyTorch, linka o .so acima
primus_turbo.jax._Ccsrc/jax/Bindings JAX (PRIMUS_TURBO_FRAMEWORK=JAX)

Principais variáveis de ambiente

VariávelPropósitoPadrão
GPU_ARCHSArquitetura(s) alvodetecção automática
ROCM_HOMECaminho do ROCm/opt/rocm
MAX_JOBSTrabalhos de compilação paralelos64
PRIMUS_TURBO_FRAMEWORKPYTORCH / JAX (separados por ;)PYTORCH
PRIMUS_TURBO_LOG_LEVELNível do loggerWARNING

Verifique uma instalação editável funcionando com pip show primus_turbo (procure pelo campo Editable project location) ou python -c "import primus_turbo; print(primus_turbo.__file__)" (deve apontar para esta árvore de origem, não para site-packages); reinstale em modo editável se não.

Arquitetura: o design em camadas

Cada operador é uma fatia vertical através dessas camadas. Saber qual camada tocar é o centro do desenvolvimento rápido.

modules/   Wrappers nn.Module (Linear, GroupedLinear, Attention, ...)
   │ chama
ops/       API Python + torch.autograd.Function (forward/backward)        ← voltado ao usuário
   │ chama
kernels/   AutoKernelDispatcher + KernelBackend  (seleciona um backend)      ← operações multi-backend
   │ despacha para
triton/    Kernels Triton (Python, sem rebuild)        csrc/  Kernels HIP/CK/hipBLASLt (rebuild)
                                                          │ vinculados via TORCH_LIBRARY em csrc/pytorch/
                                                          └→ torch.ops.primus_turbo_cpp_extension.*

Existem três padrões de fiação de operadores (veja develop-feature/SKILL.md para o arquivo canônico a ser copiado para cada um):

  • Multi-backend (gemm, gemm_fp8, grouped_gemm): ops → dispatcher kernels → Triton e/ou csrc.
  • C++ direto (rmsnorm): ops autograd Function → torch.ops.primus_turbo_cpp_extension.* (sem dispatcher).
  • Triton direto (swiglu_with_probs): ops autograd Function → um helper baseado em Triton em kernels/ (sem dispatcher).

Mapa de Código

As raízes das colunas diferem: ops/ = primus_turbo/pytorch/ops/, kernels/ = primus_turbo/pytorch/kernels/, triton/ = primus_turbo/triton/ (nível superior, não sob pytorch/); csrc/kernels/, tests/, benchmark/ são raiz do repositório. A API do usuário fica em ops/; a camada kernels/ contém o dispatcher ou a implementação do backend (*_impl.py).

Família de operadorAPI (ops/)kernels/ (dispatcher/impl)Triton (triton/)C++/HIP (csrc/kernels/)TestesBench
GEMM (bf16/fp16/fp32)gemm.pygemm/gemm_impl.pygemm/gemm_kernel.pygemm/ (hipBLASLt)ops/test_gemm.pybench_gemm_turbo.py
GEMM FP8gemm_fp8.pygemm/gemm_fp8_impl.pygemm/gemm_fp8_kernel.pygemm/ck, gemm/turboops/test_gemm_fp8.pybench_gemm_turbo.py --dtype fp8
GEMM FP4gemm_fp4.pygemm/gemm_fp4_impl.py—gemm/ (hipBLASLt fp4)ops/test_gemm_fp4.pybench_gemm_turbo.py --dtype fp4
Grouped GEMMgrouped_gemm.py, grouped_gemm_fp8.pygrouped_gemm/grouped_gemm/grouped_gemm/ckops/test_grouped_gemm*.pybench_grouped_gemm_turbo.py
Attentionattention/attention/ (aiter/triton/turbo)attention/attention_kernel.pyattention/turboops/test_attention*.pybench_attention_turbo.py
Quantizaçãoquantization.pyquantization/quantization/quantization/ops/test_quantization.pyaccuracy/eval_sf_accuracy.py
Ativação (swiglu/geglu)activation.pyactivation/activation/—ops/test_activation.py—
Normalização (rmsnorm)normalization.py— (C++ direto)—normalization/ops/test_normalization.py—
MoE permute / router / dispatchmoe/moe/, moe_permutemoe/moe_permute/, deep_ep/ops/test_moe_permute.py, test_fused_moe_router.pybench_deepep_intranode.py
Async-TP (gemm+comm)async_tp.pyasync_tp/async_tp/—ops/test_fused_*.py—

Encanação dos bindings C++ (compartilhada por todas as operações csrc): declarações em csrc/pytorch/extensions.h, schema + registro CUDA + Meta em csrc/pytorch/bindings_pytorch.cpp.

Sistema de Backend

Duas classes em primus_turbo/pytorch/core/backend.py:

  • GlobalBackendManager — seleção global por operador × precisão.
  • AutoKernelDispatcher — base por operador com autotune, padrão e fallback.

Prioridade de seleção (alta → baixa): setter de código → variável de ambiente → autotune → padrão no código → fallback (tentar todos can_handle).

BackendTypeUsado porNotas
HIPBLASLTGEMM (bf16, fp8 tensorwise)padrão para GEMM densa
TRITONGEMM, GroupedGEMM, Attention, ...ajustável, sem rebuild
CKGEMM/GroupedGEMM FP8 (row/block)Composable Kernel
TURBOMXFP8/MXFP4 GEMM, Attentioninterno (gfx950)
AITERAttentionatenção padrão
DEEP_EPMoE dispatch/combineprecisa de instalação DeepEP
FLYDSL (planejado)GEMM / Attention (DSL de autoria)próximo backend AMD tile-DSL; ainda não é um membro de BackendType

FLYDSL está no roadmap — uma DSL de tile embutida em Python que reduz via MLIR → ROCDL. Seu conhecimento de ajuste já reside na base de conhecimento de otimização de kernel em knowledge/backend/flydsl/, mas ainda não está registrado em BackendType, então GlobalBackendManager.set_*_backend(BackendType.FLYDSL) não está disponível hoje.

from primus_turbo.pytorch.core.backend import BackendType, GlobalBackendManager
GlobalBackendManager.set_gemm_backend(BackendType.CK)   # forçar
GlobalBackendManager.set_auto_tune(True)                # ou PRIMUS_TURBO_AUTO_TUNE=1
GlobalBackendManager.reset()                            # limpar configurações + cache de autotune

Variáveis de ambiente (forma por precisão "fp8:CK,other:TRITON" suportada): PRIMUS_TURBO_GEMM_BACKEND, PRIMUS_TURBO_GROUPED_GEMM_BACKEND, PRIMUS_TURBO_ATTENTION_BACKEND, PRIMUS_TURBO_MOE_DISPATCH_COMBINE_BACKEND, PRIMUS_TURBO_AUTO_TUNE.

Referência Rápida de Teste e Bench

# Corretude (uma GPU, paralelo; cada worker xdist fixa uma GPU via conftest.py)
pytest tests/pytorch/ -n 8
pytest tests/pytorch/ops/test_gemm_fp8.py -v -k "blockwise and TRITON"   # filtrar op+backend
pytest tests/pytorch/ -n 8 --deterministic-only                          # suíte de determinismo bit-a-bit
pytest tests/pytorch/ --dist-only                                        # testes multi-GPU

# Desempenho
python benchmark/ops/training/bench_gemm_turbo.py --dtype fp8 --granularity blockwise
python benchmark/ops/training/run_suite.py -d output/ -g gemm_fp8                  # suíte em lote

Gates de corretude: bf16/fp16 rtol=atol=1e-2, fp32 1e-4 (tolerâncias allclose de get_tolerances em tests/pytorch/test_utils.py); FP8 SNR ≥ 25 dB (E4M3) / 20 dB (E5M2), FP4 SNR ≥ 10 dB (SNR via compute_snr; limites são fixados nos arquivos de teste/bench, não em get_tolerances); determinismo rtol=atol=0. Detalhes e padrões: verify-accuracy/SKILL.md.

Referências Adicionais

  • README.md — início rápido, instalação, empacotamento
  • docs/examples.md — uso da API por operador (GEMM, Attention, GroupedGEMM, FP8/FP4, Backend/AutoTune)
  • benchmark/README.md, benchmark/accuracy/README.md — benchmark DeepEP, precisão entre plataformas
  • CONTRIBUTING.md — convenções de nomeação de branches e commits
  • Loop de otimização de kernel: kernel-optimize/SKILL.md (conduzir via optimize-handoff/SKILL.md)

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Habilidades Relacionadas