Llama.cpp — это, очевидно, основной движок для инференса локальных нейронок на CPU. Но ...
Llama.cpp — это, очевидно, основной движок для инференса локальных нейронок на CPU. Но благодаря открытости этой платформы, она получила множество форков, некоторые из которых могут дать маху даже основному движку. Один из таких форков — ik_llama.cpp от Ивана Кавракова, который 2023 году создал технологию K-quants и форматы Q4_K_M, Q5_K_S и т.д., известные всем, кто скачивает модели в GGUF. В 2024 году он решил развивать свои идеи отдельно. Проект начался как форк llama.cpp в июне 2024 года, а последняя синхронизация с основной веткой была в августе того же года. С тех пор ik_llama.cpp живёт своей жизнью: в нём уже почти 5000 коммитов, 3,3 тысячи звёзд на GitHub и лицензия MIT. Главная фишка форка заложена прямо в его описании: это llama.cpp с лучшей производительностью на CPU. И это не пустые слова. В декабре 2024 года автор сравнил свой форк с основной веткой на Ryzen 9 7950X и модели LLaMA 3.1 8B. Обработка промпта в BF16 выросла с 78,58 до 256,9 токена в секунду, в Q4_K_S с 108,4 до 269,6, а в формате IQ3_S и вовсе с 30,2 до 156,47, то есть в 5,18 раза 🔥 Многие функции для инференса появились сначала в ik_llama.cpp и только потом стали доступны в llama.cpp, а некоторые фишки вовсе остались уникальными, Среди функций форка: ⚒️ Семейство IQK-квантов (IQ2_K, IQ3_K, IQ4_K, IQ4_KS, IQ5_K, IQ6_K и другие) даёт лучшее соотношение размера и качества. Есть варианты с чередованием строк вроде IQ4_K_R4 и IQ4_KS_R16, где веса заранее упакованы так, чтобы процессор обрабатывал их максимально эффективно. ⚒️Trellis-кванты от IQ1_KT до IQ4_KT. Они основаны на новом целочисленном методе trellis-квантизации, который позволяет добиться приемлемой производительности даже на CPU. Плюс поддержка тернарных моделей BitNet, 1-битных Bonsai и MXFP4 из моделей gpt-oss. ⚒️ MLA и FlashMLA, фирменные механизмы внимания DeepSeek. В марте 2025 года вышла FlashMLA-3, которую автор описывает как самый быстрый инференс DeepSeek исключительно на CPU. ⚒️ Smart Expert Reduction, благодаря которому модель может задействовать меньше экспертов на каждый токен, жертвуя небольшой долей качества ради заметного прироста скорости. ⚒️ Tensor overrides, с помощью которых можно вручную указать, какие веса держать в видеопамяти, а какие в оперативной: например, оставить слои внимания на видеокарте, а экспертов на процессоре. Есть и подводные камни: ⚠️ Первый момент: полноценно и быстро работают только два бэкенда: CPU с AVX2 или новее (или ARM NEON и новее) и CUDA на видеокартах начиная с Turing. Так что если у вас видеокарта AMD, Intel или вы работаете на Mac, лучше оставаться на оригинальном llama.cpp. ⚠️ Второй важный момент касается процессоров с AVX-512. Для них при сборке нужно добавить отдельные флаги, которые включают оптимизированные IQK-ядра. Без этих флагов обычная Release-сборка на таком железе молча откатывается на путь AVX2. То есть можно собрать форк на новеньком EPYC и даже не узнать, что половина его возможностей не используется. ⚠️ Третий нюанс для тех, кто запускает MoE-модели в связке с видеокартой. Если часть экспертов оставлена на CPU, опцию -rtr лучше не использовать. Она перепаковывает все тензоры в оперативной памяти в формат с чередованием строк, а поскольку не у всех типов квантизации есть CUDA-реализация, умножение этих матриц всегда будет выполняться на CPU, даже когда выгоднее было бы отдать его видеокарте. Обычно это снижает скорость обработки промпта. 😅 Канал Serverflow в MAX: Подписаться