CommunityProgramación y desarrollogithub.com

primus-turbo-develop

Desarrolla, depura y valida operadores y módulos de Primus-Turbo en GPUs AMD. Cubre la arquitectura en capas (), cómo añadir o modificar una funcionalidad de principio a fin, verificación de precisión (SNR, tolerancias, implementaciones de referencia), evaluación comparativa de rendimiento, el sistema de despacho de backend, y comandos de compilación/prueba/benchmark.

¿Qué es primus-turbo-develop?

Esta habilidad es la guía principal para el desarrollo y la validación de bibliotecas de operadores de entrenamiento de alto rendimiento Primus-Turbo en GPUs AMD (gfx942/gfx950). Proporciona una visión completa de la arquitectura en capas: desde módulos de Python (nn.Module) y operaciones con autograd, pasando por el despachador de kernels (AutoKernelDispatcher), hasta implementaciones en Triton (Python, sin recompilación) y C++/HIP/CK (csrc/, requiere recompilación). La habilidad detalla cómo añadir o modificar una característica de principio a fin, cubriendo todas las familias de operadores (GEMM, Attention, GroupedGEMM, MoE, cuantización, normalización, activación). Incluye guías dedicadas para verificar la corrección numérica (SNR para FP8/FP4, tolerancias allclose para bf16/fp16/fp32, y pruebas de determinismo) y para medir el rendimiento (latencia/throughput) con comandos de pytest y scripts de benchmark. También explica el sistema de selección de backend (GlobalBackendManager, AutoKernelDispatcher) con soporte para backends como HIPBLASL, TRITON, CK, TURBO, AITER y DEEP_EP, con notas sobre futuros backends como FLYDSL. Está diseñada para que los desarrolladores elijan su tarea (desarrollar, verificar precisión, verificar rendimiento, optimizar kernels autónomamente o perfilado) y sigan el archivo SKILL.md correspondiente, mientras que este documento sirve como referencia compartida para la compilación, arquitectura y sistema de backend.

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

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Guía de Desarrollo de Primus-Turbo

Primus-Turbo es una biblioteca de operadores de entrenamiento de alto rendimiento para GPUs AMD (gfx942 / gfx950). Esta habilidad es el punto de entrada para desarrollar una funcionalidad y validar su precisión y rendimiento.

Elige tu Tarea

ObjetivoComienza aquí
Añadir o modificar un operador/módulo de principio a findevelop-feature/SKILL.md
Verificar la corrección numéricaverify-accuracy/SKILL.md
Medir latencia / rendimientoverify-performance/SKILL.md
Llevar a cabo una campaña autónoma de optimización de kernelsoptimize-handoff/SKILL.md → kernel-optimize/SKILL.md
Perfilar un kernel intensivo con evidencia de ejecuciónrun_profile/tool-rocprof/SKILL.md

El resto de este archivo es la referencia compartida (compilación, arquitectura, mapa de código, sistema de backend) en la que se apoyan esos documentos. Léelo una vez y luego salta al archivo específico de la tarea. (run_profile/ es una carpeta de categoría para herramientas de perfilado y actualmente contiene la única habilidad tool-rocprof/).

Compilación e Iteración

Instalación

# Instala siempre las dependencias fijadas primero (las versiones de Triton/PyTorch son críticas).
pip install -r requirements.txt

# Instalación editable (recomendada para desarrollo).
GPU_ARCHS=gfx942 pip install --no-build-isolation -e . -v
  • GPU_ARCHS: gfx942 (MI300X/MI325X), gfx950 (MI350X/MI355X), native (detección automática), o "gfx942;gfx950".
  • --no-build-isolation es necesario para que la compilación vea los torch / triton ya instalados.
  • pip install . copia en site-packages (los cambios en el código fuente no tienen efecto); pip install -e . es editable.
  • La compilación también instala automáticamente las versiones fijadas de amd-aiter y origami (consulta setup.py).

Qué necesita recompilación

