← すべての記事

2026年の機械学習におけるMetal

AppleのM5には、neural acceleratorと呼ばれる新しいハードウェアブロックが搭載されています。これはNeural Engine上にあるわけでも、どこかのコプロセッサに置かれているわけでもありません。各GPUシェーダーコアの内部、既存のパイプラインと並んで配置され、LLMのprefillステージのような密で計算律速な処理を高速化するために作られています。1 この配置こそが、2026年のMetalを語るうえですべてを物語っています。三角形を描くために手に取るGPUは、いまや行列積を実行するために手に取るGPUでもあり、AppleはWWDC26を通じて、それを直接使うためのAPIを開発者へと手渡しました。Metalは第一級の機械学習計算基盤であり、もはやグラフィックスという枠組みではその実態を捉えきれません。

長年、オンデバイスMLの物語はMetalの上の階層で展開されていました。Core MLはNeural Engineを対象とし、MLXはGPUをNumPy風の配列APIで包み、MetalFXはゲームに密閉されたアップスケーラーを提供していました。Metalそのものは、これらのフレームワークが立つ土台であって、多くのML開発者が直接書き込む層ではありませんでした。WWDC26はその高度を変えたのです。Appleはテンソル演算のためのMetal Shading Language APIを出荷し、カスタムカーネルをCore AIに差し込めるようにし、ニューラルネットワークがシェーダー内部でインラインに動く様子を示しました。Metalのレベルまで降りる理由は、いまや具体的に名前を挙げられるほど明確になっています。

TL;DR

  • M5 neural accelerator は各GPUシェーダーコアの内部に置かれた新しいハードウェアブロックで、LLMのprefillのような密で計算律速な処理を高速化するために設計されています。1
  • TensorOps はGPU上でテンソル演算(行列積、畳み込み)を高速化するMetal Shading Language APIであり、Apple siliconの各世代で利用可能なハードウェアアクセラレーションを自動的に使います。1
  • Metalテンソルは 量子化データ型をネイティブにサポート します。macOSおよびiOS 26のアップデートで4ビットと8ビットの整数、macOSおよびiOS 27では4ビットと8ビットの浮動小数点型と2ビット整数型、さらにE8M0のブロック単位スケールファクターが加わります。1
  • ニューラルレンダリング はMetal 4で3つのレベルにまたがります。ブラックボックスとしてのMetalFXデノイズ、コマンドバッファ内で学習済みモデルを動かすMLコマンドエンコーダー、そしてシェーダー内で小さなネットワークを直接組むTensorOpsです。2
  • MLX Swift は高レベルな数値計算の道を保ち続けます。数式のように読める配列コード、遅延評価、自動微分、そしてデフォルトでのGPU実行です。4
  • 新しい パフォーマンス計測ツール(ルックバック型のトレース収集、metalperftrace、StateReporting API)が、長時間のセッションを通じてそのすべてを計測するループを閉じます。3

MetalテンソルとカスタムMLカーネル

AppleはMLスタックを階層として描きます。最小限のコードでデプロイするための最上層にCore AIとMLX、その下に高性能カーネルのためのMetal Performance Shaders、そしてすべての土台として低レベルの高速化を担うMetal Performance PrimitivesとTensorOpsライブラリがあります。1 Metalのレベルまで降りるのには、明確な理由があります。ML研究は速く動くので、Core AIのような高レベルフレームワークに差し込むカスタム演算を実装したくなるかもしれません。MLXやllama.cppのようなフレームワークに貢献している場合もあるでしょう。あるいは、その演算をインラインで必要とするMetalベースのアプリケーションを書いている場合もあります。1

Watch on Apple Developer ↗

AppleのShiyaoがM5 neural acceleratorについて語ります。各シェーダーコアの内部に置かれ、LLMのprefillのような密で計算律速な処理のために作られたハードウェアブロックです(WWDC26、セッション330)。

TensorOpsはGPU上でテンソル演算、なかでも行列積や畳み込みを高速化するMetal Shading Language APIで、世代ごとのコードを書かなくてもM5 neural acceleratorをフルに活用します。1 このライブラリは利用可能なハードウェアを読み取り、それを使います。特定のGPUに対してSIMDグループの演算を手作業で組むのではなく、TensorOpsを通して作業する意義はこの移植性にあるのです。

