Проект llama.cpp выпустил версию b10321, которая включает критическое исправление операций GGML_OP_NORM и GGML_OP_RMS_NORM в Metal. Обновление устраняет проблему, при которой размер threadgroups, оставляющий частичную SIMD-группу, приводил к некорректным вычислениям среднего значения и дисперсии из-за потери частичных сумм.

  • Ошибка возникала, когда длины строк не были кратны размеру SIMD-группы, из-за чего вклад последнего канала игнорировался при кросс-SIMD групповой редукции.
  • Исправление округляет размер threadgroup вверх до ближайшего целого числа 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.

Это обновление обеспечивает численную корректность операций нормализации для нестандартных длин векторов, что необходимо для моделей с размерностями каналов, которые не делятся нацело на фактор векторизации.