Этот форк llama.cpp сделал Qwen в 3,3 раза быстрее
Code Unpacked
0:00 / 0:00
Этот форк llama.cpp сделал Qwen в 3,3 раза быстрее
4 259 просмотров · 8 ч назад
Code Unpacked
703 подписчика
4 259 просмотров · 8 ч назад
Qwen3.8-Flash-Next на одной RTX 4090, шестиядерном i5-12400F и DDR4: 29,8 токенов в секунду на llama.cpp, 97,3 с tandem.cpp. Это в 3,3 раза быстрее и всего на 6% меньше, чем в режиме Strata.
tandem.cpp — это не новый движок и не форк. Это независимый набор патчей для llama.cpp, для любой модели MoE, которая не помещается в VRAM. Вот что он меняет, откуда берется увеличение в 3,3 раза, насколько он близок к Strata и где он все еще медленнее, чем обычный llama.cpp.
🔔 Подпишитесь https://www.youtube.com/@Code-Unpacke...
📌 Разделы:
00:00 - Один патч, в 3,3 раза быстрее
00:48 - Один репозиторий, один файл патча
01:34 - Модель больше, чем карта
02:28 - Промахи распределяются на две части
03:24 - Собственные цифры разработчика
04:10 - Qwen3.8: 29,8 становится 97,3
05:05 - Длинные подсказки читаются быстрее
05:59 - По умолчанию включено только округление
06:44 - Strata работает в двух режимах
07:46 - Почему Strata по-прежнему лидирует
08:32 - Причина третья: больше, чем оперативная память
09:30 - Жадный, но не воспроизводимый
10:19 - Upstream, все еще открыт
11:10 - В четыре раза, затем 6%
В этом видео мы распаковываем Опубликованные результаты тестов tandem.cpp. Все приведенные здесь цифры получены от разработчика tandem.cpp (с ноутбука RTX 3050 одного пользователя). Я сам эти тесты не проводил.
По умолчанию llama.cpp размещает модель MoE по слоям: плотные веса и столько экспертов целых слоев, сколько поместится, отправляются на GPU, а CPU вычисляет остальное. tandem.cpp размещает по экспертам: каждый эксперт хранится в ОЗУ, а оставшаяся память GPU становится кэшем недавно использованных экспертов из каждого слоя. Кэшированные эксперты работают на GPU; промахи распределяются между CPU, который вычисляет одновременно, и загрузкой через PCIe, следуя измеренным скоростям CPU и PCIe (правило Страты).
• Что это: tandem.patch (~8700 строк в 35 файлах llama.cpp), примененный к llama.cpp f5222f25c (28 октября), опубликованному 1 ноября ewhacc; MIT; независимый, не связан с ggml-org; Цель — однопользовательское декодирование.
• Также: объединенные ядра, один граф CUDA на каждую форму пакета и головка MTP, переквантованная с 3,6 до 1,8 ГиБ.
• Протокол: первые 200 вопросов GSM8K, один пользователь, одинаковая память GPU и черновая модель для обоих движков.
• Потребительский ПК (i5-12400F, 64 ГБ DDR4, RTX 4090 24 ГБ, PCIe 4.0), Qwen3.8-Flash-Next IQ3_S + MTP: llama.cpp 29.8 / 29.4, tandem.cpp 97.3 / 96.1 (жадный / выборочный, 3.3x), Strata exact 103.6 / 98.1.
• Более старая рабочая станция (i9-10900X, PCIe 3.0, RTX 4090): 31.1 → 100,9 (3,2x)
• Другие модели: gpt-oss-120b 27,8 → 51,5 на потребительском ПК; GLM-4,5-Air 31,9 → 54,6 на 48 ГБ RTX 6000 Ada; обычно 1,4–2,1x
• Запрос на 64K токенов, Qwen3.8 на карте 48 ГБ: предварительное заполнение 600 → 860 токенов/с, первый токен через 76 с вместо 109
• Когда помещается: Qwen3.6-35B-A3B на всей карте 48 ГБ 173,1 → 179,2 (+4%); сжат до 8 ГБ, 1,44x
• Качество: по умолчанию отключено, KL-дивергенция 0 и один и тот же топовый токен 100% времени; по умолчанию включено, 96,1%, перплексия не изменилась; точность GSM8K в пределах шума
• Тот же кэш экспертов, что и у Strata на карте 48 ГБ: 131,1 против 129,2 (12 ГБ), 91,3 против 89,3 (4 ГБ)
• В чем преимущество Strata: в режиме по умолчанию пропускает экспертов низкого ранга, 127,1 (эквивалент в tandem.cpp, отключен по умолчанию: 123,6); DeepSeek-V4.1 на RTX PRO 6000 Blackwell, 89,6 против 84,4 без драфтинга, но 132,4 против 148,9 с драфтингом; DeepSeek-V4.1 работает в три раза быстрее, чем потребительский ПК с большим объемом оперативной памяти: tandem.cpp 5.99 против llama.cpp 6.86 против Strata 8.41
• Внешний отчет (выпуск №1): ноутбук с RTX 3050 и 4 ГБ видеопамяти, Qwen3.5-35B-A3B IQ2_XXS, около 37 токенов в секунду с кэшем эксперта объемом 512 МиБ, рядом с ним нет простого числа llama.cpp
Оговорки: столбец llama.cpp — это расположение по умолчанию в llama.cpp, а не в его собственном кэше эксперта (объединенном 7 октября, включенном с помощью --moe-cache-mib), на основе которого строится tandem.cpp. В пути обработки данных на ЦП пока не учитываются промахи, возникающие на SSD, поэтому модели, значительно превышающие объем оперативной памяти, теряют большую часть выигрыша (16,5 против 15,8 токенов/с для Qwen3.8 на ПК с 32 ГБ оперативной памяти и видеокартой на 16 ГБ). Программа разработана для одного пользователя, протестирована только с CUDA на Linux, многопроцессорная обработка работает только с разделением слоев, а результаты, полученные с помощью алгоритма "жадного" вычисления, не воспроизводятся от запуска к запуску. Это не запрос на слияние и не объединен; открыты запросы на слияние в основной ветке, PR #30966 (пропущены эксперты по ЦП) и черновик PR #30971 Петра Вилкина.
Что вы думаете: следует ли llama.cpp принимать подобные идеи от разработчиков в основную ветку, или лучше создать для них отдельный патч? Поделитесь своим мнением в комментариях.
🔗 Источники и дополнительная информация:
tandem.cpp, ...