Metal para machine learning en 2026
El M5 de Apple incorpora un nuevo bloque de hardware llamado neural accelerator, y no se ubica sobre el Neural Engine ni en algún coprocesador apartado. Se encuentra dentro de cada núcleo de shader de la GPU, junto a las canalizaciones existentes, diseñado para acelerar el trabajo denso y limitado por cómputo, como la etapa de prefill de un LLM.1 Esa ubicación resume toda la historia de Metal en 2026. La GPU a la que recurrías para dibujar triángulos es ahora la GPU a la que recurres para ejecutar multiplicaciones de matrices, y Apple dedicó la WWDC26 a entregar a los desarrolladores las API para usarla directamente. Metal es una superficie de cómputo de machine learning de primer nivel, y el marco gráfico ya no alcanza a describir lo que hace.
Durante años, la historia del ML en el dispositivo transcurría por encima de Metal: Core ML apuntaba al Neural Engine, MLX envolvía la GPU en una API de arrays al estilo de NumPy y MetalFX daba a los juegos un escalador sellado. El propio Metal era el sustrato sobre el que se apoyaban esos frameworks, no una capa contra la que escribía la mayoría de los desarrolladores de ML. La WWDC26 cambió la altitud. Apple lanzó una API del Metal Shading Language para el cálculo tensorial, hizo que los kernels personalizados se pudieran enchufar en Core AI y mostró redes neuronales ejecutándose en línea dentro de los shaders. Las razones para descender al nivel de Metal son ahora lo bastante concretas como para nombrarlas.
TL;DR
- El neural accelerator del M5 es un nuevo bloque de hardware ubicado dentro de cada núcleo de shader de la GPU, diseñado para acelerar el trabajo denso y limitado por cómputo, como el prefill de un LLM.1
- TensorOps es una API del Metal Shading Language que acelera las operaciones tensoriales (multiplicación de matrices, convolución) en la GPU y usa automáticamente la aceleración por hardware disponible a través de las generaciones de Apple silicon.1
- Los tensors Metal admiten de forma nativa tipos de datos cuantizados: enteros de 4 y 8 bits en la actualización de macOS e iOS 26, con tipos de punto flotante de 4 y 8 bits y enteros de 2 bits, además de factores de escala por bloques E8M0, que llegan en macOS e iOS 27.1
- El renderizado neural abarca tres niveles en Metal 4: el denoising de MetalFX como caja negra, el ML command encoder para modelos entrenados dentro de tu command buffer y TensorOps para redes diminutas construidas directamente en un shader.2
- MLX Swift mantiene la vía de cómputo numérico de alto nivel: código de arrays que se lee como las matemáticas, evaluación perezosa, diferenciación automática y ejecución en GPU por defecto.4
- Nuevas herramientas de medición de rendimiento (recolección de traza retrospectiva,
metalperftracey la API StateReporting) cierran el círculo de medir todo esto a lo largo de sesiones prolongadas.3
Tensors Metal y kernels de ML personalizados
Apple presenta el stack de ML como capas: Core AI y MLX en la cima para un despliegue con código mínimo, Metal Performance Shaders por debajo para kernels de alto rendimiento y, bajo todo ello, Metal Performance Primitives y la biblioteca TensorOps haciendo la aceleración de bajo nivel.1 Desciendes al nivel de Metal por una razón concreta. La investigación en ML avanza rápido, así que podrías implementar una operación personalizada que se enchufe en un framework de más alto nivel como Core AI. Podrías estar contribuyendo a un framework como MLX o llama.cpp. O podrías estar escribiendo una aplicación basada en Metal que necesita la operación en línea.1
Shiyao, de Apple, sobre el neural accelerator del M5: un bloque de hardware dentro de cada núcleo de shader, creado para el trabajo denso y limitado por cómputo, como el prefill de un LLM (WWDC26, sesión 330).
TensorOps es una API del Metal Shading Language que acelera las operaciones tensoriales en la GPU, entre ellas la multiplicación de matrices y la convolución, y aprovecha al máximo el neural accelerator del M5 sin que escribas código específico por generación.1 La biblioteca lee el hardware disponible y lo usa. Esa portabilidad es justamente el sentido de trabajar a través de TensorOps en lugar de programar a mano operaciones de SIMD-group contra una GPU concreta.
La incorporación más práctica de 2026 es la cuantización nativa. Los modelos no dejan de crecer, la inferencia suele estar limitada por el ancho de banda de memoria, así que comprimir los pesos hace caber más modelo en memoria y, a la vez, ahorra ancho de banda.1 La jugada estándar: tomar pesos de media precisión de 16 bits, reducirlos a 4 bits y emparejar los valores cuantizados con factores de escala que los devuelven a su rango en el momento del cómputo.1 TensorOps ahora maneja los tipos de datos cuantizados de forma nativa. La actualización de macOS e iOS 26 añadió los tipos enteros de 4 y 8 bits; macOS e iOS 27 lo extienden a los tipos de punto flotante de 4 y 8 bits y a los enteros de 2 bits.1 Creas un tensor cuantizado casi exactamente como uno normal: rellenas las propiedades del descriptor, especificas un dataType cuantizado y llamas a newTensorWithDescriptor en tu dispositivo Metal.1
Los factores de escala también consiguen un hogar limpio. En macOS e iOS 27, un solo MTLTensor puede llevar sus escalas junto a los datos cuantizados como un plano de escala adicional, lo que admite el formato de factores de escala por bloques FP8 E8M0, donde cada elemento de escala se aplica a un bloque de elementos de datos.1 Construyes un descriptor para el plano de escala, defines su dataType y sus factores de bloque, y adjuntas un mapa de plano auxiliar al descriptor del tensor original; datos cuantizados, escalas y metadatos caben en un único objeto tensor.1 En un kernel, declaras el plano de escala (por ejemplo, fp8_e8m0 con un tamaño de bloque de 32 por 1, de modo que cada 32 elementos de datos comparten una escala), declaras el tipo completo del tensor, configuras un matmul2d_descriptor con los tamaños de tile, creas una operación matmul2d, pasas los tensors cuantizados y TensorOps se encarga de la decuantización por ti.1
Cuando necesitas un formato de cuantización personalizado que la biblioteca no conoce, decuantiza directamente en un cooperative tensor y pásalo a la operación matmul2d. Los cooperative tensors distribuyen su almacenamiento por la memoria privada de los hilos que participan en el matmul, de modo que los datos permanecen en registros y te ahorras el viaje de ida y vuelta por la memoria de threadgroup.1
El ejemplo estrella de la sesión 330 es FlashAttention, el kernel de atención fusionado que está en el núcleo de cada transformer. La atención multiplica Q por K, calcula SoftMax sobre las filas de la matriz intermedia y luego multiplica por V; FlashAttention fusiona los tres pasos en un solo kernel.1 Usas el ámbito de operación execution_simdgroup para que cada SIMD group posea filas completas de la matriz intermedia y pueda calcular SoftMax sin intercambiar datos entre grupos, almacenas la matriz intermedia en un cooperative tensor y calculas las reducciones por fila con reduce_rows.1 La mejora de 2026 que más importa: en macOS 26 tenías que almacenar el cooperative tensor en la memoria de threadgroup antes del segundo matmul, pero ahora lo inyectas directamente con get_left_input_cooperative_tensor tras una comprobación de disposición is_compatible_as_left.1 Si la comprobación falla, recurres al viaje de ida y vuelta por el threadgroup; en cualquier caso, op.run es idéntico.1
Apple cerró el círculo integrando ese kernel personalizado en un modelo real. Core AI convierte modelos de PyTorch y admite kernels Metal personalizados, así que el equipo definió el cuerpo de FlashAttention como una cadena en Python, registró un TorchMetalKernel, reemplazó la atención predeterminada de Hugging Face por una que llama al kernel y exportó desde PyTorch un modelo de segmentación de imágenes SAM 3 como un asset de Core AI optimizado que segmentó correctamente un auto en una imagen de prueba.1 Ese es el camino que va de un kernel de GPU escrito a mano hasta un modelo listo para publicar.
Renderizado neural en tiempo real
El segundo frente es el renderizado. Muchas técnicas que históricamente usaban métodos analíticos, entre ellas el denoising neural, las texturas neural y el tone mapping aprendido, ahora pueden ejecutarse como machine learning en cualquier etapa de la canalización para mejorar la calidad, el rendimiento o la huella de memoria.2 Metal 4 ofrece tres niveles de control, y el nivel que eliges es un trueque deliberado.
Yulia, de Apple, recorre los tres niveles de ML en una canalización de renderizado de Metal 4, desde MetalFX hasta las redes TensorOps que corren en el neural accelerator del M5 y el A19 Pro (WWDC26, sesión 359).
En el nivel más alto, MetalFX proporciona un denoiser y un escalador neural listos para usar como una caja negra completamente integrada, diseñada para las exigencias de baja latencia de un viewport en vivo.2 En un path tracer, tu presupuesto de frame quizá solo permita una muestra por píxel para seguir siendo interactivo, y una sola muestra tiene ruido. MetalFX toma ese frame con ruido más entradas auxiliares (albedo difuso, profundidad y algunas más) y produce una imagen limpia, casi final, usando técnicas tanto espaciales como temporales.2 Redshift Live de Maxon, un path tracer en tiempo real dentro de Cinema 4D, lo adoptó, y Apple destiló la integración en tres buenas prácticas: mantén tus entradas auxiliares libres de ruido (el albedo difuso es la señal de denoising más fuerte), almacena lo que el espectador ve de verdad (reemplazo de superficie primaria para los espejos, albedo mezclado según Fresnel para el vidrio) y acierta con tus motion vectors (MetalFX espera motion vectors sin jitter, o los bordes parpadean).2
El nivel intermedio es el ML command encoder de Metal 4, que ejecuta un modelo preentrenado directamente en tu command buffer sin cambio de contexto.2 El ejemplo trabajado por Apple es el tone mapping neural. La cadena de posprocesado de un renderer (tone mapping, gradación de color, emulación de película) se complica arbitrariamente, y una red neuronal puede aprender la transformación completa. Entrenas una red como HDRNet (una arquitectura de 2017 de Gharbi y sus colegas) en PyTorch, la exportas a un MTLPackage, la cargas con un function descriptor y un machine learning pipeline descriptor, y luego la despachas con una argument table.2 El tone mapper neural reemplaza entonces toda la cadena de posprocesado de varias etapas por una sola evaluación neural, codificada en el mismo command buffer junto al path tracer y MetalFX, ejecutándose en el mismo frame.2
El nivel más profundo es TensorOps dentro de un shader, la misma biblioteca de la sesión 330 pero usada para construir redes diminutas de unos pocos miles de parámetros o menos, entrenadas en una sola escena y sin la intención de generalizar.2 Como la red cabe en línea entre tus instrucciones de ALU y de muestreo de texturas, habilita el entrenamiento en línea: un modelo que se adapta en cada frame a condiciones cambiantes del mundo. El ejemplo de Apple es una sky probe para iluminación basada en imágenes, donde un ciclo dinámico de día y noche deja obsoleta una señal de iluminación precalculada. La solución es un MLP totalmente conectado, una red 3-4-4-3 que toma una dirección como tres floats y devuelve la iluminación como un color, evaluada hacia adelante en el shader y entrenada en línea con una pasada de retropropagación en cada frame.2 Usando el ámbito de ejecución SIMD-group, todos los hilos participantes trabajan en la misma multiplicación de matrices y obtienen cooperative tensors cuyo almacenamiento se reparte entre los hilos, de modo que haces un matmul2d a través de cada capa, aplicas las activaciones en el lugar y lees la salida ahí mismo en el shader sin un viaje de ida y vuelta a la memoria principal. Es el mismo camino del neural accelerator de la sesión 330, ahora alimentando un píxel.2
Medirlo: las herramientas de rendimiento
Ejecutar ML en la GPU significa competir por los mismos ciclos, ancho de banda y presupuesto térmico que necesita tu renderizado, así que la medición deja de ser opcional. La sesión 388 trata sobre sesiones largas de juego, pero el instrumental se aplica a cualquier carga de Metal, ML incluido, porque una caída de framerate durante una pasada de tone mapping neural se ve exactamente como cualquier otro estancamiento de GPU hasta que puedes ver qué estaba haciendo la aplicación.3
Ruiwei, de Apple, sobre el sistema que registra siempre las métricas de rendimiento de Metal en segundo plano, para que puedas mirar horas atrás y recolectar una traza después de que termina una sesión (WWDC26, sesión 388).
El cambio destacado en iOS y macOS 27: el sistema registra siempre, en segundo plano, las métricas de rendimiento y de recursos de Metal, almacenando durante días datos agregados y, opcionalmente, por frame (CPU, GPU, FPS, memoria).3 Recolectas después del hecho. En macOS, metalperftrace collect --last 5h extrae una traza de las últimas cinco horas; en iOS, una configuración única añade un botón Performance Trace al Centro de control que procesa una traza retrospectiva a demanda.3 Analizas con metalperftrace overview, y --json emite una salida estructurada que puedes alimentar a un script de regresión o entregar a un agente de IA para el triaje; Instruments grafica todo en una línea temporal y resalta en color las estadísticas que se desvían.3
La pieza que hace accionable un gráfico crudo de FPS es la API StateReporting, disponible en Swift y Objective-C.3 Defines dominios, cada uno una máquina de estados finitos para un área de funcionalidad ortogonal, e informas las transiciones con una etiqueta más, opcionalmente, metadatos estables y metadatos volátiles por estado.3 Para una aplicación con mucha carga de ML, podrías ejecutar un dominio que rastree qué pasada neural está activa, de modo que, cuando el tiempo de frame se dispara, puedas pedirle a metalperftrace que agregue los FPS para una etiqueta de estado concreta y ver directamente que, por ejemplo, la pasada de tone mapping es la que cuesta.3 La advertencia de Apple: mantén las transiciones a la cadencia de las acciones del usuario o más lentas, porque el sistema limita los informes de alta frecuencia y pierdes datos.3 Tras publicar, MetricKit en iOS y macOS 27 expone la información de framerate de Metal desglosada por tus estados de StateReporting, entregada como informes diarios desde los dispositivos.3
MLX: la vía de alto nivel se queda
No todos los desarrolladores de ML quieren escribir kernels de GPU, y Apple no empujó a todos hacia abajo. MLX Swift sigue siendo la capa expresiva para el cómputo numérico y de arrays en Apple silicon, y la sesión 328 es un argumento nítido a favor de quedarse ahí cuando puedes.4
David Koski, de Apple, sobre dónde encaja MLX Swift entre Accelerate, BNNS, Metal Performance Shaders y Swift Numerics (WWDC26, sesión 328).
MLX usa arrays n-dimensionales como su abstracción central, igual que NumPy, así que la mayor parte del código de NumPy se traduce con cambios mínimos y el código se lee como las matemáticas que estás implementando.4 Dos propiedades sostienen el framework: la evaluación perezosa, donde las operaciones construyen un grafo de cómputo que solo se ejecuta cuando llamas a eval o lees un valor, y las transformaciones de funciones que la evaluación perezosa hace posibles, incluida grad para la diferenciación automática.4 Por defecto, la GPU ejecuta el trabajo, y el planteamiento de Apple es que un 10x sobre un bucle escalar de CPU es ciertamente posible según el algoritmo.4 La sesión 328 lo argumenta con tres ejemplos: el conjunto de Mandelbrot como un bucle de dos líneas sobre toda una cuadrícula de números complejos, un solucionador de distribución de calor donde una sola llamada a conv2d aplica el stencil de Jacobi a lo largo de la cuadrícula, y un ajuste de curvas donde grad deriva el gradiente exacto sin derivadas escritas a mano.4 MLX ofrece todo el kit de herramientas más allá de eso y es de código abierto bajo licencia MIT, con front-ends de Swift, Python, C++ y C que comparten los mismos conceptos, así que puedes prototipar en Python y publicar en Swift.4
Cómo se relaciona con Core AI, Core ML y MLX
Las cuatro sesiones describen un solo stack a distintas altitudes, y el modelo mental correcto es una escalera.
- Core AI y Core ML son la capa de despliegue. Conviertes un modelo entrenado y lo ejecutas, y Apple se encarga de la aceleración. El soporte de Core AI para kernels Metal personalizados es el puente: el kernel FlashAttention de la sesión 330 se enchufa en un modelo de Core AI, así que una optimización a nivel de Metal llega a un despliegue de alto nivel sin reescritura.1
- MLX es la capa de cómputo de arrays y de investigación, donde escribes Swift con forma de matemáticas, obtienes autodiff y ejecución en GPU gratis, y ejecutas o afinas tus propios modelos. Es la capa donde debería empezar la mayor parte del trabajo de ML.4
- Metal Performance Shaders y TensorOps son la capa de kernel. Desciendes aquí cuando necesitas una operación personalizada, cuando estás construyendo un framework como el propio MLX, o cuando la red tiene que ejecutarse en línea dentro de un shader. La capa de kernel expone el neural accelerator de la forma más directa.1
El sustrato de hardware los une. El neural accelerator vive en el núcleo de shader de la GPU, y Metal es la forma en que alcanzas la GPU, así que cada capa superior acaba viajando sobre el mismo silicio, por encima de la arquitectura de memoria unificada y basada en tiles de Apple. Elegir una capa es el mismo juicio que la decisión entre MLX y Foundation Models: desciende solo cuando puedas nombrar la capacidad que la capa superior no te da, porque cada paso hacia abajo cambia comodidad por control.
FAQ
¿Qué es el neural accelerator del M5?
El neural accelerator es un nuevo bloque de hardware en la familia de chips M5, ubicado directamente dentro de cada núcleo de shader de la GPU, junto a las demás canalizaciones de la GPU.1 Apple lo diseñó para acelerar el trabajo denso y limitado por cómputo, como la etapa de prefill de un LLM, y la biblioteca TensorOps lo usa automáticamente cuando está presente.1 Apple también mencionó el neural accelerator de la GPU del A19 Pro en la sesión de renderizado neural.2
¿Qué tipos de datos cuantizados admiten los tensors Metal?
La actualización de macOS e iOS 26 añadió los tipos enteros de 4 y 8 bits.1 En macOS e iOS 27, TensorOps extiende el soporte a los tipos de punto flotante de 4 y 8 bits y al tipo entero de 2 bits, además de los factores de escala por bloques FP8 E8M0 llevados en el plano de escala de un tensor.1 Apple señala que estos tipos más pequeños conllevan requisitos de alineación adicionales, así que consulta la documentación de Metal antes de adoptarlos.1
¿Cuáles son los tres niveles de renderizado neural en Metal 4?
MetalFX es el nivel más alto, un denoiser y escalador neural de caja negra listo para usar.2 El ML command encoder de Metal 4 es el nivel intermedio, que ejecuta un modelo preentrenado exportado a un MTLPackage directamente en tu command buffer.2 TensorOps es el nivel más profundo, que te permite construir redes diminutas dentro de un shader, incluido el entrenamiento en línea que adapta un modelo en cada frame.2
¿Cuándo debo usar MLX en lugar de escribir kernels Metal?
Usa MLX Swift cuando tu objetivo sea código numérico o de arrays expresivo con buen rendimiento, donde el código deba leerse como las matemáticas y quieras autodiff y ejecución en GPU por defecto.4 Desciende a TensorOps y a los kernels Metal cuando necesites una operación personalizada que MLX o Core AI no proporcionen, cuando estés contribuyendo a un framework de ML, o cuando la red tenga que ejecutarse en línea dentro de un shader.1
¿Cómo mido el rendimiento de ML en la GPU en 2026?
En iOS y macOS 27 el sistema registra siempre las métricas de rendimiento de Metal en segundo plano, así que recolectas una traza retrospectiva después del hecho con metalperftrace collect --last <duration> en macOS o el botón Performance Trace del Centro de control en iOS.3 Analiza con metalperftrace overview (con --json para scripting) o Instruments, y añade la API StateReporting para etiquetar qué estaba haciendo tu aplicación, de modo que puedas atribuir las ralentizaciones a una pasada concreta.3
El clúster Apple Ecosystem continúa: MLX on Apple Silicon para la vía del framework de arrays, Apple Silicon TBDR para el sustrato de GPU que está debajo de todo ello, Core AI para ejecutar modelos en el dispositivo, y Core ML on-device inference para el stack de ML más amplio. El hub de la serie es la Apple Ecosystem Series, y para construir funciones agénticas sobre esta base, consulta la guía iOS Agent Development.
References
-
Apple, WWDC26 session 330, “Optimize custom machine learning operations with Metal tensors”. The M5 neural accelerator inside each shader core; TensorOps as a Metal Shading Language API for matrix multiplication and convolution; native quantized data types (4- and 8-bit integers in the macOS/iOS 26 update; 4- and 8-bit floats and 2-bit integers plus FP8 E8M0 block-wise scale factors in macOS/iOS 27); scale planes and auxiliary plane maps;
newTensorWithDescriptor,matmul2d_descriptor,matmul2d,tensor_handle/tensor_inline; cooperative tensors; the FlashAttention kernel (execution_simdgroupscope,reduce_rows,map_iterator,get_left_input_cooperative_tensor,is_compatible_as_left/right_input,op.run); and the SAM 3 / Core AI integration viaTorchMetalKernel. Apple directs developers to the Metal Performance Primitives documentation and programming guide for the full API reference. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, WWDC26 session 359, “Build real-time neural rendering pipelines with Metal”. The three levels of neural rendering in Metal 4 (MetalFX, the ML command encoder, TensorOps in a shader); MetalFX denoising/upscaling, its auxiliary inputs, the transparency overlay and denoiser strength mask, and the three best practices (clean inputs, primary surface replacement and Fresnel-blended albedo, dejittered motion vectors) as adopted by Maxon’s Redshift Live; neural tone mapping via HDRNet exported to an
MTLPackage; the sky-probe MLP (3-4-4-3) with online training; SIMD-group execution scope and cooperative tensors; and the reference to the A19 Pro GPU neural accelerator. Apple directs developers to the Metal Performance Primitives (MPP) Programming Guide for code details. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, WWDC26 session 388, “Find and fix performance issues in your Metal games”. The always-on background recording of Metal performance and resource metrics in iOS and macOS 27; look-back trace collection via the
metalperftracecommand-line tool (collect --last,overview,--json,--include-state-transitions) on macOS and the Control Center Performance Trace button on iOS; analysis in Instruments; the StateReporting API (domains as finite state machines,reportTransition, stable and volatile metadata,reportVolatileMetadataUpdate) and its integration with the Metal Performance HUD,metalperftrace, and Instruments; and MetricKit’s Metal frame-rate reporting broken down by StateReporting states. ↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, WWDC26 session 328, “Explore numerical computing in Swift with MLX”. MLX Swift as a NumPy-like n-dimensional array framework; lazy evaluation building a compute graph that runs on
evalor value read;gradfor automatic differentiation; GPU execution by default with up to 10x over scalar CPU code; the Mandelbrot, heat-distribution (Jacobi and SOR viaconv2d), and curve-fitting examples; the broader toolkit (linear algebra, FFTs, convolutions, reductions, scans, random number generation); and MLX’s open-source MIT license with Swift, Python, C++, and C front-ends. See also Apple Machine Learning Research, MLX Swift. ↩↩↩↩↩↩↩↩↩