1758488361
2025-09-21 20:35:00
Mojoの最新の毎晩のリリース(および次の安定したリリース)には、新しいアクセラレータアーキテクチャの初期サポート:Apple Silicon GPUが含まれています!
プログラミングGPUの最大の障壁の1つは、ハードウェアへのアクセスであることを知っています。すべての最新のMacに存在するGPUのためにMojoを使用して開発できるようにすることで、GPUアクセラ化されたアルゴリズムとAIモデルの開発をさらに民主化できることを願っています。また、これにより、AIモデルなどのローカルからクラウド開発の新しいパスが可能になります。
開始するには、Apple Silicon Mac(すべてのM1 -M4シリーズチップをサポートしている)を使用する必要があります。Xcode 16以降がインストールされているMacOS 15以下のMacOS 15以下を実行します。使用する金属シェーディング言語のバージョン(3.2、Air Bitcodeバージョン2.7.0)には、MacOS 15 SDKが必要です。古いMacOで実行するか、Macos 15 SDKを持たないXcodeの古いバージョンを使用すると、互換性のないビットコードバージョンに関するエラーが発生します。
あなたは私たちをクローンすることができます modular リポジトリとGPU関数の例の1つをで試してみてください examples/mojo/gpu-functions ディレクトリ。除くすべて reduction.mojo 例の例は、最新のナイトリーで今日Apple Silicon GPUで動作するはずです。さらに、パズル1〜15のパズル Mojo GPUパズル これで、最新の毎晩のAppleシリコンGPUで作業する必要があります。 GPUパズルのPIXI環境をまだ更新していないため、Apple Silicon Supportを追加するため、今のところMojoコードを別の環境から手動で実行する必要があります。
これは、Apple Silicon GPUのサポートの始まりに過ぎず、多くの機能を構築する必要があります。今日機能しない既知の機能は次のとおりです。
- 多くのハードウェア機能の内因性
- すべてのMojo GPUの例が機能するわけではありません
reduction.mojoより複雑なマトリックスの乗算の例 - GPUパズル16以降は、より高度なハードウェア機能が必要です
- すべてのMojo GPUの例が機能するわけではありません
- 基本的な最大グラフ
- Max Custom Ops
- Pytorchの相互運用性
- AIモデルの実行
- AIモデルの提供
単純な最大グラフでさえ、さらにはAIモデルでさえ、Apple Silicon GPUでまだ実行されていないことを強調します。私たちのPython APIで、 accelerator_count() 基本的な最大グラフサポートが有効になるまで0を返します。うまくいけば、それは長くないでしょう。
上記を徐々に有効にするために、多くの技術ブロッカーを特定しました。取り組む予定の現在のリストは次のとおりです。
- ハンドル
MAX_THREADS_PER_BLOCK_METADATAおよび同様のエイリアス - サポート
GridDim、lane_id - 有効にする
async_copy_* - 配列タイプの引数をポインタータイプに変換する
- サポート
bfloat16アームデバイス - サポート
SubBuffer - 原子運転を有効にします
- の完全な実装
MetalDeviceContext::synchronize - キャプチャされた引数を有効にします
- サポート
printそしてdebug_assert
不足している機能の一部にヒットしたとき、またはまだ互換性がないシステム構成に遭遇したときに得られる可能性のある不可解なエラーメッセージのいくつかをお詫び申し上げます。時間の経過とともにメッセージングを改善し、障害をデバッグするためのより良いガイドを提供したいと考えています。
Mojo CodeがどのようにコンパイルされてAppleシリコンGPUをターゲットにするかについての詳細については、チェックしてください 最近のモジュールコミュニティミーティングからのアミールナセルディーンの詳細な技術プレゼンテーション。彼は夏のインターンシップ中にファンダメンタルズを確立するために驚くべき仕事をしました。私たちは今、この新しいアーキテクチャでモジョを前進させるためにそれに基づいています。
簡単に言えば、Moljo Codeをコンパイルおよび実行するためにマルチステッププロセスを使用しています。まず、Mojo GPU機能をApple中級表現(AIR)ビットコードにコンパイルします。これは、LLVM IRに下げられ、特に金属互換の空気に変換することで行われます。
Mojoは、アクセラレータとの相互作用を介して処理します DeviceContext タイプ。 AppleシリコンGPUの場合、これを専門としていますMetalDeviceContext これにより、コンピレーションと実行の次の段階が処理されます。
MetalDeviceContext 使用します Metal-CPPAPI 空気表現をaにコンパイルするには .metallib デバイスでの実行用。一度 .metallib 準備ができています、 MetalDeviceContext 金属を管理します CommandQueue、および移動データの動作、GPU関数の実行などをバッファリングします。これはすべて舞台裏で起こり、Mojoの開発者はそれについて心配する必要はありません。
NVIDIAまたはAMD GPUで実行するために書いたコードは、デバイス固有の機能が使用されていないと仮定して、Apple Silicon GPUでほとんど動作する必要があります。明らかに、各GPUの中で最もパフォーマンスを発揮するために異なるパターンが必要になり、Apple Silicon GPUのこの新しい最適化スペースを探索することに興奮しています。
Apple Silicon GPUサポートを育てるのを手伝ってくれるのは、新しいAir Intrinsicsのサポートを導入し、それらをコンパイルするためのインフラストラクチャの一部です。 .metallib 現在、実装にはモジュラー開発者が必要です。作業が主にオープンソースの標準ライブラリとカーネルに移動する前に、より多くの基本を導入します。その時点で、コミュニティのメンバーは互換性を進めるためにもっと多くのことができるでしょう。貢献はいつでも歓迎されますが、不在以外のコンポーネントを攻撃して、前進することができないことでイライラすることを望んでいません。
この新しいハードウェアファミリとの連携と最適化の方法について、より多くのドキュメントとコンテンツを共有しますが、AppleシリコンGPUのこれらの最初のいくつかのステップでさえ非常に興奮しています。機能を拡大する際に、この投稿を最新の状態に保つようにします。
#Mojo #GPUプログラミングのApple #Silicon #GPUサポート