Metal pour le machine learning en 2026
Le M5 d’Apple embarque un nouveau bloc matériel appelé neural accelerator, et il ne réside ni sur le Neural Engine ni à l’écart dans un quelconque coprocesseur. Il se trouve à l’intérieur de chaque cœur de shader du GPU, aux côtés des pipelines existants, conçu pour accélérer le travail dense et limité par le calcul comme l’étape de prefill d’un LLM.1 Ce positionnement résume à lui seul toute l’histoire de Metal en 2026. Le GPU vers lequel vous vous tourniez pour dessiner des triangles est désormais celui vers lequel vous vous tournez pour exécuter des multiplications matricielles, et Apple a consacré la WWDC26 à remettre aux développeurs les API pour l’utiliser directement. Metal est une surface de calcul de machine learning à part entière, et le cadre graphique ne rend plus compte de ce qu’il fait.
Pendant des années, l’histoire du ML embarqué se jouait au-dessus de Metal : Core ML ciblait le Neural Engine, MLX enveloppait le GPU dans une API de tableaux à la NumPy, MetalFX offrait aux jeux un upscaler scellé. Metal lui-même était le substrat sur lequel reposaient ces frameworks, pas une couche que la plupart des développeurs ML manipulaient directement. La WWDC26 a changé l’altitude. Apple a livré une API du Metal Shading Language pour le calcul tensoriel, a rendu les kernels personnalisés enfichables dans Core AI, et a montré des réseaux de neurones s’exécutant directement à l’intérieur des shaders. Les raisons de descendre au niveau de Metal sont désormais assez concrètes pour qu’on puisse les nommer.
TL;DR
- Le neural accelerator du M5 est un nouveau bloc matériel situé à l’intérieur de chaque cœur de shader du GPU, conçu pour accélérer le travail dense et limité par le calcul comme le prefill d’un LLM.1
- TensorOps est une API du Metal Shading Language qui accélère les opérations tensorielles (multiplication matricielle, convolution) sur le GPU et utilise automatiquement l’accélération matérielle disponible à travers les générations d’Apple silicon.1
- Les tensors Metal prennent nativement en charge les types de données quantifiés : les entiers sur 4 et 8 bits dans la mise à jour de macOS et iOS 26, avec les flottants sur 4 et 8 bits et les entiers sur 2 bits ainsi que les facteurs d’échelle par blocs E8M0 arrivant dans macOS et iOS 27.1
- Le rendu neural s’étend sur trois niveaux dans Metal 4 : le débruitage MetalFX comme boîte noire, le ML command encoder pour les modèles entraînés dans votre command buffer, et TensorOps pour de minuscules réseaux construits directement dans un shader.2
- MLX Swift conserve la voie du calcul numérique de haut niveau : du code tableau qui se lit comme les mathématiques, l’évaluation paresseuse, la différenciation automatique et l’exécution GPU par défaut.4
- De nouveaux outils de mesure de performance (collecte de trace rétrospective,
metalperftraceet l’API StateReporting) bouclent la boucle de la mesure de tout cela au fil de longues sessions.3
Tensors Metal et kernels ML personnalisés
Apple présente la pile ML comme des couches : Core AI et MLX au sommet pour un déploiement à code minimal, Metal Performance Shaders en dessous pour les kernels haute performance, et sous le tout Metal Performance Primitives et la bibliothèque TensorOps qui assurent l’accélération de bas niveau.1 Vous descendez au niveau de Metal pour une raison précise. La recherche en ML avance vite, vous pourriez donc implémenter une opération personnalisée qui s’enfiche dans un framework de plus haut niveau comme Core AI. Vous pourriez contribuer à un framework comme MLX ou llama.cpp. Ou vous pourriez écrire une application fondée sur Metal qui a besoin de l’opération en ligne.1
Shiyao, d’Apple, à propos du neural accelerator du M5 : un bloc matériel à l’intérieur de chaque cœur de shader, conçu pour le travail dense et limité par le calcul comme le prefill d’un LLM (WWDC26, session 330).
TensorOps est une API du Metal Shading Language qui accélère les opérations tensorielles sur le GPU, parmi lesquelles la multiplication matricielle et la convolution, et elle tire pleinement parti du neural accelerator du M5 sans que vous ayez à écrire du code propre à chaque génération.1 La bibliothèque lit le matériel disponible et l’utilise. Cette portabilité est précisément l’intérêt de passer par TensorOps plutôt que de coder à la main des opérations SIMD-group pour un GPU précis.
L’ajout le plus concret de 2026 est la quantification native. Les modèles ne cessent de grossir, l’inférence est généralement limitée par la bande passante mémoire, donc compresser les poids permet à la fois de faire tenir davantage de modèle en mémoire et d’économiser de la bande passante.1 La démarche standard : prendre des poids en demi-précision sur 16 bits, les réduire à 4 bits, et associer les valeurs quantifiées à des facteurs d’échelle qui les ramènent dans la plage au moment du calcul.1 TensorOps gère désormais nativement les types de données quantifiés. La mise à jour de macOS et iOS 26 a ajouté les types entiers sur 4 et 8 bits ; macOS et iOS 27 étendent cela aux types flottants sur 4 et 8 bits et aux entiers sur 2 bits.1 Vous créez un tensor quantifié presque exactement comme un tensor ordinaire : vous remplissez les propriétés du descripteur, spécifiez un dataType quantifié, et appelez newTensorWithDescriptor sur votre appareil Metal.1
Les facteurs d’échelle reçoivent eux aussi un logement propre. Dans macOS et iOS 27, un seul MTLTensor peut porter ses échelles aux côtés des données quantifiées sous forme de plan d’échelle supplémentaire, en prenant en charge le format de facteurs d’échelle par blocs FP8 E8M0, où chaque élément d’échelle s’applique à un bloc d’éléments de données.1 Vous construisez un descripteur pour le plan d’échelle, définissez son dataType et ses facteurs de bloc, et attachez une carte de plan auxiliaire au descripteur de tensor d’origine ; données quantifiées, échelles et métadonnées tiennent dans un seul objet tensor.1 Dans un kernel, vous déclarez le plan d’échelle (par exemple fp8_e8m0 avec une taille de bloc de 32 par 1, de sorte que chaque groupe de 32 éléments de données partage une échelle), déclarez le type complet du tensor, configurez un matmul2d_descriptor avec les tailles de tuile, créez une opération matmul2d, passez les tensors quantifiés, et TensorOps se charge de la déquantification pour vous.1
Lorsque vous avez besoin d’un format de quantification personnalisé que la bibliothèque ne connaît pas, déquantifiez directement dans un cooperative tensor et passez-le à l’opération matmul2d. Les cooperative tensors répartissent leur stockage sur la mémoire privée des threads participant au matmul, de sorte que les données restent dans les registres et que vous évitez l’aller-retour par la mémoire de threadgroup.1
L’exemple phare de la session 330 est FlashAttention, le kernel d’attention fusionné au cœur de chaque transformer. L’attention multiplie Q par K, calcule SoftMax sur les lignes de la matrice intermédiaire, puis multiplie par V ; FlashAttention fusionne ces trois étapes en un seul kernel.1 Vous utilisez la portée d’opération execution_simdgroup afin que chaque SIMD group possède des lignes complètes de la matrice intermédiaire et puisse calculer SoftMax sans échanger de données entre groupes, vous stockez la matrice intermédiaire dans un cooperative tensor, et vous calculez les réductions par ligne avec reduce_rows.1 L’amélioration de 2026 qui compte le plus : sous macOS 26, vous deviez stocker le cooperative tensor en mémoire de threadgroup avant le second matmul, mais vous pouvez maintenant l’injecter directement via get_left_input_cooperative_tensor après une vérification de disposition is_compatible_as_left.1 Si la vérification échoue, vous retombez sur l’aller-retour par le threadgroup ; dans les deux cas, op.run est identique.1
Apple a bouclé la boucle en intégrant ce kernel personnalisé dans un vrai modèle. Core AI convertit les modèles PyTorch et prend en charge les kernels Metal personnalisés ; l’équipe a donc défini le corps de FlashAttention sous forme de chaîne en Python, enregistré un TorchMetalKernel, remplacé l’attention par défaut de Hugging Face par une attention qui appelle le kernel, et exporté depuis PyTorch un modèle de segmentation d’image SAM 3 comme actif Core AI optimisé qui a correctement segmenté une voiture sur une image de test.1 Voilà le chemin qui mène d’un kernel GPU écrit à la main jusqu’à un modèle prêt à être livré.
Rendu neural en temps réel
Le second front est le rendu. De nombreuses techniques qui s’appuyaient historiquement sur des méthodes analytiques, dont le débruitage neural, les textures neural et le tone mapping appris, peuvent désormais s’exécuter comme du machine learning à n’importe quelle étape du pipeline pour améliorer la qualité, la performance ou l’empreinte mémoire.2 Metal 4 offre trois niveaux de contrôle, et le niveau que vous choisissez est un compromis délibéré.
Yulia, d’Apple, parcourt les trois niveaux de ML dans un pipeline de rendu Metal 4, de MetalFX aux réseaux TensorOps tournant sur le neural accelerator du M5 et de l’A19 Pro (WWDC26, session 359).
Au niveau le plus élevé, MetalFX fournit un débruiteur et un upscaler neural prêts à l’emploi sous forme de boîte noire entièrement intégrée, conçue pour les exigences de faible latence d’un viewport en direct.2 Dans un path tracer, votre budget de frame peut n’autoriser qu’un échantillon par pixel pour rester interactif, et un seul échantillon est bruité. MetalFX prend cette frame bruitée et des entrées auxiliaires (albédo diffus, profondeur et quelques autres) et produit une image propre, quasi finale, en combinant techniques spatiales et temporelles.2 Redshift Live de Maxon, un path tracer en temps réel dans Cinema 4D, l’a adopté, et Apple a distillé l’intégration en trois bonnes pratiques : gardez vos entrées auxiliaires sans bruit (l’albédo diffus est le signal de débruitage le plus fort), stockez ce que le spectateur voit réellement (remplacement de la surface primaire pour les miroirs, albédo mélangé selon Fresnel pour le verre), et soignez vos motion vectors (MetalFX attend des motion vectors déjitterisés, faute de quoi les bords scintillent).2
Le niveau intermédiaire est le ML command encoder de Metal 4, qui exécute un modèle pré-entraîné directement dans votre command buffer, sans changement de contexte.2 L’exemple traité par Apple est le tone mapping neural. La chaîne de post-traitement d’un renderer (tone mapping, étalonnage colorimétrique, émulation pellicule) se complexifie arbitrairement, et un réseau de neurones peut apprendre la transformation entière. Vous entraînez un réseau comme HDRNet (une architecture de 2017 de Gharbi et ses collègues) dans PyTorch, l’exportez vers un MTLPackage, le chargez avec un function descriptor et un machine learning pipeline descriptor, puis le distribuez avec une argument table.2 Le tone mapper neural remplace alors toute la chaîne de post-traitement multi-étapes par une seule évaluation neural, encodée dans le même command buffer que le path tracer et MetalFX, et exécutée dans la même frame.2
Le niveau le plus profond est TensorOps à l’intérieur d’un shader, la même bibliothèque que la session 330 mais utilisée pour construire de minuscules réseaux de quelques milliers de paramètres au plus, entraînés sur une seule scène et qui ne sont pas censés généraliser.2 Comme le réseau tient en ligne parmi vos instructions d’ALU et d’échantillonnage de textures, il permet l’entraînement en ligne : un modèle qui s’adapte à chaque frame aux conditions changeantes du monde. L’exemple d’Apple est une sky probe pour l’éclairage basé image, où un cycle jour-nuit dynamique rend obsolète un signal d’éclairage précalculé. La solution est un MLP entièrement connecté, un réseau 3-4-4-3 qui prend une direction sous forme de trois flottants et renvoie l’illumination sous forme de couleur, évalué en avant dans le shader et entraîné en ligne par une passe de rétropropagation à chaque frame.2 En utilisant la portée d’exécution SIMD-group, tous les threads participants travaillent sur la même multiplication matricielle et obtiennent des cooperative tensors dont le stockage se répartit entre les threads, de sorte que vous faites un matmul2d à travers chaque couche, appliquez les activations sur place, et lisez la sortie directement dans le shader sans aller-retour vers la mémoire principale. C’est le même chemin du neural accelerator que la session 330, qui alimente désormais un pixel.2
La mesurer : les outils de performance
Exécuter du ML sur le GPU, c’est entrer en concurrence pour les mêmes cycles, la même bande passante et le même budget thermique dont votre rendu a besoin ; la mesure cesse donc d’être optionnelle. La session 388 porte sur de longues sessions de jeu, mais l’outillage s’applique à toute charge Metal, ML compris, car une chute de framerate pendant une passe de tone mapping neural ressemble exactement à n’importe quel autre blocage GPU jusqu’à ce que vous puissiez voir ce que faisait l’application.3
Ruiwei, d’Apple, sur le système qui enregistre en permanence les métriques de performance Metal en arrière-plan, afin que vous puissiez remonter de plusieurs heures et collecter une trace une fois la session terminée (WWDC26, session 388).
Le changement majeur d’iOS et macOS 27 : le système enregistre en permanence en arrière-plan les métriques de performance et de ressources Metal, en conservant pendant des jours des données agrégées et, en option, par frame (CPU, GPU, FPS, mémoire).3 Vous collectez après coup. Sous macOS, metalperftrace collect --last 5h extrait une trace des cinq dernières heures ; sous iOS, une configuration unique ajoute un bouton Performance Trace au Centre de contrôle qui traite une trace rétrospective à la demande.3 Vous analysez avec metalperftrace overview, et --json produit une sortie structurée que vous pouvez fournir à un script de régression ou confier à un agent IA pour le triage ; Instruments trace tout sur une chronologie et signale en couleur les statistiques aberrantes.3
L’élément qui rend un graphe brut de FPS exploitable est l’API StateReporting, disponible en Swift et en Objective-C.3 Vous définissez des domaines, chacun étant une machine à états finis pour un domaine fonctionnel orthogonal, et signalez les transitions avec un label plus, en option, des métadonnées stables et des métadonnées volatiles propres à chaque état.3 Pour une application à forte charge ML, vous pourriez faire tourner un domaine qui suit quelle passe neural est active, de sorte que, lorsque le temps de frame s’envole, vous puissiez demander à metalperftrace d’agréger les FPS pour un label d’état précis et constater directement que, disons, c’est la passe de tone mapping qui coûte.3 La mise en garde d’Apple : maintenez les transitions à la cadence des actions utilisateur ou plus lentes, car le système limite les rapports à haute fréquence et vous perdez des données.3 Une fois l’application livrée, MetricKit dans iOS et macOS 27 expose les informations de framerate Metal ventilées par vos états StateReporting, livrées sous forme de rapports quotidiens depuis les appareils.3
MLX : la voie de haut niveau demeure
Tous les développeurs ML ne veulent pas écrire des kernels GPU, et Apple n’a forcé personne à descendre. MLX Swift reste la couche expressive pour le calcul numérique et tableau sur Apple silicon, et la session 328 est un plaidoyer limpide en faveur d’y rester quand vous le pouvez.4
David Koski, d’Apple, sur la place de MLX Swift parmi Accelerate, BNNS, Metal Performance Shaders et Swift Numerics (WWDC26, session 328).
MLX utilise des tableaux à n dimensions comme abstraction centrale, à la manière de NumPy, de sorte que la plupart du code NumPy se traduit avec un minimum de changements et que le code se lit comme les mathématiques que vous implémentez.4 Deux propriétés portent le framework : l’évaluation paresseuse, où les opérations construisent un graphe de calcul qui ne s’exécute que lorsque vous appelez eval ou lisez une valeur, et les transformations de fonctions que cette évaluation paresseuse rend possibles, dont grad pour la différenciation automatique.4 Par défaut, c’est le GPU qui exécute le travail, et Apple avance qu’un facteur 10 par rapport à une boucle CPU scalaire est tout à fait possible selon l’algorithme.4 La session 328 argumente avec trois exemples : l’ensemble de Mandelbrot sous forme de boucle de deux lignes sur toute une grille de nombres complexes, un solveur de distribution de chaleur où un seul appel conv2d applique le stencil de Jacobi à travers la grille, et un ajustement de courbe où grad dérive le gradient exact sans dérivées écrites à la main.4 MLX livre bien plus que cela en termes d’outillage et est open source sous licence MIT, avec des front-ends Swift, Python, C++ et C qui partagent les mêmes concepts, ce qui vous permet de prototyper en Python et de livrer en Swift.4
Comment cela s’articule avec Core AI, Core ML et MLX
Les quatre sessions décrivent une seule pile à différentes altitudes, et le bon modèle mental est une échelle.
- Core AI et Core ML sont la couche de déploiement. Vous convertissez un modèle entraîné et l’exécutez, et Apple maîtrise l’accélération. La prise en charge des kernels Metal personnalisés par Core AI fait le pont : le kernel FlashAttention de la session 330 s’enfiche dans un modèle Core AI, de sorte qu’une optimisation au niveau de Metal atteint un déploiement de haut niveau sans réécriture.1
- MLX est la couche de calcul tableau et de recherche, où vous écrivez du Swift en forme de mathématiques, obtenez l’autodiff et l’exécution GPU gratuitement, et exécutez ou affinez vos propres modèles. C’est la couche par laquelle l’essentiel du travail ML devrait commencer.4
- Metal Performance Shaders et TensorOps sont la couche kernel. Vous descendez ici lorsque vous avez besoin d’une opération personnalisée, lorsque vous construisez un framework comme MLX lui-même, ou lorsque le réseau doit s’exécuter en ligne dans un shader. La couche kernel expose le neural accelerator le plus directement.1
Le substrat matériel les relie. Le neural accelerator vit dans le cœur de shader du GPU, et Metal est la façon dont vous atteignez le GPU, de sorte que chaque couche au-dessus finit par rouler sur le même silicium, par-dessus l’architecture à mémoire unifiée et tuilée d’Apple. Choisir une couche relève du même jugement que la décision MLX contre Foundation Models : ne descendez que lorsque vous pouvez nommer la capacité que la couche supérieure ne vous donne pas, car chaque marche vers le bas échange du confort contre du contrôle.
FAQ
Qu’est-ce que le neural accelerator du M5 ?
Le neural accelerator est un nouveau bloc matériel de la famille de puces M5, situé directement à l’intérieur de chaque cœur de shader du GPU, aux côtés des autres pipelines GPU.1 Apple l’a conçu pour accélérer le travail dense et limité par le calcul, comme l’étape de prefill d’un LLM, et la bibliothèque TensorOps l’utilise automatiquement lorsqu’il est présent.1 Apple a également évoqué le neural accelerator du GPU de l’A19 Pro dans la session sur le rendu neural.2
Quels types de données quantifiés les tensors Metal prennent-ils en charge ?
La mise à jour de macOS et iOS 26 a ajouté les types entiers sur 4 et 8 bits.1 Dans macOS et iOS 27, TensorOps étend la prise en charge aux types flottants sur 4 et 8 bits et au type entier sur 2 bits, plus les facteurs d’échelle par blocs FP8 E8M0 portés dans le plan d’échelle d’un tensor.1 Apple note que ces types plus petits comportent des exigences d’alignement supplémentaires, alors consultez la documentation Metal avant de les adopter.1
Quels sont les trois niveaux de rendu neural dans Metal 4 ?
MetalFX est le niveau le plus élevé, un débruiteur et upscaler neural en boîte noire prêt à l’emploi.2 Le ML command encoder de Metal 4 est le niveau intermédiaire, exécutant un modèle pré-entraîné exporté vers un MTLPackage directement dans votre command buffer.2 TensorOps est le niveau le plus profond, vous permettant de construire de minuscules réseaux à l’intérieur d’un shader, y compris l’entraînement en ligne qui adapte un modèle à chaque frame.2
Quand utiliser MLX plutôt qu’écrire des kernels Metal ?
Utilisez MLX Swift lorsque votre objectif est un code numérique ou tableau expressif et performant, où le code doit se lire comme les mathématiques et où vous voulez l’autodiff et l’exécution GPU par défaut.4 Descendez vers TensorOps et les kernels Metal lorsque vous avez besoin d’une opération personnalisée que MLX ou Core AI ne fournit pas, lorsque vous contribuez à un framework ML, ou lorsque le réseau doit s’exécuter en ligne dans un shader.1
Comment mesurer la performance ML sur le GPU en 2026 ?
Dans iOS et macOS 27, le système enregistre en permanence les métriques de performance Metal en arrière-plan, de sorte que vous collectez une trace rétrospective après coup avec metalperftrace collect --last <duration> sous macOS ou le bouton Performance Trace du Centre de contrôle sous iOS.3 Analysez avec metalperftrace overview (avec --json pour le scripting) ou Instruments, et ajoutez l’API StateReporting pour étiqueter ce que faisait votre application afin d’attribuer les ralentissements à une passe précise.3
Le cluster Apple Ecosystem continue : MLX on Apple Silicon pour la voie du framework de tableaux, Apple Silicon TBDR pour le substrat GPU sous-jacent à tout cela, Core AI pour exécuter des modèles en local, et Core ML on-device inference pour la pile ML plus large. Le hub de la série est l’Apple Ecosystem Series, et pour construire des fonctionnalités agentiques sur cette base, consultez le guide 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. ↩↩↩↩↩↩↩↩↩