El rendimiento de aprendizaje profundo depende de la eficacia de la manera efectiva de un compilador mapas de los programas de tensor para la ejecución de la GPU: horarios de hilo/bloque, movimiento de memoria y selección de instrucciones (por ejemplo, tuberías MMA de núcleo de tensor). En este artículo nos centraremos en cuatro pilas dominantes (Cuda, Rocm, Triton y Tensorrt) desde la perspectiva del compilador y explica qué optimizaciones mueven la aguja en la práctica.
Lo que realmente determina el rendimiento en las GPU modernas
En todos los proveedores, se repiten las mismas palancas:
- Programación y fusión del operador: reducir los lanzamientos del núcleo y los viajes redondos a HBM; Expone el productor más largo → cadenas de consumo para la reutilización de registro/memoria compartida. Tensorrt y Cudnn “motores de fusión de tiempo de ejecución” ejemplifican esto para la atención y los bloques de convivir.
- Tiling y diseño de datos: Combinar formas de mosaico con el núcleo tensor/WGMMA/WMMA tamaños de fragmento nativo; Evite los conflictos bancarios de la memoria compartida y el campamento de partición. Documentos Cutlass Tiling de gemm a nivel de urdimbre para núcleos de tensor y núcleos CUDA.
- Precisión y cuantificación: FP16/BF16/FP8 para entrenamiento/inferencia; Int8/int4 (calibrado o QAT) para inferencia. Tensorrt automatiza la calibración y la selección del núcleo bajo estas precisiones.
- Captura de gráficos y especialización en tiempo de ejecución: Ejecución de gráficos para amortizar los gastos generales de lanzamiento; Fusión dinámica de subgrafías comunes (por ejemplo, atención). CUDNN 9 agregó soporte de gráficos para motores de fusión de atención.
- Autotuning: Busque tamaños de los mosaicos, factores de desenrollado y profundidades de tuberías por arco/sku. Triton y Cutlass exponen ganchos automáticos explícitos; Tensorrt realiza una selección de táctica de constructor.
Con esa lente, así es como cada pila implementa lo anterior.
CUDA: NVCC/PTXAS, CUDNN, CUTLASS y CUDA GRAPHS
Ruta del compilador. El código CUDA se compila a través de NVCC en PTX, entonces ptxas Reduce PTX a SASS (código de máquina específico de arco). El control de la optimización requiere indicadores de alimentación tanto a las fases de host como de dispositivos; Para los núcleos, la clave es -Xptxas. Los desarrolladores a menudo extrañan eso -O3 Solo afecta solo el código de host.
Generación del kernel y bibliotecas.
- CHAFAROTE Proporciona plantillas paramétricas para GEMM/Conv, implementación de mosaico de nivel de urdimbre, tuberías de MMA de núcleo de tensor y iteradores SMEM diseñados para acceso libre de conflictos: referencias canónicas para escribir núcleos máximos, incluidos Hopper’s WGMMA camino.
- Cudnn 9 Introdujeron motores de fusión de tiempo de ejecución (especialmente para bloques de atención), integración de gráficos nativos de CUDA para esos motores y actualizaciones para nuevas capacidades de cómputo, reduciendo materialmente los gastos generales de despacho y mejorando la localidad de memoria en las cargas de trabajo de los transformadores.
Implicaciones de rendimiento.
- Pasar de las operaciones de Pytorch sin fusionar a la fusión de atención de Cudnn generalmente corta los lanzamientos del núcleo y el tráfico de memoria global; combinado con Gráficos CUDAreduce los cuellos de botella de la CPU en la inferencia de secuencia corta.
- En Hopper/Blackwell, la alineación de formas de baldosas con los tamaños nativos de WGMMA/Tensor Core es decisivo; Los tutoriales de Cutlass cuantifican cómo los mosaicos mal de tamaño desperdician el rendimiento del núcleo del tensor.
Cuando CUDA es la herramienta adecuada. Necesita el máximo control sobre la selección de instrucciones, la ocupación y la coreografía SMEM; O está extendiendo los núcleos más allá de la cobertura de la biblioteca mientras se queda en las GPU de NVIDIA.
Rocm: cadena de herramientas de cadera/clang, rocblas/mipen y la serie 6.x
Ruta del compilador. Rocm usa Clang/LLVM para compilar CADERA (CUDA) en GCN/RDNA ISA. La serie 6.x se ha centrado en la cobertura de PERF y marco; Release Notas de seguimiento Optimizaciones a nivel de componente y soporte de HW/OS.
Bibliotecas y núcleos.
- rocas y Miopen Implementar primitivas GEMM/Conv con mosaico de arco y algoritmo similar en espíritu a Cublas/Cudnn. El cambio de cambios consolidado destaca el trabajo iterativo de perforación en estas bibliotecas.
- Rocm Worktream reciente incluye mejor Tritón Habilitación en las GPU AMD, que permite autorizar el núcleo a nivel de pitón mientras sigue bajando a través de LLVM a AMD Backends.
Implicaciones de rendimiento.
- En las GPU AMD, los anchos bancarios SOL (memoria compartida) y las cargas globales vectorizadas a las formas de mosaico de matriz es tan fundamental como la alineación del banco SMEM en NVIDIA. La fusión asistida por compilador en los marcos (por ejemplo, la atención) más la autopción de la biblioteca en Rocblas/Miopen generalmente cierra una gran fracción de la brecha a los núcleos escritos a mano, dependiendo de la arquitectura/conductor. La documentación de la liberación indica mejoras continuas del sintonizador en 6.0–6.4.x.
Cuando ROCM es la herramienta adecuada. Necesita soporte y optimización nativos en aceleradores AMD, con portabilidad de la cadera de los núcleos de estilo CUDA existentes y una cadena de herramientas LLVM clara.
Triton: un DSL y un compilador para núcleos personalizados
Ruta del compilador. TRITON es un DSL embarcado por Python que baja a través de LLVM; Maneja la vectorización, la promesa de memoria y la asignación de registro al tiempo que proporciona un control explícito sobre los tamaños de bloque e ID de programa. Build Docs muestra la dependencia de LLVM y las compilaciones personalizadas; Los materiales para desarrolladores de Nvidia discuten la afinación de Triton para arquitecturas más nuevas (por ejemplo, Blackwell) con mejoras GEMM FP16/FP8.
Optimizaciones.
- Autotoning sobre tamaños de baldosas,
num_warpsy etapas de tuberías; estático enmascaramiento para condiciones de contorno sin fondos escalares; memoria compartida Establecimiento y canalización de software para superponer las cargas globales con cómputo. - El diseño de Triton tiene como objetivo automatizar las partes propensas a errores de la optimización de nivel CUDA mientras dejan opciones de mosaico de nivel de bloque al autor; El anuncio original describe esa separación de preocupaciones.
Implicaciones de rendimiento.
- Triton brilla cuando necesita un núcleo fusionado y especificado por la forma fuera de la cobertura de la biblioteca (por ejemplo, variantes de atención a medida, cadenas de normalización-activación-matematista). En las piezas modernas de Nvidia, las colaboraciones de proveedores informan mejoras específicas de la arquitectura en el backend de Triton, reduciendo los núcleos de sanción versus al estilo de cubo para GEMMS comunes.
Cuando Triton es la herramienta adecuada. Desea un rendimiento cercano a CUDA para operaciones fusionadas personalizadas sin escribir SASS/WMMA, y valoras la iteración de Python-First con Autotuning.
Tensorrt (y Tensorrt-LLM): Optimización de gráficos del constructor para la inferencia
Ruta del compilador. Tensorrt ingiere gráficos ONNX o marco y emite un hardware específico motor. Durante la construcción, realiza fusión de capa/tensor, calibración de precisión (Int8, fp8/fp16), y selección de táctica del núcleo; Los documentos de mejor práctica describen estas fases de constructor. Tensorrt-LLM extiende esto con optimizaciones de tiempo de ejecución específicas de LLM.
Optimizaciones.
- Nivel gráfico: plegamiento constante, canonicización de concatación, fusión de activación de convivaciones, fusión de atención.
- Precisión: Calibración posterior al entrenamiento (entropía/percentil/MSE) y cuantización por tensor, más flujos de trabajo de quantits/QAT en tensorrt-llm.
- Tiempo de ejecución: El caché de KV paginado, el lote en vuelo y la programación para implementaciones de múltiples transmisiones/múltiples GPU (documentos tensorrt-llm).
Implicaciones de rendimiento.
- Las victorias más grandes generalmente provienen: de extremo a extremo Int8 (o FP8 en Hopper/Blackwell donde se admite), eliminar el marco sobre la sobrecarga a través de un solo motor y la fusión de atención agresiva. El constructor de Tensorrt produce planes de motor per-arch para evitar núcleos genéricos en tiempo de ejecución.
Cuando Tensorrt es la herramienta adecuada. Inferencia de producción en las GPU de NVIDIA donde puede preparar previamente un motor optimizado y beneficiarse de la cuantización y la fusión de gráfico grande.
Guía práctica: elegir y ajustar la pila
- Entrenamiento versus inferencia.
- Entrenamiento/núcleos experimentales → CUDA + CUTLASS (NVIDIA) o ROCM + ROCBLAS/MIOPEN (AMD); Triton para OPS fusionados personalizados.
- Inferencia de producción en nvidia → tensorrt/tensorrt-llm para ganancias globales a nivel gráfico.
- Explotan las instrucciones nativas de arquitectura.
- En Nvidia Hopper/Blackwell, asegúrese de mapa de mosaicos para WGMMA/WMMA tamaños; Los materiales de Cutlass muestran cómo se deben estructurar gemm y iteradores de SMEM a nivel de urdimbre.
- En AMD, alinee el uso de SUD y los anchos vectoriales a CU Datapaths; Aproveche ROCM 6.x Autotuners y Triton-on-ROCM para OPS especializados en forma.
- Fusione primero, luego cuantifica.
- La fusión de kernel/gráfico reduce el tráfico de memoria; La cuantización reduce el ancho de banda y aumenta la densidad matemática. Las fusiones de Tensorrt-Time Builder más int8/FP8 a menudo ofrecen ganancias multiplicativas.
- Use la ejecución de gráficos para secuencias cortas.
- Los gráficos CUDA integrados con las fusiones de atención de Cudnn amortizan los gastos generales de lanzamiento en la inferencia autorregresiva.
- Trate las banderas del compilador como de primera clase.
- Para CUDA, recuerde indicadores del lado del dispositivo: ejemplo,
-Xptxas -O3,-v(y-Xptxas -O0Al diagnosticar). Solo de anfitrión-O3no es suficiente.
- Para CUDA, recuerde indicadores del lado del dispositivo: ejemplo,
Referencias:
Michal Sutter es un profesional de la ciencia de datos con una Maestría en Ciencias en Ciencias de Datos de la Universidad de Padova. Con una base sólida en análisis estadístico, aprendizaje automático e ingeniería de datos, Michal se destaca por transformar conjuntos de datos complejos en ideas procesables.