2026年で最も実用的な追加は、ネイティブな量子化です。モデルは大きくなり続け、推論は通常メモリ帯域律速なので、重みを圧縮すればより多くのモデルをメモリに収められ、同時に帯域も節約できます。1 定石はこうです。16ビットの半精度の重みを取り、4ビットへと縮め、量子化された値を、計算時にそれらを元の範囲へ戻すスケールファクターと組み合わせるのです。1 TensorOpsはいまや量子化データ型をネイティブに扱います。macOSおよびiOS 26のアップデートで4ビットと8ビットの整数型が追加され、macOSおよびiOS 27ではそれが4ビットと8ビットの浮動小数点型と2ビット整数へと広がります。1 量子化テンソルの作成は、通常のテンソルとほぼまったく同じです。ディスクリプタのプロパティを埋め、量子化された dataType を指定し、Metalデバイス上で newTensorWithDescriptor を呼ぶだけです。1

スケールファクターにもきれいな置き場所が用意されました。macOSおよびiOS 27では、1つの MTLTensor が量子化データと並べて自身のスケールを追加のスケールプレーンとして持てるようになり、各スケール要素がデータ要素のブロックに適用されるFP8のE8M0ブロック単位スケールファクター形式をサポートします。1 スケールプレーン用のディスクリプタを作り、その dataType とブロックファクターを設定し、補助プレーンマップを元のテンソルディスクリプタに付ければ、量子化データ、スケール、メタデータが1つのテンソルオブジェクトに収まります。1 カーネル内では、スケールプレーンを宣言し(たとえば32×1のブロックサイズの fp8_e8m0 なら、32個のデータ要素ごとに1つのスケールを共有します)、テンソル型全体を宣言し、タイルサイズを指定した matmul2d_descriptor を用意し、matmul2d 演算を作って量子化テンソルを渡せば、TensorOpsが逆量子化を肩代わりしてくれます。1

ライブラリが知らないカスタム量子化形式が必要なときは、cooperative tensorへ直接逆量子化してから matmul2d 演算に渡します。cooperative tensorはそのストレージをmatmulに参加するスレッドのスレッドプライベートメモリ全体に分散させるので、データはレジスタにとどまり、スレッドグループメモリを経由する往復を省けます。1

セッション330の目玉となる例は、あらゆるTransformerの中核にある融合アテンションカーネル、FlashAttentionです。アテンションはQとKを掛け、中間行列の各行に対してSoftMaxを計算し、それをVと掛けます。FlashAttentionはこの3つを1つのカーネルに融合します。1 execution_simdgroup の演算スコープを使うことで、各SIMDグループが中間行列の完全な行を所有し、グループ間でデータをやり取りせずにSoftMaxを計算でき、中間行列をcooperative tensorに格納し、reduce_rows で行方向のリダクションを計算します。1 2026年で最も重要な改善はこれです。macOS 26では2回目のmatmulの前にcooperative tensorをスレッドグループメモリへ格納しなければなりませんでしたが、いまは is_compatible_as_left のレイアウトチェックを通したあと get_left_input_cooperative_tensor でそのまま流し込めます。1 チェックに失敗した場合はスレッドグループ経由の往復にフォールバックしますが、いずれにせよ op.run は同一です。1

Appleは、そのカスタムカーネルを実際のモデルに統合してループを閉じました。Core AIはPyTorchモデルを変換し、カスタムMetalカーネルをサポートします。そこでチームはFlashAttentionの本体をPythonの文字列として定義し、TorchMetalKernel を登録し、Hugging Faceのデフォルトのアテンションをそのカーネルを呼ぶものに置き換え、PyTorchから画像セグメンテーションモデルのSAM 3を最適化されたCore AIアセットとしてエクスポートし、テスト画像内の車を正しくセグメンテーションさせました。1 これが、手書きのGPUカーネルから出荷可能なモデルへと至る道のりです。

リアルタイムのニューラルレンダリング

第2の戦線はレンダリングです。歴史的に解析的手法を用いてきた多くの技法、たとえばニューラルデノイズ、ニューラルテクスチャ、学習されたトーンマッピングなどは、いまやパイプラインの任意の段階で機械学習として動かせるようになり、品質、パフォーマンス、メモリフットプリントを改善できます。2 Metal 4は3つの制御レベルを提供し、どのレベルを選ぶかは意図的なトレードオフです。

Watch on Apple Developer ↗

AppleのYuliaが、Metal 4レンダリングパイプラインにおけるMLの3つのレベルを、MetalFXからM5とA19 Pro neural accelerator上で動くTensorOpsネットワークまで案内します(WWDC26、セッション359)。

