Почему DeepSeek V3.2 не запускается в llama.cpp из коробки
Вы скачали свежую DeepSeek V3.2 с Hugging Face. Радостно запускаете convert.py — и получаете ошибку "unsupported model". Знакомо? Я тоже столкнулся с этим. Причина проста: llama.cpp пока не поддерживает sparse attention, который DeepSeek использует в своей архитектуре.
Sparse attention — это когда модель обращает внимание не на все токены в контексте, а только на избранные. Экономит вычисления. Но в llama.cpp этой оптимизации пока нет. И конвертер падает с ошибкой.
Важный нюанс: патч не добавляет поддержку sparse attention. Он просто игнорирует эти слои, превращая модель в обычную dense attention. Производительность падает, но модель хотя бы работает.
Что делает патч на самом деле
Патч — это костыль. Грубый, но рабочий. Он модифицирует конвертер llama.cpp, заставляя его пропускать проверки на sparse attention. Вместо сложной архитектуры с избирательным вниманием получается стандартная трансформерная модель.
Да, вы теряете часть «интеллекта» модели. Нет, это не официальный способ. Но если хочется попробовать DeepSeek V3.2 прямо сейчас, а не ждать месяцев обновлений llama.cpp — другого выхода нет.
1Готовим окружение
Сначала клонируем свежий llama.cpp. Не берите релизы — нужен именно main, там больше шансов, что патч применится.
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make clean && make -j$(nproc)
Если make падает с ошибками — у вас проблемы с компиляцией. Вот гайд по сборке llama.cpp на разном железе, включая старые CPU.
2Скачиваем DeepSeek V3.2
Идем на Hugging Face. Модель весит много — готовьте свободное место.
# Вариант 1: через git-lfs (рекомендую)
git lfs install
git clone https://huggingface.co/deepseek-ai/DeepSeek-V3.2
# Вариант 2: через huggingface-hub
pip install huggingface-hub
huggingface-cli download deepseek-ai/DeepSeek-V3.2 --local-dir DeepSeek-V3.2
Если интернет медленный — запаситесь терпением. Или кофе. Или тем и другим.
3Применяем патч к конвертеру
Вот сам патч. Сохраните его как deepseek_v3_2.patch:
--- a/convert.py
+++ b/convert.py
@@ -100,6 +100,10 @@ def parse_args():
parser.add_argument(
"--vocab-only", action="store_true", help="extract only the vocab"
)
+ parser.add_argument(
+ "--skip-sparse-attn", action="store_true",
+ help="skip sparse attention layers (for DeepSeek V3.2)"
+ )
return parser.parse_args()
@@ -200,6 +204,9 @@ class TensorLoader:
return False
if name.endswith(".attention.inner_attention.rope.freqs"):
return False
+ # Skip sparse attention layers if flag is set
+ if args.skip_sparse_attention and "sparse" in name.lower():
+ return False
return True
def load(self) -> Iterator[Tuple[str, torch.Tensor]]:
Применяем:
git apply deepseek_v3_2.patch
Если патч не применяется — значит, convert.py изменился. Придется править вручную. Ищите строки с проверками на sparse attention и комментируйте их.
4Конвертируем в GGUF
Теперь запускаем конвертацию с флагом --skip-sparse-attn:
python convert.py --skip-sparse-attn \
--outfile deepseek-v3.2.gguf \
DeepSeek-V3.2/
Процесс займет время. Много времени. На моем Ryzen 9 5950X с 64 ГБ ОЗУ конвертация 8-битной версии заняла 45 минут.
Не пытайтесь конвертировать в q4_0 сразу. Сначала сделайте fp16, убедитесь, что работает. Потом квантуйте через quantize.
Если видите ошибки типа "KeyError: 'model.layers.0.self_attn.sparse_attention'" — патч применился не полностью. Вернитесь к шагу 3.
5Квантуем и запускаем
Конвертация создала fp16 версию. Она огромная. Для тестов сделайте q4_k_m:
./quantize deepseek-v3.2.gguf deepseek-v3.2-q4_k_m.gguf q4_k_m
Запускаем:
./main -m deepseek-v3.2-q4_k_m.gguf -n 512 -p "Расскажи про квантовую механику"
Если модель загрузилась и начала генерировать текст — поздравляю. Патч сработал.
Что сломается после патча
Sparse attention — не просто оптимизация. Это часть архитектуры модели. Игнорируя эти слои, вы:
- Ухудшаете качество генерации на длинных контекстах
- Меняете «мышление» модели
- Получаете нестабильные результаты
Для тестов и экспериментов это терпимо. Для продакшена — нет. Вообще, даже для серьезных бенчмарков я бы не использовал эту сборку.
Частые ошибки и как их избежать
| Ошибка | Причина | Решение |
|---|---|---|
| "RuntimeError: tensor size mismatch" | Конвертер не смог правильно обработать веса | Проверьте версию PyTorch. Должна быть 2.0+ |
| "Killed" во время конвертации | Не хватает ОЗУ | Уменьшите batch size в convert.py или добавьте swap |
| Модель генерирует бессвязный текст | Sparse attention слои критически важны | Попробуйте другой формат квантования (q8_0) |
Альтернативы: стоит ли игра свеч?
Честно? Если вам нужна стабильная работа — дождитесь официальной поддержки в llama.cpp. Или используйте Llama 3.3 8B, которая работает из коробки.
Патч — для энтузиастов. Для тех, кому нужно попробовать прямо сейчас, невзирая на качество. Для исследований, как модель ведет себя без sparse attention. (Подсказка: плохо ведет.)
Что дальше?
Сообщество llama.cpp рано или поздно добавит поддержку sparse attention. Когда это случится — вы сможете конвертировать DeepSeek V3.2 без костылей. А пока этот патч дает хоть какую-то возможность потестировать модель.
Попробуйте запустить. Посмотрите, как модель генерирует код или объясняет научные концепции. Сравните с той же PLaMo 3 (31B). И напишите в комментариях, стоило ли оно того.
А я пойду смотреть, не замерзла ли конвертация на 97%. Опять.