View in English

  • Apple Developer
    • Get Started

    Explore Get Started

    • Overview
    • Learn
    • Apple Developer Program

    Stay Updated

    • Latest News
    • Hello Developer
    • Platforms

    Explore Platforms

    • Apple Platforms
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    Featured

    • Design
    • Distribution
    • Games
    • Accessories
    • Web
    • Home
    • CarPlay
    • Technologies

    Explore Technologies

    • Overview
    • Xcode
    • Swift
    • SwiftUI

    Featured

    • Accessibility
    • App Intents
    • Apple Intelligence
    • Games
    • Machine Learning & AI
    • Security
    • Xcode Cloud
    • Community

    Explore Community

    • Overview
    • Meet with Apple events
    • Community-driven events
    • Developer Forums
    • Open Source

    Featured

    • WWDC
    • Swift Student Challenge
    • Developer Stories
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Centers
    • Documentation

    Explore Documentation

    • Documentation Library
    • Technology Overviews
    • Sample Code
    • Human Interface Guidelines
    • Videos

    Release Notes

    • Featured Updates
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • Downloads

    Explore Downloads

    • All Downloads
    • Operating Systems
    • Applications
    • Design Resources

    Featured

    • Xcode
    • TestFlight
    • Fonts
    • SF Symbols
    • Icon Composer
    • Support

    Explore Support

    • Overview
    • Help Guides
    • Developer Forums
    • Feedback Assistant
    • Contact Us

    Featured

    • Account Help
    • App Review Guidelines
    • App Store Connect Help
    • Upcoming Requirements
    • Agreements and Guidelines
    • System Status
  • Quick Links

    • Events
    • News
    • Forums
    • Sample Code
    • Videos
 

Vidéos

Ouvrir le menu Fermer le menu
  • Collections
  • Toutes les vidéos
  • À propos

