llama-modchip уместил DeepSeek на 284 млрд параметров в 64 ГБ ОЗУ без GPU
Автор проекта сжал DeepSeek-V4-Flash до 56,56 ГиБ и заявляет 9–10 токенов в секунду на одном процессоре. Разбираем, как это устроено, почему на Hacker News не верят в качество и какой режим уже проверен.
Разработчик под ником synchopate выложил проект llama-modchip: патчи к llama.cpp и перекодировщик весов, с которыми модель DeepSeek-V4-Flash-0731 на 284,33 млрд параметров занимает 56,56 ГиБ и, по замерам автора, целиком помещается в оперативную память компьютера с 64 ГБ без видеокарты и без подкачки. 8 ноября в 13:22 мск ссылку на репозиторий опубликовали на Hacker News: к вечеру 9 ноября обсуждение набрало 471 очко и 204 комментария, а репозиторий получил 755 звёзд.
Для программиста это заявка на то, что большую открытую модель можно запускать локально на обычном рабочем компьютере с Linux: код распространяется под лицензией Apache-2.0, веса лежат на Hugging Face с пометкой MIT, запросы не покидают машину. Плата за это: сжатие в среднем до 1,71 бита на вес, генерация со скоростью 9–10 токенов в секунду (до 14,7 в пике со спекулятивным драфтером) и отсутствие независимых подтверждений. Все цифры для модели на 284 млрд параметров приводит только сам автор, а инженеры в обсуждении сомневаются, что после такого сжатия модель годится для работы. Надёжнее проверен второй режим проекта, модель на 30 млрд параметров для машин с меньшим объёмом памяти: по нему в репозитории есть полтора десятка отчётов пользователей.
Ключевые выводы
- Речь о DeepSeek-V4-Flash-0731 (284,33 млрд параметров, из них 13,17 млрд активны на каждом токене), а не о старшей V4 Pro. Сжатый файл занимает 56,56 ГиБ (60,73 ГБ) и получен из кванта Unsloth UD-IQ1_S на 76,87 ГиБ.
- Заявленная скорость на Ryzen 9 9955HX с 64 ГБ DDR5: 43–44 токена в секунду на разборе промпта, 9,06–9,95 на генерации, в пике 11,5–14,7 со спекулятивным драфтером. Замеры авторские, чужих запусков 284B на 64 ГБ не опубликовано.
- Слово «Lossless» в документации означает совпадение с обычным llama.cpp на том же сжатом файле. С полноточной моделью автор качество не сравнивал.
- Файл не открывается в штатных llama.cpp, Ollama и LM Studio. Нужен пропатченный бинарник, готовая сборка есть только под Linux x86_64.
- Модель на 30 млрд параметров (Nemotron-3.5-30B-A3B) пользователи проверили на своём железе: от 10,69 токена в секунду на двух Xeon E5-2670 2012 года до 80,14 на Threadripper PRO 7985WX со спекулятивным драфтером. Кванты в отчётах разные, часть сделана на стандартном Q4_0.
Что сделал автор и как 284 млрд параметров поместились в 64 ГБ?
Модель сжали сильнее самого маленького штатного кванта и держат в памяти целиком, без подгрузки весов с диска во время работы. DeepSeek-V4-Flash-0731 построена по схеме MoE (смесь экспертов): в README описаны 43 слоя, в каждом 256 маршрутизируемых экспертов и один общий, на токен включаются шесть маршрутизируемых. Поэтому из 284,33 млрд параметров в расчёте одного токена участвуют 13,17 млрд.
Самый компактный файл в наборе квантов Unsloth, UD-IQ1_S, весит 76,87 ГиБ. На Linux-машине с 64 ГБ, по оценке автора, приложению доступно около 62,5 ГиБ, поэтому такой файл приводит к подкачке или к аварийному завершению из-за нехватки памяти. llama-modchip перекодирует этот квант ещё раз, и разные части модели сжимает по-разному:
- веса 256 маршрутизируемых экспертов (около 265 млрд параметров) переведены в основном в формат IQ1_S, 1,5625 бита на вес; слои, которые автор считает чувствительными, оставлены в IQ2_XXS (2,06 бита) и IQ1_M (1,75 бита);
- часть проекций механизма внимания переведена в собственный формат проекта Fractal-64 (тип тензора
GGML_TYPE_Q2_0, 3,75 бита на вес); - эмбеддинги, первый плотный слой, общие эксперты и остальные матрицы внимания сохранены в Q4_K, Q5_K и F32.
Какие нейроны экспертов можно сжать сильнее, перекодировщик решает по формуле от норм весов, без прогона калибровочных данных через модель; автор называет метод SwiGLU-H2 и описывает его в FAQ проекта. Получаются три файла GGUF общим размером 56,56 ГиБ. Размеры файлов на странице весов на Hugging Face с этой цифрой сходятся: 60,73 ГБ. При контексте 256 тыс. токенов процесс, по данным README, занимает 57,61–58,9 ГиБ резидентной памяти при нулевой подкачке.
| Исходный квант Unsloth UD-IQ1_S | llama-modchip v2.4.0 | |
| Размер файла | 76,87 ГиБ (82,5 ГБ) | 56,56 ГиБ (60,73 ГБ) |
| Помещается в 64 ГБ ОЗУ | нет: подкачка или нехватка памяти | да: 57,61–58,9 ГиБ при контексте 256 тыс. токенов |
| Разбор промпта из 512 токенов | на 64 ГБ не измерен | 43,16–44,36 токена в секунду |
| Генерация | 5,91 токена в секунду по README; техническое описание относит эту цифру к первой версии v2.3.0 | 9,06–9,95 токена в секунду |
| Генерация со спекулятивным драфтером | недоступна из-за ошибки отката состояния | 11,5–14,7 токена в секунду в пике |
Таблица повторяет данные README: это замеры автора на одной машине, независимого сравнения нет.
Какая скорость заявлена и на каком железе?
Автор заявляет 9–10 токенов в секунду на генерации и 43–44 на разборе промпта. Тестовая машина: AMD Ryzen 9 9955HX (16 ядер Zen 5 с AVX-512, 64 МБ кэша L3), 64 ГБ DDR5, без видеокарты. Прирост дают патчи к вычислительным ядрам ggml, перечисленные в техническом описании оптимизаций: пакетная обработка промпта на 512-битных регистрах AVX-512 ускорила разбор с 25,0 до 44,36 токена в секунду (плюс 77%), генерация выросла с 5,91 до 9,06 токена в секунду (плюс 53%). База сравнения описана противоречиво: README относит 5,91 токена к непропатченному запуску UD-IQ1_S, а техническое описание — к первой версии самого проекта, v2.3.0.
По профилю автора, на каждый сгенерированный токен из памяти читается около 2,85 ГБ весов. На практике это значит, что на машине с более медленной памятью цифры будут ниже; это вывод Proglib, замеров 284B на другом железе нет.
Быстрее 10 токенов в секунду модель работает в двух необязательных режимах. Первый отбрасывает часть экспертов: вместо шести на слой считаются пять или четыре (переменная окружения LLAMA_MOE_TOP_K). Второй добавляет драфтер Stockfish-PVS, таблицы на 1,64 МБ, которые по n-граммам предлагают несколько следующих токенов, а модель проверяет их за один проход. На своём тесте автор получил 94,5% принятых токенов, а диапазон 11,5–14,7 токена в секунду в примечаниях к v2.3.0 назван пиковым: средняя скорость того же прогона 9,67. В отчётах пользователей по модели 30B доля принятых заметно ниже: от 64,5 до 70%.
Почему инженеры спорят о качестве?
Сравнения с полноточной моделью автор не привёл, а квант меньше двух бит на вес многие считают непригодным для работы. В README есть две оценки. Первая: 98,5 балла из 100 на собственном тесте автора (benchmarks/eval_quality_and_tools.py). Это составной балл: 30 за вызовы инструментов, 30 за задачи на код, 20 за поиск в длинном контексте и логику, ещё 20 за скорость и расход памяти. Вторая: косинусное сходство логитов 0,9964, посчитанное относительно исходного кванта UD-IQ1_S, который сам относится к самым сильно сжатым. Насколько оба файла уступают несжатой модели, из документации узнать нельзя.
Слово «Lossless» относится к режиму по умолчанию, Top-6: пропатченный рантайм выдаёт те же логиты, что и непропатченный на том же сжатом файле (сходство 1,00000). Для Top-5 автор приводит косинусное сходство 0,99714, локальный рост перплексии по десяти самым вероятным токенам на 0,42% и совпадение самого вероятного токена в 95,8% случаев; для Top-4 с дополнительным пропуском строк матриц сходство падает до 0,99126.
I am exceedingly skeptical of anyone that claims to get good QUALITY results out of it at that size. [...] Running a lobotomized model just to say you're doing it is really not accomplishing anything special.
the final gguf is 75% of the size of unsloth IQ1_S, which by itself should tell you a lot about its quality
adrian17 нашёл и путаницу в документации: исходный файл на 76,87 ГиБ в README и FAQ местами назван IQ2_XXS. По метаданным репозитория Unsloth 76,87 ГиБ занимает UD-IQ1_S, а UD-IQ2_XXS весит 84,61 ГиБ. Несколько участников обсуждения называют README сгенерированным нейросетью и трудночитаемым. Об авторе известно мало: в профиле GitHub нет ни имени, ни места работы, о связи проекта с DeepSeek или Unsloth в репозитории не сказано.
Кому это пригодится на практике?
Прежде всего тем, у кого 16–32 ГБ памяти и нет видеокарты: работа рантайма с моделью на 30 млрд параметров подтверждена чужими замерами. NVIDIA Nemotron-3.5-30B-A3B в формате Fractal-64 занимает 14,35 ГиБ при 3,75 бита на вес; на машине автора базовая генерация идёт со скоростью 25,02 токена в секунду. В таблице сообщества в README собраны отчёты с серверов, настольных ПК и ноутбуков. Сравнивать строки между собой нужно осторожно: кванты в отчётах разные. Например, на двух Xeon E5-2670 и на Ryzen 9 9950X запускали стандартный Q4_0 на 17,59 ГиБ, а результат Threadripper получен со спекулятивным драфтером при 70% принятых токенов.
It works pretty good on my Ryzen 7 5700U/64GB DDR4. Steady 12 to 14 TPS. Not blazing, by any means, but fast enough to get meaningful personal work done, with a power consumption of 15w.
Есть и сдержанная оценка. Пользователь aappleby сравнил проект с обычным llama.cpp на Ryzen 7945HX с 96 ГБ DDR5: Nemotron на процессоре работает «примерно так же», заметно быстрее стал только разбор промпта. DeepSeek он не проверял, потому что не нашёл эту модель в modchip setup.
Для 284B круг уже: Linux, 64 ГБ памяти и процессор с AVX-512, если пользоваться готовым бинарником. Пользователь ar-nelson попробовал запустить DeepSeek на сервере с 24-ядерным Xeon поколения Haswell и 96 ГБ DDR4. Команда modchip start завершилась ошибкой формы тензора, а бинарник из загрузки упал с Illegal instruction (core dumped): процессор не поддерживает AVX-512.
the repo doesn't include clear instructions or scripts to rebuild its special llama.cpp variant, only a few patch files (which don't seem to be enough on their own?)
В README есть сворачиваемый раздел с названием «Repository Structure & Manual CMake Build Instructions», но на 9 ноября в нём только дерево каталогов. Ещё три ограничения называет сам автор:
- для Vulkan и CUDA формат Fractal-64, по FAQ, не реализован: если отдать такие тензоры видеокарте, бэкенд выдаёт пустой или мусорный результат, для гибридных схем автор советует другой формат, MXFP4;
- на Apple Silicon поддержка Fractal-64 в README помечена как непроверенная до конца, но вечером 9 ноября в issue #16 пользователь опубликовал запуск такого файла на M4 Max через Metal: 72,47 токена в секунду на генерации в llama-bench;
- для Windows есть отдельный гибридный пакет, рассчитанный на связку видеокарты и процессора.
Как попробовать и что проверить заранее?
Начать стоит с проверки процессора и с режима 30B, а 284B ставить только на Linux с 64 ГБ памяти. Проверка из README не требует скачивать модель; перед запуском скрипт стоит прочитать, потому что команда выполняет код из сети:
curl -sL https://raw.githubusercontent.com/synchopate/llama-modchip/main/scripts/check_cpu_readiness.py | python3
Автоматическая установка и чат в терминале на Linux и macOS:
git clone https://github.com/synchopate/llama-modchip.git cd llama-modchip ./modchip chat
Прямой запуск 30B готовым бинарником под Linux x86_64. README относит этот режим к машинам с 16–32 ГБ, но с контекстом 262 144 токена из команды процесс, по FAQ, занимает 15,40 ГиБ в простое и 17,27 ГиБ на пике. Для команды в таком виде нужны 32 ГБ; на 16 ГБ придётся уменьшать контекст в параметре -c (это вывод Proglib):
hf download Synchopate/NVIDIA-Nemotron-3.5-30B-A3B-Fractal-64-CPU-GGUF \ llama-server-modchip-linux-x86_64 NVIDIA-Nemotron-3.5-30B-A3B-Fractal-64.gguf --local-dir . chmod +x llama-server-modchip-linux-x86_64 ./llama-server-modchip-linux-x86_64 -m NVIDIA-Nemotron-3.5-30B-A3B-Fractal-64.gguf -c 262144 -t 16 --port 8080
Запуск DeepSeek-V4-Flash 284B. Скачается около 60,7 ГБ; команда из README задаёт контекст 32 768 токенов, меньше заявленных 256 тыс.:
hf download Synchopate/DeepSeek-V4-Flash-0731-Fractal-64GB-CPU-GGUF --local-dir ./dsv4 chmod +x ./dsv4/llama-server-modchip-linux-x86_64 ./dsv4/llama-server-modchip-linux-x86_64 -m ./dsv4/DeepSeek-V4-Flash-0731-Fractal-00001-of-00003.gguf -c 32768 -t 16 -fa on --port 8080
Открыть эти файлы в привычных инструментах не получится. README предупреждает, что непропатченные llama.cpp, Ollama и LM Studio отклоняют их с ошибкой unknown tensor type 40. Из полезных подкоманд: ./modchip bench запускает 30-секундный тест и печатает карточку с результатом, ./modchip eval прогоняет авторский тест качества на 100 баллов, ./modchip claude подключает локальную модель к Claude Code CLI.
Что это меняет и за чем следить дальше?
Проект развивается быстро. Версия v2.3.0 от 3 ноября первой заявила запуск 284B меньше чем в 60 ГиБ памяти, v2.4.0 от 4 ноября добавила ядра AVX-512 и пакет для Windows, 5 ноября веса появились на Hugging Face. В обсуждении llama-modchip ставят в ряд с другими форками llama.cpp, которые по-своему решают задачу локального запуска. Пользователь SillyUsername объясняет их число очередью в основном проекте: по его словам, там накопилось 1,7 тыс. нерассмотренных пул-реквестов.
Открытые веса выходят всё чаще: недавно мы разбирали, сколько видеопамяти нужно для Kimi K3.1 Pro, и рассказывали, как Revolut посадила 2000 инженеров на GLM. Как подбирать модели под повседневные задачи, описано в материале о том, какие ИИ-агенты и модели держать в рабочем наборе.
Чтобы заявление про 284B стало проверенным фактом, не хватает двух вещей: независимого запуска на 64 ГБ с опубликованными цифрами и сравнения качества с полноточной моделью на общепринятых тестах. До тех пор проверенная часть llama-modchip ограничена запуском моделей класса 30B на процессоре, а режим 284B остаётся экспериментом со сверхсжатием.
Источники
- https://github.com/synchopate/llama-modchip
- https://github.com/synchopate/llama-modchip/blob/main/README.md
- https://github.com/synchopate/llama-modchip/blob/main/docs/DEEPSEEK_V4_OPTIMIZATIONS.md
- https://github.com/synchopate/llama-modchip/blob/main/FAQ.md
- https://github.com/synchopate/llama-modchip/releases/tag/v2.3.0
- https://github.com/synchopate/llama-modchip/releases/tag/v2.4.0
- https://huggingface.co/Synchopate/DeepSeek-V4-Flash-0731-Fractal-64GB-CPU-GGUF
- https://huggingface.co/unsloth/DeepSeek-V4-Flash-0731-GGUF
- https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-0731
- https://huggingface.co/Synchopate/NVIDIA-Nemotron-3.5-30B-A3B-Fractal-64-CPU-GGUF
- https://news.ycombinator.com/item?id=50411961
- https://github.com/synchopate/llama-modchip/issues/16