- MLXは、Apple Siliconベースの機械学習研究者向け配列フレームワークで、NumPyやPyTorchに近い使い勝手を提供
- MLXにCUDAバックエンドを追加する作業が進行中
- 主な目的は、ユニファイドメモリ(unified memory)のサポートとNVIDIAハードウェアの幅広い活用
- 現時点ではチュートリアルのサンプルのみ動作可能で、ビルドとテストはUbuntu 22.04 + CUDA 11.6環境で確認済み
- 初期の性能問題やボトルネックの改善を進めながら、最適化とリファクタリングが繰り返し行われている
- MLXのCUDAバックエンドはAppleの支援を受けて進められており、ユニファイドメモリとNVIDIAハードウェア対応を通じて、Macで開発し大規模な計算環境へデプロイする際に一貫した体験を提供することが目標
MLXフレームワーク紹介
- MLXは、Appleの機械学習研究チームが開発した機械学習向け配列フレームワーク
- エンジニアや研究者が効果的に実験し、素早くアイデアを検証できるよう開発された
- Apple Silicon対応が特徴だが、今後はCUDAバックエンドの追加によりNVIDIA GPU環境でも動作可能性を広げようとしている
主な特徴
- 親しみやすいAPI: Python APIはNumPyに、上位パッケージの
mlx.nn、mlx.optimizersはPyTorchに近いインターフェースを提供
- C++、C、Swift APIも用意されており、Python APIと一貫した使い勝手を保証
- 合成可能な関数変換: 自動微分、自動ベクトル化、計算グラフ最適化などの機能を含む
- 遅延評価: 複数の演算をまとめ、実際に必要になったときだけ結果を計算する構造で、効率的なリソース活用が可能
- 動的グラフ生成: 入力データのshapeが変わっても遅いコンパイルなしで即時実行でき、開発やデバッグがしやすい
- マルチデバイスとユニファイドメモリモデル:
- 従来はCPUとApple GPUのみ対応していたが、CUDAバックエンドによりNVIDIA GPU環境への対応を進めている
- ユニファイドメモリ構造の採用により、メモリコピーなしで、対応するすべてのデバイスで同じオブジェクトを演算可能
- 簡潔で拡張可能な設計: 研究者がフレームワークを容易に拡張・改善できる
他フレームワークとの違いと着想
- NumPy、PyTorch、Jax、ArrayFireなどから設計上の着想を得ている
- 特にユニファイドメモリモデル、簡潔なインターフェース、即時実行/デバッグ環境を重視している
代表的な例と活用分野
- MLX Examplesレポジトリには多様な実践コードがある
- Transformer言語モデルの学習
- LLaMAベースの大規模テキスト生成とLoRAを用いたファインチューニング
- Stable Diffusionによる画像生成
- OpenAI Whisperベースの音声認識など、最新モデルの実装事例を含む
MLXの意義とCUDA対応
- Apple Silicon中心のフレームワークだったMLXは、CUDAバックエンド導入によりNVIDIA GPU環境でも汎用的に活用できる可能性を広げている
- 最新のCUDA対応により、AppleとNVIDIAの両ハードウェア上で、最新の研究および産業利用の双方に適したフレームワークとして位置づけられる見込み
3件のコメント
macOSでNVIDIA GPUだけ使えるようにしてくれればいいのに……はは。
いい話ですね(笑)。早くCUDAに対応して、Macでも高速学習ができるようになってほしいです〜!
Hacker Newsの意見
インストール案内
zcbenz紹介
リポジトリのreadmeのbulletを参照: MLX GitHub
これをすべてのUMA APU(メーカーを問わず)へ拡張できると面白そうだと思うが、ディスクリートGPUでは方式を変える必要があるのではないかという疑問がある
PRコメントを読むと、CUDAもUMA APIを直接サポートし、必要な場合は透過的にコピーを処理しているようだ
Appleが裏で支援しつつ、公式には表に出していないのだろうかと気になる。チームが移籍するといううわさもあった
つまり、MLXコードがx86 + GeForceハードウェア上でビルドおよび実行可能になるという意味で、その逆ではない
実際に試してみたところ、PyPIにはPython 3.12版しか上がっていない
MLX-CUDAのPyPIページ
最近は、DGX SparkがStrix Haloと比べてコストパフォーマンスで劣るというYouTuberのレビューも出ている。欠点はROCmがまだ弱いこと(近いうちに良くなりそう)。もしAppleデバイスでCUDAが完全に動くなら、Strixがどれだけ安くて優れていても真剣に悩む選択肢になる