ИИ · форк llama.cpp · нейросети · математика · C++ · GSM8K29 июля в 13:31 · 3 мин

Оптимизация LLM: как форк llama.cpp улучшил работу 32B-модели на видеокарте RTX 3050

Разработчик Titled представил форк популярного движка llama.cpp, внедривший концепцию рекуррентного повторения нейронных слоев. Данная модификация позволила значительно повысить точность ответов модели на бенчмарке GSM8K, работая в режиме 12-шаговых циклов. Автор утверждает, что на борту видеокарты NVIDIA GeForce RTX 3050 удалось запустить и улучшить производительность модели с параметрами 32 миллиарда, что ранее считалось невозможным без существенных аппаратных ресурсов.

# Рекуррентность в LLM: новые методы оптимизации от разработчика Titled

Появление новых методов обработки данных нейронными сетями открывает перспективы для использования менее мощного оборудования. Разработчик Titled, представляющий проект SimpleTitled, создал собственную модификацию библиотеки llama.cpp, основываясь на нестандартной подходе к архитектуре слоев.

Основная идея заключается во временном повторении вычислений определенных слоев модели. Это позволяет системе «подумать» дольше над задачей без увеличения вычислительной нагрузки в реальном времени, что критически важно для устройств с ограниченной памятью, таких как ноутбуки с графическими процессорами типа RTX 3050.

Механизм адаптивной выборки и блокирование

Стандартная архитектура нейронной сети проходит данные через фиксированный набор слоев. Если увеличить количество слоев для усложнения процесса, возрастет нагрузка на видеокарту. Однако автор предложил использовать рекурсию внутри существующих слоев.

Вместо блокирования одного слоя, как это часто делалось в других проектах, новая формула предполагает работу сразу с тремя слоями. Алгоритм адаптивной выборки делит структуру модели на четыре блока. Один из блоков используется исключительно для начального понимания задачи, а остальные три подвергаются циклическому повторению. Количество повторений задается параметром глубины $D$, который распределяется между слоями по весам в пропорции 1:3:2. При использовании параметра $D=12$ распределение циклов выглядит следующим образом: 2 цикла для первого активного слоя, 6 для второго и 4 для третьего.

Для предотвращения нежелательных последствий чрезмерного повторения, которые могут привести к генерации бессмысленного текста, в систему внедрены механизмы стабилизации.

Математическая стабилизация и управление памятью

Ключевыми элементами предотвращения сбоев стали два метода:

1. Euler step scaling (Эйлеровое масштабирование): Этот метод заимствован из численного решения обыкновенных дифференциальных уравнений. Он работает как адаптивный шаг внутри цикла вычислений, используя линейную комбинацию текущего состояния и входного сигнала. Формула $h_{t+1} = h_t + \frac{1}{iters} \cdot f(h_t)$ обеспечивает баланс потоков и не дает значениям выйти за пределы стабильного диапазона.

2. KV-декапплинг: В системах с памятью используются кэши ключей и значений (KV cache). В данной модификации кэш отсоединен от механизма рекуррентности. Запись в кэш происходит только на первой итерации цикла, во всех последующих выполняются лишь операции чтения. Это предотвращает перезапись ключей и значений на каждой итерации, что сохраняет целостность внимания модели.

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

Результаты тестирования на бенчмарке GSM8K

Эффективность подхода была проверена на бенчмарке GSM8K, где требуется решение математических задач. Тестирование проводилось на модели DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M. Сравнительные результаты показали:

* Базовая конфигурация (D = 0): Точность составила 39.20% (196 правильных ответов из 500). * Конфигурация с рекуррентностью (D = 12): Точность выросла до 77.20% (386 правильных ответов из 500).

Таким образом, применение метода рекуррентного повторения слоев с учетом стабильности позволило повысить точность ответов более чем в два раза. Кроме того, автор отмечает улучшение скорости обработки данных примерно на 10% по сравнению с базовыми версиями движка.

Проект доступен в виде форка библиотеки llama.cpp и призван помочь разработчикам оптимизировать работу нейросетей на потребительском оборудовании.

Первоисточники

Habr AI
← Вернуться в эфир