Plus de vidéos

  • À propos
  • Résumé
  • Code
  • Combinez l’apprentissage automatique et les graphismes de Metal 4

    Découvrez comment combiner l'apprentissage automatique dans vos applications graphiques à l'aide de Metal 4. Nous présenterons la ressource tensorielle et l'encodeur ML pour exécuter des modèles sur la chronologie de carte graphique parallèlement à votre travail de rendu et de calcul. Découvrez comment Shader ML vous permet d'intégrer des réseaux neuronaux directement dans vos shaders pour obtenir des effets avancés et des gains de performances. Nous montrerons également de nouveaux outils de débogage pour les charges de travail Metal 4 ML en action à l'aide d'un exemple d'app.

    Chapitres

    • 0:00 - Introduction
    • 2:52 - Découvrez les tenseurs
    • 6:21 - Encodage des réseaux ML
    • 12:51 - Intégrer ML dans votre shader
    • 20:26 - Déboguer vos charges de travail ML

    Ressources

    • Customizing a PyTorch operation
    • Metal Developer Resources
    • Metal Performance Shaders
      • Vidéo HD
      • Vidéo SD

    Vidéos connexes

    WWDC25

    • Allez plus loin avec les jeux Metal 4
    • Découvrez Metal 4
    • Explorez les jeux Metal 4
    • Nouveautés du rendu Metal pour les apps immersives

    WWDC24

    • Accelerate machine learning with Metal
    • Train your machine learning and AI models on Apple GPUs
  • Rechercher dans cette vidéo…
    • 8:13 - Exporting a Core ML package with PyTorch

      import coremltools as ct
      
      # define model in PyTorch
      # export model to an mlpackage
      
      model_from_export = ct.convert(
          custom_traced_model,
          inputs=[...],
          outputs=[...],
          convert_to='mlprogram',
          minimum_deployment_target=ct.target.macOS16,
      )
      
      model_from_export.save('model.mlpackage')
    • 9:10 - Identifying a network in a Metal package

      library = [device newLibraryWithURL:@"myNetwork.mtlpackage"];
      
      functionDescriptor = [MTL4LibraryFunctionDescriptor new]
      functionDescriptor.name = @"main";
      functionDescriptor.library = library;
    • 9:21 - Creating a pipeline state

      descriptor = [MTL4MachineLearningPipelineDescriptor new];
      descriptor.machineLearningFunctionDescriptor = functionDescriptor;
      
      [descriptor setInputDimensions:dimensions
                       atBufferIndex:1];
      
      pipeline = [compiler newMachineLearningPipelineStateWithDescriptor:descriptor
                                                                   error:&error];
    • 9:58 - Dispatching a network

      commands = [device newCommandBuffer];
      [commands beginCommandBufferWithAllocator:cmdAllocator];
      [commands useResidencySet:residencySet];
      
      /* Create intermediate heap */
      /* Configure argument table */
      
      encoder = [commands machineLearningCommandEncoder];
      [encoder setPipelineState:pipeline];
      [encoder setArgumentTable:argTable];
      [encoder dispatchNetworkWithIntermediatesHeap:heap];
    • 10:30 - Creating a heap for intermediate storage

      heapDescriptor = [MTLHeapDescriptor new];
      heapDescriptor.type = MTLHeapTypePlacement;
      heapDescriptor.size = pipeline.intermediatesHeapSize;
              
      heap = [device newHeapWithDescriptor:heapDescriptor];
    • 10:46 - Submitting commands to the GPU timeline

      commands = [device newCommandBuffer];
      [commands beginCommandBufferWithAllocator:cmdAllocator];
      [commands useResidencySet:residencySet];
      
      /* Create intermediate heap */
      /* Configure argument table */
      
      encoder = [commands machineLearningCommandEncoder];
      [encoder setPipelineState:pipeline];
      [encoder setArgumentTable:argTable];
      [encoder dispatchNetworkWithIntermediatesHeap:heap];
      
      [commands endCommandBuffer];
      [queue commit:&commands count:1];
    • 11:18 - Synchronization

      [encoder barrierAfterStages:MTLStageMachineLearning
                beforeQueueStages:MTLStageVertex
                visibilityOptions:MTL4VisibilityOptionDevice];
    • 15:17 - Declaring a fragment shader with tensor inputs

      // Metal Shading Language 4
      
      #include <metal_tensor>
      
      using namespace metal;
       
      [[fragment]]
      float4 shade_frag(tensor<device half, dextents<int, 2>> layer0Weights [[ buffer(0) ]],
                        tensor<device half, dextents<int, 2>> layer1Weights [[ buffer(1) ]],
                        /* other bindings */)
      {
          // Creating input tensor
          half inputs[INPUT_WIDTH] = { /* four latent texture samples + UV data */ };
      
          auto inputTensor = tensor(inputs, extents<int, INPUT_WIDTH, 1>());
          ...
      }
    • 17:12 - Operating on tensors in shaders

      // Metal Shading Language 4
      
      #include <MetalPerformancePrimitives/MetalPerformancePrimitives.h>
      
      using namespace mpp;
      
      constexpr tensor_ops::matmul2d_descriptor desc(
                    /* M, N, K */ 1, HIDDEN_WIDTH, INPUT_WIDTH,
             /* left transpose */ false,
            /* right transpose */ true,
          /* reduced precision */ true);
      
      tensor_ops::matmul2d<desc, execution_thread> op;
      op.run(inputTensor, layerN, intermediateN);
      
      for (auto intermediateIndex = 0; intermediateIndex < intermediateN(0); ++intermediateIndex)
      {
          intermediateN[intermediateIndex, 0] = max(0.0f, intermediateN[intermediateIndex, 0]);
      }
    • 18:38 - Render using network evaluation

      half3 baseColor          = half3(outputTensor[0,0], outputTensor[1,0], outputTensor[2,0]);
      half3 tangentSpaceNormal = half3(outputTensor[3,0], outputTensor[4,0], outputTensor[5,0]);
      
      half3 worldSpaceNormal = worldSpaceTBN * tangentSpaceNormal;
      
      return baseColor * saturate(dot(worldSpaceNormal, worldSpaceLightDir));
    • 0:00 - Introduction
    • Nous sommes ravis de présenter Metal 4, qui améliore l’intégration de l’apprentissage automatique dans les jeux et les graphismes. Metal 4 permet d’utiliser des techniques telles que l’upscaling, la compression des ressources et le mélange d’animations à l’aide de réseaux d’apprentissage automatique, ce qui améliore les performances et la fidélité visuelle. Les principales fonctionnalités comprennent MTLTensors pour les workflows d’apprentissage automatique, MTL4MachineLearningCommandEncoder pour l’exécution de réseaux sur la timeline GPU, Shader ML pour l’intégration d’opérations d’apprentissage automatique dans les shaders, ainsi que des outils de débogage améliorés. CoreML est idéal pour créer des modèles d’apprentissage automatique Vous pouvez également intégrer facilement l’apprentissage automatique dans vos apps à l’aide du débogueur Metal.

    • 2:52 - Découvrez les tenseurs
    • Metal 4 présente MTLTensor, une nouvelle ressource spécialement conçue pour les charges de travail liées à l’apprentissage automatique. Les MTLTensors sont des conteneurs de données multidimensionnels qui permettent de représenter efficacement les structures de données complexes couramment utilisées dans l’apprentissage automatique, telles que celles requises pour les opérations de convolution. Ils simplifient l’indexation des données multidimensionnelles par rapport aux représentations plates telles que les MTLBuffers. Un MTLTensor est défini par son rang (nombre d’axes), ses étendues (nombre de points de données le long de chaque axe), son type de données et ses propriétés d’utilisation. Ces propriétés sont spécifiées dans un objet MTLTensorDescriptor. Vous pouvez créer des MTLTensors à partir d’un objet MTLDevice, qui offre des performances optimisées avec une disposition opaque, ou à partir d’un objet MTLBuffer existant, où vous devez spécifier les pas pour tenir compte du remplissage potentiel.

    • 6:21 - Encodage des réseaux ML
    • La dernière version de Metal introduit également le MTL4MachineLearningCommandEncoder, qui permet d’intégrer de manière transparente le travail d’apprentissage automatique dans la timeline du GPU, parallèlement aux commandes de calcul et de rendu. Ce nouvel encodeur permet d’exécuter des modèles d’apprentissage automatique complets sur le GPU, en synchronisation avec d’autres commandes Metal à l’aide de primitives de synchronisation standard telles que les barrières et les clôtures. Le flux de travail comprend deux parties principales : hors ligne et en cours d’exécution. Hors ligne, le système convertit un package CoreML en un MTLPackage optimisé à l’aide de l’outil de ligne de commande metal-package-builder. Lors de l’exécution, le système compile MTLPackage en MTL4MachineLearningPipelineState et crée le MTL4MachineLearningCommandEncoder configuré avec l’état du pipeline, les entrées et les sorties, puis distribue les commandes encodées au GPU. L’encodeur utilise un MTLHeap pour stocker les données intermédiaires, ce qui optimise l’utilisation des ressources. Cela permet l’exécution parallèle de tâches non dépendantes, améliorant ainsi les performances. Les capacités de synchronisation de Metal 4 garantissent que les tâches utilisant les résultats d’un modèle d’apprentissage automatique attendent que celui-ci ait terminé son exécution, ce qui le rend adapté à de nombreuses apps en temps réel, et pas seulement aux jeux.

    • 12:51 - Intégrer ML dans votre shader
    • Metal 4 introduit Shader ML, qui permet aux développeurs d’intégrer des opérations d’apprentissage automatique directement dans les shaders. Cela améliore les performances et réduit l’empreinte mémoire en éliminant la nécessité de synchroniser les tenseurs entre la mémoire de l’appareil et les shaders. La compression de textures de matériaux à l’aide de réseaux neuronaux, une technique spécifique de l’apprentissage automatique, en est un exemple. Cette technique compresse les textures des matériaux jusqu’à 50 % par rapport aux formats traditionnels compressés par blocs. Avec Shader ML, l’ensemble du processus d’évaluation des matériaux neuronaux, de l’initialisation des tenseurs d’entrée à l’inférence et à l’ombrage, peut être regroupé en un seul appel de shader. Metal Performance Primitives est intégré à Shader ML, fournissant des API hautes performances telles que la multiplication matricielle et la convolution. Cela vous permet de mettre en œuvre efficacement des routines d’évaluation de réseaux neuronaux dans des shaders de fragments, ce qui se traduit par des apps en temps réel sans perte de qualité perceptible, mais avec une réduction significative de l’utilisation de la mémoire et de l’espace disque.

    • 20:26 - Déboguer vos charges de travail ML
    • Dans l’exemple fourni, vous pouvez utiliser les nouveaux outils GPU de Xcode pour déboguer une charge de travail d’apprentissage automatique qui provoque des artefacts visuels marqués dans le calcul de l’occlusion ambiante d’une app. Vous pouvez capturer la trace GPU et utiliser le visualiseur de dépendances pour inspecter la synchronisation des tampons de commandes, ce qui permet d’écarter tout problème. Vous examinerez ensuite les tenseurs d’entrée et de sortie du MTL4MachineLearningCommandEncoder afin de confirmer que le problème provient bien du réseau d’apprentissage automatique en soi. Ensuite, vous pouvez ouvrir le réseau dans le nouveau débogueur ML Network Debugger, un outil visuel qui représente la structure du modèle (écrit en PyTorch et converti en CoreML et MTLPackage), afin d’identifier l’opération spécifique responsable de l’introduction des artefacts. En examinant le graphique, on constate que les artefacts sont présents à la fois dans la sortie et dans l’entrée d’une opération précédente, ce qui indique un problème au sein du réseau. La fonction SignedSmoothstep est identifiée comme étant la source du problème. Après avoir examiné le code Python, un bug a été découvert : un astérisque en trop qui faisait interpréter au système une opération de multiplication comme une opération de puissance. La correction de cette erreur résout le problème, et l’implémentation de l’occlusion ambiante neuronale utilisant le MTL4MachineLearningCommandEncoder » de Metal 4 est ainsi déboguée avec succès.

Developer Footer

  • Vidéos
  • WWDC25
  • Combinez l’apprentissage automatique et les graphismes de Metal 4
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • Apple Intelligence
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Downloads
    • Sample Code
    • Videos
    Open Menu Close Menu
    • Help Guides & Articles
    • Contact Us
    • Forums
    • Feedback & Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • Mini Apps Partner Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Read the latest news.
    Get the Apple Developer app.
    Copyright © 2026 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines