CPU上でのLLaMAの高速化
- Mozillaのllamafileプロジェクトで、新たに84個の行列積カーネルを作成
- F16およびQ8_0重みをCPUで使う場合、llama.cppと比べてプロンプト評価時間が30%〜500%高速化
- ARMv8.2+(例: RPI 5)、Intel(例: Alderlake)、AVX512(例: Zen 4)環境で最も劇的な改善
- L2キャッシュに収まる行列では、MKLより2倍高速
- 1,000トークン未満のプロンプトで特に効果が高い
背景
- llamafileは、2023年11月にMozillaとともに始まったローカルLLMプロジェクト
- Cosmopolitan Libcを使って、llama.cppを単一ファイルのクロスプラットフォームバイナリとしてパッケージ化
- AMD64とARM64向けに6つのOSで動作し、若干の修正が加えられている
- 中核技術を改善することで、ユーザーに最高のllama.cpp体験を提供し、両プロジェクトがより広い層に届くのを支援できると考えている
- Mozillaはそのためのリソースを提供してきた
エンタープライズ向けハードウェアでの性能向上
- 最初にLLMへ関心を持った当時の作業環境は、回転ディスク、遅いRAM、AVX2プロセッサ、GPUなしでAlpineを動かす質素なHewlett Packardだった
- llama.cppの気に入っていた点は、自分のような人たちを真っ先に大事にしていたこと
- フルタイムでボランティア参加を始め、Slarenのような人たちと協力してmmap()対応を導入した。これにより、RAM使用量を半減しつつ重みを即座に読み込めるようになった
- 当時としてはローカルLLMにおける大きな飛躍だったが、評価速度の改善にはほとんど寄与しなかった
- 推論コードの大半はGeorgi Gerganov本人が書いたもので、あまりに優れていたため、改善できるようになるまで結局さらに1年かかった
- では、改善後に古いHewlett Packardでどれだけ速くなったのか見てみよう
ホビー向けハードウェアでの性能向上
- 大型コンピュータがなくても大規模言語モデルは動かせる
- 今日店頭で入手できる最高の個人向けコンピュータの1つがRaspberry Pi
- 低価格で優れた性能を提供し、消費電力も非常に小さい
- Raspberry Piは数日前に第5世代を発売し、前モデルより大幅に高速になった
- さらにARMv8.2のdotprodおよびfp16演算ISAへの対応も導入され、これはLLMに非常に有用
- この2つの機能だけでも、昨年llama.cppはf16重みに対して10倍の性能向上を実現できた
- 今週は、もともとAVX512向けに設計していたカーネルを使い、その上にさらに2倍の性能向上を積み上げた
- データセンター機器向けに設計したカーネルが小型軽量のRaspberry Piにうまく合うとは思っていなかったが、両CPUとも32本のベクタレジスタを備えているため、実際にはぴったりだった
ゲーミング向けハードウェアでの性能向上
- ゲーマーはコストパフォーマンスを重視する消費者の中でも特に高い品質期待を持っており、そのためゲーマー向けハードウェアはたいてい非常に優秀
- 機械学習業界は、ゲーマー向けハードウェアを流用することで長年発展してきた
- ゲーマーたちの重要な貢献がなければ、AIの冬はさらに10年続いていたはず
- 数か月前、古いHewlett Packardの代わりになるコンピュータを作ってほしいとゲーマーに頼んだ
- Alderlakeは優れたCPUだと思うが、float16性能を容易に5倍も引き上げられたことから、広く誤解されているように見える
- ARMv8.2と違って、x86カーネルは内部でfloat32演算型を使うため、丸め誤差を生じさせずにそれが可能だった
- これは、より賢いスパムフィルタを作れることを意味する
spam.shシェルスクリプトの実行時間はわずか420ミリ秒で、Raspberry Pi 5より7倍高速
- 小さなワークロードなら、CUDAが立ち上がる前にこのチップが処理を終えられる
- Alderlakeユーザーは、llamafileが効率コアで動かないよう特別に配慮していることを期待できる
- これもllamafileがllama.cppより高速に動作する理由の1つ
- その結果、LLMを24時間稼働させても、コンピュータ上の他のプログラムに十分なリソースを残せる
- llama.cppはスレッドをlockstepでディスパッチするため、ある1つのコアが他のコアより長く処理すると、他のすべてのn個のコアは完了までbusy loopを回す必要があった
- このマイクロプロセッサの最大の特徴は、Cosmopolitan monorepoの260万行のコードをどれだけ速くビルドできるかという点
- Hewlett Packardでは常に64秒かかっていたが、このゲーミングPCなら20秒で済む
- もともとは35秒だったが、液体金属とAIオーバークロックを適用してさらに速くなった
- Alderlakeでシステムコードが非常に速いもう1つの理由は、このCPUの設計過程でハッカーと科学者の間に激しい争いがあり、ハッカーが勝ったため
- 今後AVX512についてより良い妥協点が見つかることを望んでいるが、前世代に比べて大きな前進だと考えており、このチップには全体として非常に満足している
Appleハードウェアでの性能向上
- 最も高水準な個人用コンピュータといえば、間違いなくMac Studio
- ここで優位に立つのは、llama.cpp開発者が最も重視するハードウェアプラットフォームだからであり、私にとってはより難しかった。また、Stallmanのコンパイラを使う選択のため、Apple独自ツールの代わりにハンディキャップを抱えて作業している
- M2マイクロプロセッサがllamafileを合成コンテンツの給水管にすることに驚きはない
- Appleがここで使ったトリックは、垂直統合を活用すること
- Mac Studioを購入して中を見れば、RAM DIMMがCPUの中に入っていることに気づくだろう
- CPUがこうした長距離通信をする必要がなくなったため、トークン生成のようなレイテンシ依存の処理ははるかに速くなる
- ただし純粋なflopの観点では(プロンプトtok/secで計測)、M2 UltraのARM ISAが露出している計算性能は、私のもっと安価なIntelマシンより30%多い程度に過ぎない
- それ以上にアクセスするには、MetalやAccelerateのような独自フレームワークを経由する必要がある
- xcodeがインストールされていれば、llamafileはデフォルトで、あなたとシリコンの間にあるすべてのクローズドソースライブラリの前に立つための小さなスタブモジュールをコンパイルする
- Mac Studioの購入を検討しているなら重要な点が1つある。Windows Executiveと同様に、XNUはデスクトップを安定に保つのが非常に得意で、それはシステムをユーザー自身から守るという意味でもある
- こうした安全機能のため、Mac StudioでCosmo monorepoをコンパイルするには45秒かかるが、fork bombを起こしてもNetflixが1フレームも落とさないように思える
spam.shスクリプトも430msで動作し、Intelより遅い
- しかし、Asahi LinuxがM2の潜在能力を最大限引き出せる方法を見ているので、私はこれをまったく心配していない
プロ向けハードウェアでの性能向上
- llamafileはGPUを持たない人々を助けることに強い関心を持っているが、上位1%のユーザーにも最高水準の体験を提供する
- AMD Ryzen Threadripper PRO 7995WXは数か月前に発売され、現在お金で買える最も高価なCPU
- 価格は1万ドルだが、Zen4アーキテクチャに基づく96コアのAVX512を得られる
- 価格が2倍であるにもかかわらず、7995WXのx86 ISAはM2 UltraのARM ISAより7倍多い生の計算性能を提供しつつ、トークン生成速度はほぼ同等
- これは384MBのL3キャッシュのおかげである可能性が高い
- AVX512の利点の1つは、GoogleのGemmaモデルがAVX512では数学のなぞなぞを解ける一方、AVX2では解けないことにあり、これはより大きなベクタが一般に丸め誤差を減らしやすいため
VDPBF16PS命令は、VNNIやARM dotprodと同様にbf16のupdotを助ける
- MistralやTinyLLaMAのようなモデルは、正式フォーマットとしてbfloat16で重みを配布しているため、bf16へのネイティブ対応は有用
- bf16をfp16へ変換すると、表現可能な数値のうち正確に表せるのは13%だけ
- 実際には、Mistral 7bが使う数値の99.71%がその13%の範囲内にあるため、ほとんど問題にならない
- ただしllamafileは、公称ビット数を可能な限り忠実に伝える
2件のコメント
Intel 14600 や Ryzen 5600 のような中級クラスについてのデータがないですね。Raspberry Pi で動くことを意図しているようにも見えますが、実用には無理がありそうです。それでも、ローカル LLM の動作に必要なハードウェアスペックが徐々に下がってきていることを慰めにしたいです。
Hacker Newsの意見
Fortran
SGEMM実装に関する意見:-funroll-all-loops)で可能。cuBLAS 代替に関する意見:
LLM(Local Language Model)の実行に関する意見:
性能測定に関する意見:
関連リンク:
タイトルに関する意見:
MKL-DNN に対する性能改善に関する意見:
LLM 実行に関する意見:
Pixar の CPU 利用に関する意見:
AMD Zen4 と AVX512 に関する意見: