1 ポイント 投稿者 GN⁺ 2024-05-16 | 1件のコメント | WhatsAppで共有

GGML: CPU向け SiLU と Softmax の書き直し

主な変更点

  • ベクトル化された expf() 関数の導入:

    • 従来 GGML で使われていた short[65536] 参照テーブルよりも高い精度で Softmax と SiLU を計算できるようになった。
    • aarch64sse2+ をサポートし、最悪の場合の丸め誤差は 2 ULP。
    • avx2avx512 の実装も作成されたが、sse2+fma と比べてコードの複雑さに見合う大きな利点がないため使われていない。
  • 主な反応:

    • 複数のコントリビューターがこの変更に前向きな反応を示した。
    • AMD Ryzen 9 5950XM2 UltraSOFT_MAX が約 1.5 倍高速化。

コード変更点

  • 主な変更の要約:
    • コメントアウトされた #define を削除。
    • 重複した 5 行を ggml_vec_soft_max_f32() として抽出。
    • GGML_SILU_FP16 関連関数を削除。
    • ggml_v_expf() を追加。
    • ggml_v_silu() を追加。
    • ggml_vec_silu_f32()SSE2 または __ARM_NEON フラグに応じたプリプロセッサ文で調整。

性能改善

  • ベンチマーク結果:
    • AMD Ryzen 9 5950XM2 UltraSOFT_MAX が約 1.5 倍高速化。
    • AVX2 を含めると利点は 1.5 倍から 1.9 倍に増加。
    • znver4avx512 を含めると 2.1 倍に増加。

追加の意見

  • コントリビューターの意見:
    • AVX512 使用時に vscalefps を使えばオーバーフローとアンダーフローを適切に処理でき、チェックとブレンドを削除できる。
    • Skylake-AVX512 / Cascadelake で性能向上を確認。

GN⁺の意見

  • 性能改善: この変更は CPU 上の性能を大きく向上させる可能性があり、特に AVX2AVX512 を使う最新ハードウェアでより大きな利点をもたらす。
  • コードの複雑さ: AVX2AVX512 の実装は SSE2+fma と比べて大きな利点がないため、コードの複雑さを抑えることが重要。
  • ハードウェア互換性: さまざまなハードウェアで性能を最適化するために、多様な SIMD 命令セットをサポートすることが重要。
  • ベンチマーク: 性能改善を確認するために、さまざまなハードウェアでのベンチマークテストが必要。
  • 最新技術の適用: 最新の SIMD 命令セットを活用して性能を最大化することが重要。

1件のコメント

 
GN⁺ 2024-05-16
Hacker Newsの意見

Hacker Newsコメントまとめ

  • 20年前のHughesレーダー信号プロセッサの話

    • Hughesレーダー信号プロセッサで e^x 計算を最適化した経験の共有。
    • 32ビットワード内の各8ビット値に対して256個の e^x テーブルを使い、最終値を乗算で計算。
    • 以前より5倍高速に動作した。
    • このマシンは今では旧式だが、当時としては非常に高速な処理性能を誇っていた。
  • LLM推論速度に対するsiluとsoftmax改善の影響

    • LLM推論速度への影響は大きくないだろうという意見。
    • ほとんどの時間は行列積に費やされる。
  • コード最適化への感嘆

    • 複雑な最適化作業に対する驚きと感嘆。
    • 貢献者がjartだと知って納得したという反応。
  • LUTサイズへの疑問

    • サイズ65536のLUTはL1キャッシュ全体のサイズと同じで、非効率かもしれないという意見。
    • ただし、確率的な調整によってうまく機能する可能性もある。
  • CPU上でのllama.cppとggmlの比較

    • ggmlがtensorflow lite、onnxruntimeなどと比べてどうなのか気になるという意見。
  • CUDAデバイスでの性能比較

    • gguf/llama.cppが非バッチ推論でより優れているのか、それともexllamav2+flashattentionが依然として優勢なのかという質問。
  • LUTのベクトル化可能性

    • LUTはベクトル化できるという意見。
    • 関連資料へのリンクあり。
  • 高速なtanh計算

    • 高速なtanh計算に関するリンクの共有。
  • CPUでのllama性能

    • 最適化があっても、CPUではパラメータ数の多いllamaは遅すぎる可能性があるという意見。