最も高いレベルでは、MetalFX がすぐに使えるニューラルデノイザーとアップスケーラーを完全に統合されたブラックボックスとして提供し、ライブビューポートの低レイテンシ要件に応えます。2 パストレーサーでは、インタラクティブ性を保つためにフレーム予算が1ピクセルあたり1サンプルしか許さない場合があり、1サンプルはノイズだらけです。MetalFXはそのノイズの多いフレームに補助入力(拡散アルベド、深度、ほかいくつか)を加え、空間的手法と時間的手法の両方を使ってクリーンでほぼ最終的な画像を生み出します。2 MaxonのRedshift Live、Cinema 4D上のリアルタイムパストレーサーがこれを採用しており、Appleはその統合を3つのベストプラクティスに凝縮しました。補助入力をノイズフリーに保つこと(拡散アルベドが最も強いデノイズ信号です)、視聴者が実際に見るものを格納すること(鏡には一次サーフェスの置き換え、ガラスにはFresnelブレンドのアルベド)、そしてモーションベクトルを正しくすること(MetalFXはディジッターされたモーションベクトルを期待しており、さもないとエッジがちらつきます)です。2

中間レベルは Metal 4 MLコマンドエンコーダー で、学習済みモデルをコンテキストスイッチなしでコマンドバッファ内に直接実行します。2 Appleの実例はニューラルトーンマッピングです。レンダラーのポストプロセスチェーン(トーンマッピング、カラーグレード、フィルムエミュレーション)はいくらでも複雑になり得ますが、ニューラルネットワークはその変換全体を学習できます。HDRNet(Gharbiらによる2017年のアーキテクチャ)のようなネットワークをPyTorchで学習し、MTLPackage にエクスポートし、function descriptorとmachine learning pipeline descriptorで読み込み、argument tableでディスパッチします。2 するとニューラルトーンマッパーは多段のポストプロセスチェーン全体を1回のニューラル評価に置き換え、パストレーサーやMetalFXと同じコマンドバッファ内にエンコードされ、同じフレームで実行されます。2

最も深いレベルは シェーダー内のTensorOps で、セッション330と同じライブラリですが、数千パラメータ以下の小さなネットワークを組むために使い、1つのシーンで学習され、汎化を意図しません。2 ネットワークがALUやテクスチャサンプリングの命令の中にインラインで収まるため、オンライン学習が可能になります。変化する世界の状況にフレームごとに適応するモデルです。Appleの例は、画像ベースライティングのための天空プローブで、動的な昼夜サイクルが事前計算された照明信号を陳腐化させます。その解決策が全結合MLP、つまり方向を3つのfloatとして受け取り照明を色として返す3-4-4-3のネットワークで、シェーダー内で順方向に評価され、フレームごとの逆伝播パスでオンライン学習されます。2 SIMDグループの実行スコープを使うと、参加するすべてのスレッドが同じ行列積に取り組み、ストレージがスレッド全体に分散するcooperative tensorを得られるので、各層を matmul2d で通し、活性化をその場で適用し、メインメモリへの往復なしにシェーダー内でその場で出力を読めます。これはセッション330と同じneural acceleratorの道筋が、いまやピクセルに供給されているのです。2

計測する:パフォーマンスツール

GPU上でMLを動かすということは、レンダリングが必要とするのと同じサイクル、帯域、サーマル予算を奪い合うことを意味するので、計測はもはや任意ではありません。セッション388は長時間のゲームセッションを扱いますが、そのツールはMLを含むあらゆるMetalワークロードに当てはまります。なぜなら、ニューラルトーンマッピングのパス中のフレームレート低下は、アプリが何をしていたか見えるようになるまで、ほかのあらゆるGPUストールとまったく同じに見えるからです。3

Watch on Apple Developer ↗

AppleのRuiweiが、システムが常にバックグラウンドでMetalのパフォーマンスメトリクスを記録している様子について語ります。これにより数時間さかのぼり、セッション終了後にトレースを収集できます(WWDC26、セッション388)。

iOSおよびmacOS 27での目玉となる変更はこれです。システムは常にバックグラウンドでMetalのパフォーマンスとリソースのメトリクスを記録し、集計データと任意のフレーム単位データ(CPU、GPU、FPS、メモリ)を数日分保持します。3 収集は事後に行います。macOSでは metalperftrace collect --last 5h が直近5時間のトレースを引き出し、iOSでは一度きりのセットアップでControl CenterにPerformance Traceボタンが追加され、要求に応じてルックバックトレースを処理します。3 分析は metalperftrace overview で行い、--json は回帰スクリプトに供給したりAIエージェントにトリアージを任せたりできる構造化出力を吐きます。Instrumentsはすべてをタイムライン上にプロットし、外れた統計値を色で示します。3

