llama.cppプロジェクトがバージョンb10321をリリースしました。これにはMetalにおけるGGML_OP_NORMおよびGGML_OP_RMS_NORM演算の重要な修正が含まれています。

この更新は、スレッドグループのサイズが部分SIMDグループを残す場合に、ドロップされた部分和のために平均と分散の計算が正しく行われない問題を解決します。

  • このバグは、行長がSIMDグループサイズの倍数でない場合に発生し、クロスSIMDグループ減算中に最後のレーンの寄与が無視されていました。
  • 修正により、スレッドグループのサイズがSIMDグループの整数倍になるように切り上げられ、過剰なアイドルレーンなしですべての部分和が正しく集約されます。

M3 Proでのテスト結果では、NORMとRMS_NORMのテストがそれぞれ50/50および51/51でパスしました。これは以前の失敗(25/50および26/51)と比較したものです。

このリリースは、macOS(Apple SiliconおよびIntel)、iOS、Linux(CPU、Vulkan、ROCm、OpenVINO、SYCL)、Android、Windows(CPU、CUDA、Vulkan、OpenCL、ROCm、OpenVINO、SYCL、HIP)、およびopenEulerのバイナリを提供します。

この更新により、ベクトル化係数で割り切れないチャネル次元を使用するモデルにとって不可欠な、非標準のベクトル長におけるノーム演算の数値的正確性が保証されます。