SiLUとSoftMaxを2倍高速化する新しい指数関数、精度は完全維持
(github.com/ggerganov)GGML: CPU向け SiLU と Softmax の書き直し
主な変更点
-
ベクトル化された
expf()関数の導入:- 従来
GGMLで使われていたshort[65536]参照テーブルよりも高い精度で Softmax と SiLU を計算できるようになった。 aarch64とsse2+をサポートし、最悪の場合の丸め誤差は 2 ULP。avx2とavx512の実装も作成されたが、sse2+fmaと比べてコードの複雑さに見合う大きな利点がないため使われていない。
- 従来
-
主な反応:
- 複数のコントリビューターがこの変更に前向きな反応を示した。
AMD Ryzen 9 5950XとM2 UltraでSOFT_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 5950XとM2 UltraでSOFT_MAXが約 1.5 倍高速化。AVX2を含めると利点は 1.5 倍から 1.9 倍に増加。znver4でavx512を含めると 2.1 倍に増加。
追加の意見
- コントリビューターの意見:
AVX512使用時にvscalefpsを使えばオーバーフローとアンダーフローを適切に処理でき、チェックとブレンドを削除できる。Skylake-AVX512/Cascadelakeで性能向上を確認。
GN⁺の意見
- 性能改善: この変更は CPU 上の性能を大きく向上させる可能性があり、特に
AVX2とAVX512を使う最新ハードウェアでより大きな利点をもたらす。 - コードの複雑さ:
AVX2とAVX512の実装はSSE2+fmaと比べて大きな利点がないため、コードの複雑さを抑えることが重要。 - ハードウェア互換性: さまざまなハードウェアで性能を最適化するために、多様な SIMD 命令セットをサポートすることが重要。
- ベンチマーク: 性能改善を確認するために、さまざまなハードウェアでのベンチマークテストが必要。
- 最新技術の適用: 最新の SIMD 命令セットを活用して性能を最大化することが重要。
1件のコメント
Hacker Newsの意見
Hacker Newsコメントまとめ
20年前のHughesレーダー信号プロセッサの話
e^x計算を最適化した経験の共有。e^xテーブルを使い、最終値を乗算で計算。LLM推論速度に対するsiluとsoftmax改善の影響
コード最適化への感嘆
LUTサイズへの疑問
CPU上でのllama.cppとggmlの比較
CUDAデバイスでの性能比較
LUTのベクトル化可能性
高速なtanh計算
CPUでのllama性能