14 ポイント 投稿者 GN⁺ 2024-04-02 | 2件のコメント | WhatsAppで共有

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件のコメント

 
savvykang 2024-04-02

Intel 14600 や Ryzen 5600 のような中級クラスについてのデータがないですね。Raspberry Pi で動くことを意図しているようにも見えますが、実用には無理がありそうです。それでも、ローカル LLM の動作に必要なハードウェアスペックが徐々に下がってきていることを慰めにしたいです。

 
GN⁺ 2024-04-02
Hacker Newsの意見
  • Fortran SGEMM 実装に関する意見:

    • 現代の Fortran コンパイラは、追加の変更なしでも AVX と FMA の最適化を適用できる。
    • ループアンローリング(loop unrolling)の最適化は、コンパイラフラグ(-funroll-all-loops)で可能。
    • Intel コンパイラは、ユーザーの明示的な要求がなくてもループアンローリングを行う。
    • Fortran 77 のソースに並列化を追加するのは難しいかもしれないが、OpenMP 構文を追加したり、現代 Fortran の並列化構造を使ったりできる。
    • Fortran 77 の関数を過小評価してはいけない。プラットフォーム固有の詳細から開発者を解放し、コンパイラに作業を任せることが Fortran の目的である。
  • cuBLAS 代替に関する意見:

    • cuBLAS を CUDA 内で書き直そうとする試みに見える。
    • 次の段階は CUDA 依存を取り除き、Vulkan や Metal のコンピュートシェーダを直接使うことかもしれない。
  • LLM(Local Language Model)の実行に関する意見:

    • 誰もが最小限の要件でもローカルで LLM をダウンロードして実行できるべきだ。
    • これは人類の知識の大きな一部分をバックアップする役割を果たしうる。
  • 性能測定に関する意見:

    • サブルーチンの定義には C++ を使うのを好む。C++ は Python より 3 桁以上速い。
    • 性能差を「ムーアの法則の年数」で測るというアイデアが気に入っている。
  • 関連リンク:

  • タイトルに関する意見:

    • タイトルが紛らわしい。最初は、モデルが CPU で GPU より速いと主張しているのかと誤解しかねない。
    • 「LLaMa on CPU の性能改善」のような、より明確なタイトルのほうがよい。
  • MKL-DNN に対する性能改善に関する意見:

    • 限られた行列サイズについて MKL-DNN を上回ろうとしたが、失敗した経験がある。
    • CPU でこのようなエネルギー効率を実現するのは物理的に不可能だ。
  • LLM 実行に関する意見:

    • 大きなコンピュータがなくても大規模言語モデルを実行できる。
    • 小さなパラメータモデルを実行することも技術的には言語モデルの実行に当たるが、多くの人が有用だと考える基準は満たさないかもしれない。
  • Pixar の CPU 利用に関する意見:

    • Pixar のような大規模スタジオは、コスト性能比とより大きな RAM へのアクセス性のために、映画レンダリングに CPU を使っている。
    • 関連ニュースリンク を提示。
  • AMD Zen4 と AVX512 に関する意見:

    • 7995WX x86 ISA は M2 Ultra ARM ISA より価格は 2 倍だが、生の計算能力は 7 倍高く、トークン生成速度もほぼ同じである。
    • これは 384MB の L3 キャッシュのおかげである可能性がある。
    • Zen4 で LLaMA を以前より 2.8 倍速く実行できるようにする作業を行った。