AppleのMLXにCUDAサポート追加!
引用元:https://news.ycombinator.com/item?id=44565668
確認させてね。これってつまり、
1. MLX用に作られたプログラムはCUDA対応チップを活用できるけど、
2. CUDAプログラムはApple Siliconでは動かないってこと?
2はNVIDIAの「堀」に関する著作権侵害になるからだよね。これ合ってる?
いや、そうじゃないよ。2(CUDAプログラムがApple Siliconで動くこと)は、かなり難易度が高いからだよ。
既存のCUDAコードをNVIDIA以外のハードウェアで動かすことには、莫大な(何十億もの)金銭的なインセンティブがあるよね。簡単じゃないのは分かるけど、実装の難しさが本当に足かせになってるの?
それは1のことだよ。開発者が比較的低電力なAppleデバイス(UMA搭載)を使って、NVIDIAの比較的ハイスペックなシステムにデプロイするために開発できるってことさ。
いろんな意味でこれは良い点だね。
2は著作権侵害じゃないよ。APIは再実装できるからね。
CUDAはAPIじゃなくて、NVIDIAが書いたライブラリのセットだよ。それらのライブラリを再実装する必要があるし、みんなに価値があると思わせるにはそのライブラリの最適化まで再実装しないといけない。それは色々なIP問題に関わってくるんだ。
既存の高性能CUDAコードはほとんどがNVIDIA製のファーストパーティライブラリで、奇妙な内部フラグやインラインPTXを使ってるんだ。コンパイラ開発者の小さなチームがいれば9割はいける。でも残りの1割は、何百人もの人が10年かけても難しいだろうね。
このコストは、君が言ってた何十億もの金銭的インセンティブと怪しいくらい近いじゃん。効率的な市場って面白いね。
「”比較的ハイスペック”」?
他にこれより速いものなんてないでしょ。
「”効率的な市場って面白いね”」
生産チェーンの様々な段階に複数のほぼ独占状態の企業がいて、莫大な統合と無限の国家支出がある中で、本当に効率的な市場なんて言えるのかな?
CUDAってAPIやライブラリだけじゃないんだよ。C/C++/Fortran/Pythonのコンパイラとか、各種ライブラリ、IDE連携、デバッガ、プロファイラまで含む一大エコシステムなんだ。だから一部だけ真似しても意味ないんだよね。
結局、重要なのはランタイムだけだよ。コンパイラ以外の開発ツールなんて誰も気にしないって。みんな、競合するハードウェアで再コンパイルして動かしたいだけなのに、なんでこんなに難しいのか理解できないわ。
CUDAってNVIDIAのハードウェアとかアーキテクチャにめっちゃ密着してるの?だから他のプラットフォームだと、抽象化しても全然意味ない感じなのかな?ハードウェアとか詳しい人教えてほしいな、ありがとう。
うん、そうだよ。AMDを見てごらん。
最適化されてなくても、CUDAの代替が出てくるのは嬉しいね。あと、APIとライブラリの違いってなんだろう?ライブラリからAPIを公開できるんじゃないの?ちょっと混乱するな。
Appleが著作権でCUDAを実装できないなら、LMX(MacBook向け)に開発者を呼んでNVIDIAハードウェアをサポートさせるのが次善の策だよね。AppleはAMDにも同じことすべきだよ。
AMDは今までCUDA APIを実装したことないんだよね。しかも技術的な理由じゃないんだから。
AppleはMetalと自社プロセッサをNVIDIAより速くするために、どうすればいいんだろうね?結局、インターコネクトが全てなんだろうな。
自由市場と独占って矛盾しないよね。でも、独占企業がその地位を使って別の独占を狙うのは問題で、政府が最終的に規制するんだ。国の役に立つものを壊したくないから、時間はかかるけどね。
「APIをライブラリから公開できるんじゃないの?」って質問あったけど、それやっちゃうと著作権侵害になるんだよ。
そう、できるはずだよ。CUDAには昔Appleが支援してた競合のOpenCLがあったんだからね。
GoogleとOracleの訴訟での米最高裁判所の判決とJavaの再実装が、CUDA APIのようなものを企業が再実装するのに十分な判例になったと思ってたんだけどな?
https://www.theverge.com/2021/4/5/22367851/google-oracle-sum…
https://en.wikipedia.org/wiki/Google_LLC_v._Oracle_America,_….
彼らはやったよ、というか誰かに金払ってやらせたんだ。
https://www.techpowerup.com/319016/amd-develops-rocm-based-s…
コメント42172はあまり正確じゃないと思うな - AMDのHIPはOpenCLを2017年か2018年ごろに諦めて以来、まさにこれと同じことをしてるんだから。
>>効率的な市場と言えるのか?
>>はい、自由市場と独占は両立します。どうして”効率的な市場”から”自由市場”に話が飛んだんだ?前者は本質的に価値があるものだけど、後者はそうじゃないだろ。もしその自由が、「もちろんビジネスを始められるよ、自由な国だからね。でも間違いなく失敗するけどね、市場に既得権益の独占企業がいるから。」ってなるならな。それに、独占企業は他の市場参加者から過剰な価値を搾取してるんだ、例えばAppleのAppStoreの手数料みたいに。それを”効率的”って認めるのは、市場に関して言えば本当に変な使い方だよ。
その通り!AMDのGPU用のCUDA再実装であるROCM/HIPも見てみてくれよ。
これってワットあたりでも本当なのかな?
著作権侵害じゃなくてIP侵害だよ。CUDAのClean-room designは著作権の主張を回避できるけど、特許侵害は必ずしも回避できないんだ。
https://en.wikipedia.org/wiki/Clean-room_design
“Clean-room designは独立した創作に基づくため、著作権侵害に対する防御として有用だ。しかし、独立した発明は特許に対する防御にならないため、Clean-room designは通常、特許制限を回避するために使えない。”
今のところ、LLMにとってApple Siliconの唯一のボトルネックはメモリ帯域幅なんだ。初代M1 Ultraからここに進展がないし、UltraFusionも捨てたから、当分ここには進展なさそうだよ。
コメント42173が言うように、NVIDIA GPUをApple Siliconに繋いでCUDAを動かせるようになってほしいな。Apple SiliconとユニファイドメモリとGPUとCUDAをPyTorch、JAX、TensorFlowで利用したいんだ。MLXはまだ詳しく見てないから、なんとも言えないけど。
Appleが将来、MLXをサポートするデータセンター向けGPUをCUDAなしでリリースできたら最高だね。開発者がこの道を選んでくれたら、Appleにとってすごく良いことになるよ。
もっとコメントを表示(1)
この手の議論だと、AndroidとJavaの有名な戦いが一番の例だろうね。
「え、AppleプラットフォームにはCUDAサポートないじゃん!」って思うかもだけど、このパッチはLinuxプラットフォームのCUDA 12とSM 7.0以降もサポートするんだよ。詳しくはこちら: https://ml-explore.github.io/mlx/build/html/install.html
これってElectronとか作ったzcbenzさんからのものなんだね。すごい! https://zcbenz.com/
MLXの主要機能の1つである統合メモリアーキテクチャ(UMA)ってどうなるの?(リポジトリのREADME見てよ: https://github.com/ml-explore/mlx)どんなベンダーのUMA APUでも使えるようになったら面白いけど、個別のGPUは別のアプローチが必要なんじゃないかと思ったよ。
追記: PRコメントを読んだら、CUDAがUMA APIを直接サポートして、必要な時に透過的にコピーするらしいね。
あー、分かるよ。俺の経験だとプリフェッチが足りなくて、メモリコピー待ちでパフォーマンスがガタ落ちしちゃったんだ。データセットがVRAMに全部収まるならいいけど、俺のMLトレーニングアプリでは性能が死んだから、ストリーミングロードに移行する時間すらできたよ。
これってNVIDIAカードを積んだMac向けなの?それともApple MetalとかApple SiliconがCUDAを使うってこと?よく分からないな。
編集: どうやら「一度書けばどこでも使える」みたいだね。MLXで書けば、Linux CUDAでもApple Silicon/Metalでも動くってことか。
もう答え見つけたみたいだね。
Appleはもうずいぶん長い間NVIDIAカードを出荷してないんだよ。Apple Silicon以前のMac Proでさえ、AMDカードしか売ってなかったし。
噂だと、デュアルGPU MacBook Proのトラブルとドライバーの品質で決裂したって聞いてるよ。PCIバスにNVIDIAカードを挿したらAIに使えるかどうかは、俺も分からないけどね。
そのMBPモデルはGPUが熱くなりすぎて故障率が高かったんだよ。
スティーブ・ジョブズとジェンセン・フアンの会話はこんな感じだったんじゃないかなって想像しちゃうね:
S: お前のGPUはクソだ
J: お前の熱設計がクソだ
S: くそったれ
J: お前もな
Appleって、マジで根に持つタイプだし、サプライヤーとの関係も一方的だもんね。「俺たちのやり方か、さもなきゃ出て行け」って感じ。
MBPが熱くなりすぎたってわけじゃなくて、NVIDIA GPUに使われてたアンダーフィル材が、GPUとして普通くらいの温度(60~80度)で構造的なサポートをしなくなっちゃったんだよ。
Dell、HP、SonyのノートPCとか、一部のデスクトップ、それに初期のPS3でも同じGPU故障が起きてるんだ。
詳しくはこちらを読んでみて: https://www.badcaps.net/forum/troubleshooting-hardware-devic…
故障したのはAMD製、特に古い17インチMacBook Proだったと思うな。
あれはNvidiaの製造欠陥が原因の故障だったんだ。俺の2008年製15インチNvidia 8600搭載MBPは保証外なのにこの件で無料で直してもらったぜ。2007年後半から2010年のMacBook ProはNvidia GPUを使ってたんだよ、AMDじゃない。詳しくは“nvidia 8600 fail”で検索してみな。
俺、2010年あたりの15インチMBP持ってたんだけど、NvidiaのデュアルGPUがマジで問題だったんだよね。
ゴミ箱型Mac ProのD700sが壊れて、俺たちマジで時間も金もかなり無駄にしたんだぜ。
動かねーよ。ドライバのサポートないし。
Apple Siliconでは、PCIe/Thunderboltデバイスのメモリに書き込むと例外が出るんだ。ARMの仕様はメモリみたいにデバイスに書き込みを許可してるんだけど、Appleは外部デバイスへの書き込みを全部デバイスメモリマッピング経由に強制してるんだよね[0]。だからApple Siliconで外部GPUを使うのは超めんどくさい、無理に近いかも。Asahi使ってもApple Silicon用のeGPUドライバ作れた奴は俺が知る限りいないな。[0] https://developer.arm.com/documentation/102376/0200/Device-m… [1] Raspberry Pi 4のPCIeも同じ問題抱えてると思うよ。
うわぁ、それってアウトオブオーダーCPUの性能を台無しにするじゃん。ARMv7みたいだとすると、同じページへのアクセスごとに、まるで独自の順序付けバリアになるってことだな。
デバイスメモリへの書き込みはエラーにならないんだね。
「一度書けばどこでも使える」ってことなら、俺のMLXの処理もすぐクラウドにオフロードできるようになるのかな!?
CUDAをMLXで動かすには、これしかないと俺は思うよ。
その通りだね。ローカルモデルはAppleのプライベートクラウドで高速化されるだろう。
いや、これはNVIDIAのグラボを積んだLinux PC向けの話だよ。
「Macでコード書いてテストして、スパコンにデプロイできるのは開発者にとって良い体験になる」ってあるけど、これでMLXはLinuxでも使えるようになったってこと?
追記:試したら動いたよ。ただ、PyPIには今のところPython 3.12版しか見当たらないね: https://pypi.org/project/mlx-cuda/#files
「このプルリクはMLXにCUDAバックエンドを追加する進行中の取り組みだ」ってことは、MLXのコードをx86+GeForceのハードウェアで動かせるようになるってことだね。逆じゃないよ。
余談だけど、MLX開発に携わってる人たちって、表面的に見る限りAppleとは公式に繋がってないみたいだね。例えばこの人とか: https://x.com/prince_canuma
Appleがお金出してるけど、DLで抑えときたいのかな?チームがどこかに移ろうとしてるって噂もあったしね?
MLXで名声や評判を築きたいオープンソース開発者って感じかな?
ほとんどの作業はClaude Sonnetがやってるんじゃないかな。
2025年になっても、「一度書けばどこでも動く」というJavaのようなCUDAの影響力ってまだないよね。アカデミアや企業は相変わらず独自コードを書き続けてるし。まるで2025年にAdobe FlashやMicrosoft Silverlight向けにコードを書き続けてるみたいだよ。正直、NVIDIA株主としては気にしないけどね。
AppleがOpenCLを放置したのは許せないわ。CUDAに対抗できる企業資金付きの「一度書けばどこでも動く」競合が育ちそうだったのに、需要が出た途端に手を引いたんだ。将来を見据えながら何もしなかったのはマジで意味不明。
昔Flashが使われまくったのは、他の選択肢が酷かったからだよね。モバイルで性能とバッテリー問題が顕在化して、AppleがiPhoneでFlashをバッサリ切ったのがターニングポイントだった。そのおかげで皆FlashかiPhoneエコシステムか選ぶ羽目になった。CUDAにはこういう事例ないよな、マジで。
AppleはKhronosともう一度話すべきだよ。NVIDIAを倒す議論はいつも「協力不足」に帰着する。昔はAppleもAMDもNVIDIAもOpenCLで協力してたのに、AppleがiPhone GPUやApple SiliconでOpenCLを拒否してNVIDIAを勝たせた。Appleはまだ上から目線で、AMD、Intel、Qualcommは協力が必要って分かってるのにね。
KhronosってAPIが死ぬとこじゃん、新しいアイデアも滞るし。
OpenCL 2は複雑すぎて誰も使わなくなったし、NVIDIAもそっぽ向いた。KhronosはMantle/Metalの初期開発を拒否して、結局遅れて複雑なVulkan出したよね。
君がAppleだけを責めるけど、NVIDIAもOpenCL2をサポートしなかったし、Khronosの協力がうまくいかなかった原因の一つだよ。
もっとコメントを表示(2)
NVIDIAは独自の技術持ってたから、唯一OpenCL2を拒否できたんだ。もしCUDAキラーがNVIDIAの協力頼みなら、最初から無理ゲーだよ。
AppleがKhronosの代わりになれるなら今がチャンスだけど、無理ならNVIDIAがずっとトップだろうね。
「AMDとAppleがMantle/Metal推してた」って言うけど、なんで今AMDがMetal IPを乞わないか、その999 IQの理由を教えてくれよ。
CUDAを倒せるものを開発しなかったIntelとAMD、それからモバイルでOpenCLを完全に無視してRenderscriptを推したGoogleを責めたいね。他の意見には大体賛成だよ。
うん、まさにその通りだね。IntelもAMDも何度もCUDAを追撃するのに失敗してるのは残念だよ。ATIはGPU Computeの先駆者だったのにさ。
Googleもいつもの「誰かの情熱プロジェクトが報われなくなると死んでいく」って道を辿っちゃったな。
「VulkanもOpenCLと同じくらい複雑で普及が遅れた」って意見、他は同意だけど、VulkanとOpenCL両方使った者としては、複雑さは全然比べ物にならないよ。VulkanはOpenCLよりずっと使いにくくてマジ時間の無駄って感じ。OpenCLはまだマシだけど、CUDAやMetalには遠く及ばないね。
ああ、もちろんそうだよ。ごめん、同じレベルの複雑さって言いたかったんじゃないんだ。
それぞれ代替品よりかなり複雑だって言いたかっただけだよ。
結局Javaも「一度書けばどこでも動く」なんて実現できてないよね。
iOSやPlayStation向けにJavaでアプリ開発する手段はあるんだろうけど、必要な手間を考えると気が遠くなるわ。
今、Javaのコードをミッドレンジシステムからクラウドのコンテナに移行してるんだけど、必要なコード変更はほぼゼロなんだ。完璧な移植性じゃないかもしれないけど、他のプラットフォームに比べたらすごく優秀だよ。あとは業界がJava 8/11のバカげた習慣から抜け出してくれれば、もっと良くなるんだけどね。
「一度書けば、どこでも動く」って言うけど、君が言いたいのは「一度書けば、どこでもテストする」ってことだろ?
これってStrix Haloのおかげかな?最近EVO-X2を手に入れたんだけど、マジで驚いたよ。ミッドレンジのznver5 EPYCマシンと余裕で戦えるし、普通のEC2やGCEインスタンスを圧倒するね。それらが月3~10Kもするのに、これは1800ドルだった。まだLLM推論は試してないけど、一部YouTuberはDGX SparkがStrix Haloに比べてオーバースペック/高すぎると言い始めてる。ROCmはまだだけど、Appleデバイスで完璧なCUDAが動けば、Strix Haloが安くて良いのにすごく魅力的になるだろうね。
知らない人のために言うと、Strix HaloはAMD Ryzen AI Max+ 395と同じで、Framework Desktopとか一部のミニPCにも搭載されるよ。メモリ帯域幅は200GB/sで、他の消費者向けx86プラットフォームに比べればすごいけど、Nvidia GPU(5090は1792GB/s)やAppleのM3 Ultra(800GB/s)には遠く及ばないね。コスパは良さそうだけど、LLMみたいにメモリ帯域幅が重要なアプリだと、ぎりぎり“十分”ってレベルだよ。
理論上の最大メモリ帯域幅だけ比較してるね。メモリ帯域幅が十分にある場合、普通は計算能力がボトルネックになるから、それだけ見てちゃダメだよ。例えばM1は十分な帯域幅があったのに、フルロード時でも使い切れてなかったんだ。
メモリ帯域幅がLLMのトークン/秒の上限を決めるんだよ。200GB/sじゃ、その上限は全然高くない。だから計算能力があるかどうかは、あまり関係ないんだよ。
M1 MaxのGPUは、広告されてる400GB/sの帯域幅のうち、約90GB/sしか使えてないんだ。もしAMDチップが200GB/sをより効率的に使えれば、君が言うようにLLMのトークン/秒は良くなるだろうね。単に広い/速いメモリバスだけを見てちゃダメだよ。
https://www.anandtech.com/show/17024/apple-m1-max-performanc…
これは主に、統一アーキテクチャでは気をつけなきゃいけないってことだね。表示されてる帯域幅が、GPUだけのワークロードで得られるものと違うってことだ。なるほど、わかったよ。でも俺の基本的な主張は変わらないね。LLM推論にはメモリ帯域幅が必要だし、200GB/sは全然十分じゃない(特に高容量RAMのモデルでは)。もしM1 Maxが実際90GB/sなら、LLM推論には向かないってことだね。
GPUは帯域幅と計算能力の両方を持ってるんだ。トークン生成中は計算能力は必要ない。でもAppleシリコンもStrix Haloも、計算能力不足のせいでプロンプトの取り込み時に性能が落ちるんだよ。
計算能力(しかも大量に)は、生成に絶対必要だよ。小さいモデル(7B)だけでも、1トークンあたり数百億FLOPsの計算がいるし、大きいモデルではそれに比例して増えるんだ。各トークンはすべてのTransformerレイヤーを順伝播する必要があるし、あらゆる段階で大規模な行列乗算、そして語彙への最終的な投影も含まれるんだ。
コンピューティング能力がゼロってわけじゃないけどさ、トークン生成って計算量じゃなくてメモリ帯域幅がボトルネックなんだよ。プロセッサはデータ待ちで暇してるし、ほとんどの時間はメモリからのデータ転送待ちに費やされてるんだよね。104Bモデルでもそうだった。
メモリ帯域幅がボトルネックになってるってことは、バッチ処理が効率的にできてないんじゃない?
そうなんだよ。Apple siliconとかHalo Strixみたいなケースだと、あんまりバッチ処理しないからね。
Appleってバカだよね。来年とかに良いもの出すために、今のハードウェアをわざと性能制限してるんだ。長年のやり方がAI戦略の邪魔してる。本当は1600GB/sもできたはずなのにさ。
Appleが技術を急がないのは、顧客が満足してるからじゃない?毎年顧客がハッピーなら、Appleはちゃんとやってるってことだよ。あなたが望む機能バランスじゃなくてもさ。Appleが失敗する時は、大抵はっきりしてて、意図的な優先順位のトレードオフの結果だよ。Mac Proみたいにね。
Appleはハードウェア垂直統合なのにAI戦略で完全に失敗してるよ。社内でもそれが問題だって知られてるし、2030年にすごいもの出すとかいう深謀遠慮じゃないからね。
B200だって出せたはずだよね。きっとそうしない理由があるんだろうけどさ。
これ読むの楽しかったな。EVO-X2を注文したけど、まだ発送待ち。LLMとかdiffusion modelを動かすのに良いリソースないかな?
どれだけ興奮してても、それだけ価値はあるよ。俺のも時間かかったけど、本当に良かった。しばらくこんなすごい製品は出ないだろうし、計算能力には何年も困らないと思うよ。
それはPRの説明で、明確にクラウドクラスターのトレーニングがターゲットって書いてあるよ。