Has cambiado¿Recompilación necesaria?
Python / Triton (primus_turbo/**.py)No (la instalación editable lo recoge inmediatamente)
C++ / HIP (csrc/**) o esquema de op en bindings_pytorch.cppSí: vuelve a ejecutar el comando de instalación editable

Los fuentes especializados por arquitectura se filtran mediante el sufijo del nombre de archivo: *_gfx942.{cu,hip} y *_gfx950.{cu,hip} se compilan solo cuando esa arquitectura está en GPU_ARCHS (consulta setup.py: filter_files_by_arch).

Artefactos de compilación (3 capas, biblioteca de kernels desacoplada de los frontends)

ArtefactoFuenteNotas
libprimus_turbo_kernels.socsrc/kernels/Todos los kernels HIP/CK/hipBLASLt/turbo, independientes del frontend
primus_turbo.pytorch._Ccsrc/pytorch/Enlaces de PyTorch, enlaza el .so anterior
primus_turbo.jax._Ccsrc/jax/Enlaces de JAX (PRIMUS_TURBO_FRAMEWORK=JAX)

Variables de entorno clave

VariablePropósitoValor por defecto
GPU_ARCHSArquitectura(s) objetivodetección automática
ROCM_HOMERuta de ROCm/opt/rocm
MAX_JOBSTrabajos de compilación en paralelo64
PRIMUS_TURBO_FRAMEWORKPYTORCH / JAX (separados por ;)PYTORCH
PRIMUS_TURBO_LOG_LEVELNivel del registradorWARNING

Verifica una instalación editable funcional con pip show primus_turbo (busca el campo Editable project location) o python -c "import primus_turbo; print(primus_turbo.__file__)" (debe apuntar a este árbol fuente, no a site-packages); reinstala en modo editable si no es así.

Arquitectura: el diseño en capas

Cada operador es un corte vertical a través de estas capas. Saber qué capa tocar es el núcleo del desarrollo rápido.

modules/   Envoltorios nn.Module (Linear, GroupedLinear, Attention, ...)
   │ llama
ops/       API de Python + torch.autograd.Function (forward/backward)     ← orientado al usuario
   │ llama
kernels/   AutoKernelDispatcher + KernelBackend (selecciona un backend)   ← ops multi-backend
   │ despacha a
triton/    Kernels Triton (Python, sin recompilación)        csrc/  Kernels HIP/CK/hipBLASLt (requieren recompilación)
                                                                             │ enlazados mediante TORCH_LIBRARY en csrc/pytorch/
                                                                             └→ torch.ops.primus_turbo_cpp_extension.*

Existen tres patrones de cableado de operaciones (consulta develop-feature/SKILL.md para el archivo canónico a copiar para cada uno):

  • Multi-backend (gemm, gemm_fp8, grouped_gemm): ops → despachador de kernels → Triton y/o csrc.
  • C++ directo (rmsnorm): Función autograd de ops → torch.ops.primus_turbo_cpp_extension.* (sin despachador).
  • Triton directo (swiglu_with_probs): Función autograd de ops → un ayudante basado en Triton en kernels/ (sin despachador).

Mapa de Código

Las raíces de las columnas difieren: ops/ = primus_turbo/pytorch/ops/, kernels/ = primus_turbo/pytorch/kernels/, triton/ = primus_turbo/triton/ (nivel superior, no bajo pytorch/); csrc/kernels/, tests/, benchmark/ están en la raíz del repositorio. La API de usuario vive en ops/; la capa kernels/ contiene el despachador o la implementación del backend (*_impl.py).

Familia de operadoresAPI (ops/)kernels/ (despachador/impl)Triton (triton/)C++/HIP (csrc/kernels/)PruebasBenchmark
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
Cuantizaciónquantization.pyquantization/quantization/quantization/ops/test_quantization.pyaccuracy/eval_sf_accuracy.py
Activación (swiglu/geglu)activation.pyactivation/activation/—ops/test_activation.py—
Normalización (rmsnorm)normalization.py— (C++ directo)—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—

Fontanería de enlace C++ (compartida por todas las ops de csrc): declaraciones en csrc/pytorch/extensions.h, esquema + registro CUDA + Meta en csrc/pytorch/bindings_pytorch.cpp.

Sistema de Backend

Dos clases en primus_turbo/pytorch/core/backend.py:

  • GlobalBackendManager — selección global por operador × precisión.
  • AutoKernelDispatcher — base por operador con autoajuste, valor por defecto y respaldo.

Prioridad de selección (alta → baja): setter de código → variable de entorno → autoajuste → valor por defecto en código → respaldo (probar todos los can_handle).

BackendTypeUsado porNotas
HIPBLASLTGEMM (bf16, fp8 tensorwise)valor por defecto para GEMM denso
TRITONGEMM, GroupedGEMM, Attention, ...ajustable, sin recompilación
CKGEMM/GroupedGEMM FP8 (row/block)Composable Kernel
TURBOMXFP8/MXFP4 GEMM, Attentionpropio (gfx950)
AITERAttentionvalor por defecto para attention
DEEP_EPDespacho/combinación MoEnecesita instalación de DeepEP
FLYDSL (planeado)GEMM / Attention (DSL de autoría)próximo backend AMD tile-DSL; aún no es un miembro de BackendType

FLYDSL está en la hoja de ruta: un DSL de tiles incrustado en Python que baja a través de MLIR → ROCDL. Su conocimiento de ajuste ya vive en la base de conocimiento de optimización de kernels en knowledge/backend/flydsl/, pero aún no está registrado en BackendType, por lo que GlobalBackendManager.set_*_backend(BackendType.FLYDSL) no está disponible hoy.

from primus_turbo.pytorch.core.backend import BackendType, GlobalBackendManager
GlobalBackendManager.set_gemm_backend(BackendType.CK)    # forzar
GlobalBackendManager.set_auto_tune(True)                 # o PRIMUS_TURBO_AUTO_TUNE=1
GlobalBackendManager.reset()                             # limpiar configuraciones y caché de autoajuste

Variables de entorno (se admite la forma por precisión "fp8:CK,other:TRITON"): PRIMUS_TURBO_GEMM_BACKEND, PRIMUS_TURBO_GROUPED_GEMM_BACKEND, PRIMUS_TURBO_ATTENTION_BACKEND, PRIMUS_TURBO_MOE_DISPATCH_COMBINE_BACKEND, PRIMUS_TURBO_AUTO_TUNE.

Referencia Rápida de Pruebas y Benchmarks

# Corrección (una GPU, paralelo; cada trabajador de xdist fija una GPU mediante conftest.py)
pytest tests/pytorch/ -n 8
pytest tests/pytorch/ops/test_gemm_fp8.py -v -k "blockwise and TRITON"    # filtrar operación+backend
pytest tests/pytorch/ -n 8 --deterministic-only                             # suite de determinismo bit a bit
pytest tests/pytorch/ --dist-only                                           # pruebas multi-GPU

# Rendimiento
python benchmark/ops/training/bench_gemm_turbo.py --dtype fp8 --granularity blockwise
python benchmark/ops/training/run_suite.py -d output/ -g gemm_fp8                      # suite por lotes

Puertas de corrección: bf16/fp16 rtol=atol=1e-2, fp32 1e-4 (tolerancias allclose de get_tolerances en tests/pytorch/test_utils.py); SNR FP8 ≥ 25 dB (E4M3) / 20 dB (E5M2), SNR FP4 ≥ 10 dB (SNR mediante compute_snr; los umbrales están codificados en los archivos de prueba/benchmark, no en get_tolerances); determinismo rtol=atol=0. Detalles y patrones: verify-accuracy/SKILL.md.

Referencias Adicionales

  • README.md — inicio rápido, instalación, empaquetado
  • docs/examples.md — uso de la API por operador (GEMM, Attention, GroupedGEMM, FP8/FP4, Backend/AutoTune)
  • benchmark/README.md, benchmark/accuracy/README.md — benchmark de DeepEP, precisión multiplataforma
  • CONTRIBUTING.md — convenciones de nombres de ramas y commits
  • Bucle de optimización de kernels: kernel-optimize/SKILL.md (impulsar mediante optimize-handoff/SKILL.md)

Individual skills in this repo

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

Skills relacionados