Все уже слышали про новую модель DeepSeek r1, которая обогнала по бенчмаркам openai. Компания DeepSeek выложила веса и дистилляты в открытый доступ, поэтому мы можем их запустить.
В статье поднимем дистилляты модели r1 используя llama.cpp - потребуются лишь базовые умения работы с bash, docker и python. Самостоятельный запуск проще простого.
Что имеем?
Основная модель, о которой говорят, DeepSeek r1 - 671b Mixture of Experts (37B активаций на forward). Целиком пытаться инференсить такую модель очень затратно.
Если очень хочется r1, но не полную - есть квантизации от unsloth.
А можно для простых смертных?
На самом деле, такие размеры тоже достаточно велики. На практике скорее будут использоваться дистилляты, благо их на вкус и цвет. И, кстати, почему-то особо никто не говорит, что DeepSeek и их тоже выложила.
DeepSeek-R1-Distill-Qwen-32B - чуть круче О1-mini, согласно бенчмаркам, так что где-то тут кроется хорошее value-to-quality для многих задач.
7b qwen/8b llama - превосходят по качеству gpt4-o. Для ембеддингов и семантического поиска должно быть достаточно.
* Бенчмарки опубликованы вместе с моделью в карточке на huggingface. Делайте замеры самостоятельно на ваших бенчмарках, в случае сомнений.
Для каждой из этих моделей так же есть квантизации от unsloth.
Чтобы запустить модель, можно использовать фреймворк vllm. Но мы пойдем немного по-другому, развернув полноценный сервер инференса для удобного и интерактивного теста.
Кроме того, что unsloth сделали квантизации моделей, они еще конвертировали формат хранения - huggingface safetensors в ggml gguf.
ggml - базовая библиотека для llama.cpp - одного из самых эффективных и легких в использовании фреймворка инференса для llm.
На нем дальше и запустим сервер инференса.
Качаем веса модели
Выбираем нужную модель. Например:
DeepSeek-R1-GGUF [huggingface]
DeepSeek-R1-Distill-Llama-8B-GGUF [huggingface]
DeepSeek-R1-Distill-Qwen-7B-GGUF [huggingface]
DeepSeek-R1-Distill-Qwen-1.5B-GGUF [huggingface]
DeepSeek-R1-Distill-Qwen-32B-GGUF [huggingface]
Устанавливаем hf_transfer для быстрой загрузки
pip install huggingface_hub hf_transfer
Запускаем скрипт на python для скачивания весов.
import os
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
from huggingface_hub import snapshot_download
hf_repo = “unsloth“
model_name = “DeepSeek-R1-Distill-Llama-8B-GGUF”
snapshot_download(
repo_id = f"{hf_repo}/{model_name}",
local_dir = f"/home/jovyan/sivtsov/inference/{hf_repo}-{model_name}",
allow_patterns = ["*8B-F16*"], # качаем веса только нужной модели
)
Обратите внимание на allow_patterns. В одном репозитории может находиться несколько разных моделей (в данном случае - квантизаций одной модели). Потому стоит указывать только те веса, которые вам нужны и не забивать диск остальными.
Нужный паттерн можно определить, зайдя в секцию “Files and Versions”. Там же можно сориентироваться по названию и весу чекпоинта.
Дальше туториал будет с 8B моделью для простоты, но вы можете подставить model_name “unsloth/DeepSeek-R1-GGUF”, если вы тут за оригинальной моделью. Учтите, что веса занимают много места, потому лучше использовать allow_patterns.
Запускаем готовый docker
Что нужно, для запуска:
Linux, видеокарта nvidia
Docker и python на системе
Базовые навыки владения bash и python
Можно запустить готовый докер с серверомdocker run -p 8080:8080 -v /path/to/models:/models --gpus all ghcr.io/ggerganov/llama.cpp:server-cuda -m /models/model_name.gguf --host 0.0.0.0 --port 8080 --n-gpu-layers 20
-v /path/to/models:/models
- данные в контейнере, скачанные после запуска будут удалены при любом перезапуске (ручном или в случае перезагрузки сервера). Потому веса модели должны находиться непосредственно на машине (а в кластерах лучше кешировать их отдельно).
--n-gpu-layers
- сколько слоев загружать на видеокарту. Если в nvidia-smi много свободной памяти - повысьте параметр. Если запуск падает по out of memory - снижайте, пока не влезет (в логах отображается, сколько памяти пытался аллоцировать движок).
Готовый докер собран на cuda=12.6. Если у вас версия меньше, придется обновить cuda-toolkit или собрать образ самостоятельно.
Сборка докера под нужную CUDA
Для самостоятельной сборки образа под определенную cuda (для примера, 12.4.0):git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
docker build -t local/llama.cpp:server-cuda --build-arg CUDA_VERSION=12.4.0 --target server -f .devops/cuda.Dockerfile .
UI Интерфейс
Можно запускать руками скрипт llama.cpp с промптом. Для замеров памяти и времени исполнения это будет даже удобнее. Но, во-первых, руками склеивать историю общения в общий промт не очень удобно, а, во-вторых, дать попробовать модель обычным людям так сложнее.
У llama-cpp есть базовый UI-интерфес. Он как раз находиться на localhost:8080
. Для тестирования моделей супер подходит. Все данные: контекст, диалоги, настройки - сохраняются в локальное хранилище браузера. Так что настройки не потеряются от постоянных тестовых перезапусков.
А как разные модели смогли помочь с различными бытовыми жизненными ситуациями, написал тут.
Итого
DeepSeek R1 крутая модель, превосходящая аналоги openai и доступная в opensource. Благодаря крутому мировому комьюнити уже сейчас имеем кучу квантизаций и дистилляций для разного применения. А с помощью llama.cpp мы можем достаточно быстро и удобно запускать модели для теста.
Комментарии (12)
AlexB17
03.02.2025 08:20LM Studio и винда вполне достаточны что бы пощупать, запускал довольно большие но квантованные модели Qwen 14B Q4_K на 3060ti 8Gb и Qwen 32B Q6 на 4080 16Gb - довольно медленно но работают.
svtDanny Автор
03.02.2025 08:20Да, согласен, хороший вариант. Особенно, если основная рабочая машина на винде
С llama.cpp мне нравится вариант потому, что образ можно развернуть на сервере и ребята с команды смогут с ним взаимодействовать. Хоть через UI для быстрого теста, хоть через openai-compatible api с микросервиса
Ну и потом этот же llama.cpp в проде развернуть на железе мощнее
orphaniel
03.02.2025 08:20На Винде можно воспользоваться CoboldCPP - удобно, с гуём и веб-интерфейсом. Кстати, на том же huggingface есть расцензуренные дистиллы дипсика с пометкой "ablated" (например, deepseek-r1-qwen-2.5-32B-ablated-Q6_K_L), их гонять поинтереснее, чем стоковые дистиллы :)
svtDanny Автор
03.02.2025 08:20Да, согласен. Если нужно просто пользоваться моделью самому - приложение точно удобнее. Тем более под винду
Про расцензуренные модели - спасибо, читателям будет полезно)
Хотя, если модель разворачивать для компании, возможно, цензура не помешает)
gfiopl8
03.02.2025 08:20DeepSeek-R1-Distill-Qwen-32B - чуть круче О1-mini, согласно бенчмаркам, так что где-то тут кроется хорошее value-to-quality для многих задач. 7b qwen/8b llama - превосходят по качеству gpt4-o. Для ембеддингов и семантического поиска должно быть достаточно.
Вообще не читаете что вам робот пишет? В какой вселенной 7b qwen/8b llama может хотя бы на километр приблизится к gpt4-o?
ENick
"Что нужно, для запуска:
Linux, видеокарта nvidia
" а на какой карте запускали с CUDA_VERSION=12.4.0 ?
svtDanny Автор
nvidia 2080 12Gb
llama.cpp умеет в офлоадинг на RAM, нужно подобрать значение --n-gpu-layers при запуске докера.
Для 32b модели генерит слишком медленно, для 7-8b вполне норм
ENick
"для 7-8b вполне норм" а это примерно сколько токенов/сек?
svtDanny Автор
2080 Ti 12gb для простенького запроса. --n-gpu-layers 20
DeepSeek-R1-Distill-Qwen-7B-F16
prompt eval time = 232.39 ms/24 tokens (9.68 ms per token, 103.28 tokens per second)
eval time = 143668.70 ms/1246 tokens (115.30 ms per token, 8.67 tokens per second)
total time = 143901.08 ms/1270 tokens
Обратите внимание, что эти цифры будут меняться от размера промпта.
"вполне норм" - вполне норм, чтобы протестировать качество модели, имея под рукой +- любую не слишком старую видеокарту. Речь в туториале не идет об инференсе под нагрузкой