生のFPSグラフを実行可能なものにする要が StateReporting API で、SwiftとObjective-Cで利用できます。3 ドメインを定義します。それぞれが機能の独立した1領域に対応する有限状態機械で、遷移をラベルと、任意の安定したメタデータおよび状態ごとの揮発性メタデータとともに報告します。3 ML負荷の高いアプリでは、どのニューラルパスがアクティブかを追跡するドメインを動かせるので、フレーム時間が急増したときに metalperftrace に特定の状態ラベルのFPSを集計させ、たとえばトーンマッピングのパスがコストだと直接見て取れます。3 Appleの注意点はこうです。遷移はユーザー操作と同等かそれより遅い頻度に保つこと。高頻度の報告はシステムがスロットルし、データを失うからです。3 出荷後は、iOSおよびmacOS 27のMetricKitが、StateReportingの状態ごとに分解されたMetalのフレームレート情報を公開し、デバイスから日次レポートとして配信します。3

MLX:高レベルの道は残る

すべてのML開発者がGPUカーネルを書きたいわけではなく、Appleは全員をそこへ追いやりはしませんでした。MLX SwiftはApple silicon上の数値・配列計算のための表現力豊かな層であり続け、セッション328は可能なときにそこにとどまることへの明快な論拠です。4

Watch on Apple Developer ↗

AppleのDavid Koskiが、MLX SwiftがAccelerate、BNNS、Metal Performance Shaders、Swift Numericsのどこに位置づくかを語ります(WWDC26、セッション328)。

MLXはNumPyのようにn次元配列を中心的な抽象として用いるので、ほとんどのNumPyコードは最小限の変更で移植でき、コードは実装しようとしている数式のように読めます。4 フレームワークを支える性質が2つあります。1つは遅延評価で、演算は計算グラフを構築し、eval を呼ぶか値を読んだときにのみ実行されます。もう1つは遅延評価が可能にする関数変換で、自動微分のための grad を含みます。4 デフォルトではGPUが処理を実行し、Appleの言い分では、アルゴリズム次第でスカラーなCPUループに対して10倍は確かに可能だとしています。4 セッション328は3つの例で論証します。複素数のグリッド全体にわたる2行のループとしてのマンデルブロ集合、単一の conv2d 呼び出しがグリッド全体にJacobiステンシルを適用する熱分布ソルバー、そして grad が手書きの導関数なしに厳密な勾配を導出する曲線フィッティングです。4 MLXはそれ以外にもフルなツールキットを出荷しており、MITライセンスのオープンソースで、Swift、Python、C++、Cのフロントエンドが同じ概念を共有するので、Pythonでプロトタイプし、Swiftで出荷できます。4

Core AI、Core ML、MLXとの関係

4つのセッションは、異なる高度にある1つのスタックを描いており、正しいメンタルモデルは梯子です。

  • Core AICore ML はデプロイ層です。学習済みモデルを変換して実行し、高速化はAppleが担います。Core AIのカスタムMetalカーネルへの対応がその橋渡しです。セッション330のFlashAttentionカーネルはCore AIモデルに差し込めるので、Metalレベルの最適化が書き直しなしに高レベルのデプロイへと届きます。1
  • MLX は配列計算と研究の層で、数式のかたちのSwiftを書けば自動微分とGPU実行が無償で手に入り、自分のモデルを実行したりファインチューニングしたりできます。ほとんどのML作業が出発点とすべき層です。4
  • Metal Performance ShadersとTensorOps はカーネル層です。カスタム演算が必要なとき、MLX自体のようなフレームワークを構築しているとき、あるいはネットワークをシェーダー内でインラインに動かさなければならないときに、ここへ降ります。カーネル層はneural acceleratorを最も直接的に露出させます。1

ハードウェアの土台がそれらを結びつけます。neural acceleratorはGPUシェーダーコアの中にあり、MetalこそがそのGPUに到達する手段なので、上のあらゆる層は最終的に、Appleのユニファイドメモリの、タイルベースアーキテクチャの上で同じシリコンに乗ります。層を選ぶことは、MLXか Foundation Models かの判断と同じ判断です。1段降りるごとに利便性と制御を引き換えにするので、上の層が与えてくれない能力に名前を付けられるときにだけ降りるのです。

FAQ

M5 neural acceleratorとは何ですか?

neural acceleratorはM5チップファミリーの新しいハードウェアブロックで、各GPUシェーダーコアの内部に、ほかのGPUパイプラインと並んで直接置かれています。1 AppleはこれをLLMのprefillステージのような密で計算律速な処理を高速化するために設計し、TensorOpsライブラリは存在すれば自動的にこれを使います。1 Appleはニューラルレンダリングのセッションでも、A19 Pro GPU上のneural acceleratorに言及しています。2

Metalテンソルはどの量子化データ型をサポートしますか?

macOSおよびiOS 26のアップデートで4ビットと8ビットの整数型が追加されました。1 macOSおよびiOS 27では、TensorOpsが対応を4ビットと8ビットの浮動小数点型と2ビット整数型へ、さらにテンソルのスケールプレーンに載るFP8のE8M0ブロック単位スケールファクターへと広げます。1 Appleは、これらの小さな型には追加のアラインメント要件があるので、採用する前にMetalのドキュメントを参照するよう注意しています。1

Metal 4におけるニューラルレンダリングの3つのレベルとは何ですか?

MetalFXが最も高いレベルで、すぐに使えるブラックボックスのニューラルデノイザーとアップスケーラーです。2 Metal 4 MLコマンドエンコーダーは中間レベルで、MTLPackage にエクスポートした学習済みモデルをコマンドバッファ内に直接実行します。2 TensorOpsは最も深いレベルで、シェーダー内に小さなネットワークを組めるようにし、フレームごとにモデルを適応させるオンライン学習も含みます。2

Metalカーネルを書く代わりにMLXを使うべきなのはいつですか?

目的が表現力豊かな数値・配列コードで良好なパフォーマンスを得ることであり、コードが数式のように読めるべきで、自動微分とデフォルトでのGPU実行を求めるときは、MLX Swiftを使いましょう。4 MLXやCore AIが提供しないカスタム演算が必要なとき、MLフレームワークに貢献しているとき、あるいはネットワークをシェーダー内でインラインに動かさなければならないときは、TensorOpsとMetalカーネルへ降りましょう。1

2026年にGPU上のMLパフォーマンスをどう計測すればよいですか?

iOSおよびmacOS 27ではシステムが常にバックグラウンドでMetalのパフォーマンスメトリクスを記録しているので、事後にルックバックトレースを収集します。macOSでは metalperftrace collect --last <duration>、iOSではControl CenterのPerformance Traceボタンを使います。3 分析は metalperftrace overview(スクリプト用には --json)かInstrumentsで行い、StateReporting APIを加えてアプリが何をしていたかをラベル付けすれば、遅延を特定のパスに帰属させられます。3


Apple Ecosystemクラスターは続きます。配列フレームワークの道ならMLX on Apple Silicon、そのすべての土台となるGPU基盤ならApple Silicon TBDR、オンデバイスでのモデル実行ならCore AI、より広いMLスタックならCore ML on-device inferenceをご覧ください。シリーズのハブはApple Ecosystem Seriesで、この土台の上にエージェント機能を構築するならiOS Agent Development guideを参照してください。

References


  1. 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_simdgroup scope, reduce_rows, map_iterator, get_left_input_cooperative_tensor, is_compatible_as_left/right_input, op.run); and the SAM 3 / Core AI integration via TorchMetalKernel. Apple directs developers to the Metal Performance Primitives documentation and programming guide for the full API reference. 

  2. 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. 

  3. 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 metalperftrace command-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. 

  4. 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 eval or value read; grad for automatic differentiation; GPU execution by default with up to 10x over scalar CPU code; the Mandelbrot, heat-distribution (Jacobi and SOR via conv2d), 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

関連記事

Apple Silicon TBDR:アプリ開発者が実際に得られるもの

Apple silicon GPUはタイルベース遅延レンダリングを採用しています。Metalアプリ設計を変えるimageblock、タイルシェーダー、ラスタオーダーグループ、A11以降の拡張機能について解説します。

1 分で読める

Metal 4の要点:新しいコアAPIが実際に変えるもの

Metal 4はiOS 26でMetalと並行してMTL4プレフィックス付きの型を提供します。マルチスレッドのコマンドエンコーディング、統合されたcompute、そしてMLが第一級のGPUパスとして扱われます。

1 分で読める

AIシステムの構築:RAGからエージェントへ

3,500行のエージェントシステムを86のフックとコンセンサス検証で構築しました。RAG、ファインチューニング、エージェントオーケストレーションについて学んだことを共有します。

2 分で読める