- BrainTools - https://www.braintools.ru -

Поднимаем DeepSeek llm локально

Все уже слышали про новую модель DeepSeek r1, которая обогнала по бенчмаркам openai. Компания DeepSeek выложила веса и дистилляты в открытый доступ, поэтому мы можем их запустить.

В статье поднимем дистилляты модели r1 используя llama.cpp – потребуются лишь базовые умения работы с bash, docker и python. Самостоятельный запуск проще простого.

Что имеем?

Основная модель, о которой говорят, DeepSeek r1 – 671b Mixture of Experts (37B активаций на forward). Целиком пытаться инференсить такую модель очень затратно.

Если очень хочется r1, но не полную – есть квантизации от unsloth [1].

Квантизации оригинальной R1 от unsloth

Квантизации оригинальной R1 от unsloth

А можно для простых смертных?

На самом деле, такие размеры тоже достаточно велики. На практике скорее будут использоваться дистилляты, благо их на вкус [2] и цвет. И, кстати, почему-то особо никто не говорит, что DeepSeek и их тоже выложила.

Дистилляции R1 от DeepSeek

Дистилляции R1 от DeepSeek

DeepSeek-R1-Distill-Qwen-32B – чуть круче О1-mini, согласно бенчмаркам, так что где-то тут кроется хорошее value-to-quality для многих задач.
7b qwen/8b llama – превосходят по качеству gpt4-o. Для ембеддингов и семантического поиска должно быть достаточно.

Для каждой из этих моделей так же есть квантизации от unsloth.

Чтобы запустить модель, можно использовать фреймворк vllm. Но мы пойдем немного по-другому, развернув полноценный сервер инференса для удобного и интерактивного теста.

Кроме того, что unsloth сделали квантизации моделей, они еще конвертировали формат хранения – huggingface safetensors [3] в ggml gguf [4].
ggml [5] – базовая библиотека для llama.cpp [6] – одного из самых эффективных и легких в использовании фреймворка инференса для llm.

На нем дальше и запустим сервер инференса.

Качаем веса модели

Выбираем нужную модель. Например:

  1. DeepSeek-R1-GGUF [huggingface [1]]

  2. DeepSeek-R1-Distill-Llama-8B-GGUF [huggingface [7]]

  3. DeepSeek-R1-Distill-Qwen-7B-GGUF [huggingface [8]]

  4. DeepSeek-R1-Distill-Qwen-1.5B-GGUF [huggingface [9]]

  5. DeepSeek-R1-Distill-Qwen-32B-GGUF [huggingface [10]]

Устанавливаем 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*"], # качаем веса только нужной модели

)

Обратите внимание [11] на allow_patterns. В одном репозитории может находиться несколько разных моделей (в данном случае – квантизаций одной модели). Потому стоит указывать только те веса, которые вам нужны и не забивать диск остальными.

Нужный паттерн можно определить, зайдя в секцию “Files and Versions”. Там же можно сориентироваться по названию и весу чекпоинта.

Несколько файлов в одной карте модели. Стоит выбрать нужную вариацию модели

Несколько файлов в одной карте модели. Стоит выбрать нужную вариацию модели

Дальше туториал будет с 8B моделью для простоты, но вы можете подставить model_name “unsloth/DeepSeek-R1-GGUF”, если вы тут за оригинальной моделью. Учтите, что веса занимают много места, потому лучше использовать allow_patterns.

Запускаем готовый docker

Что нужно, для запуска:

  1. Linux, видеокарта nvidia

  2. Docker и python на системе

  3. Базовые навыки владения 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

-v /path/to/models:/models – данные в контейнере, скачанные после запуска будут удалены при любом перезапуске (ручном или в случае перезагрузки сервера). Потому веса модели должны находиться непосредственно на машине (а в кластерах лучше кешировать их отдельно)

Готовый докер собран на 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 с промптом. Для замеров памяти [12] и времени исполнения это будет даже удобнее. Но, во-первых, руками склеивать историю общения в общий промт не очень удобно, а, во-вторых, дать попробовать модель обычным людям так сложнее.

У llama-cpp есть базовый UI-интерфес. Он как раз находиться на localhost:8080. Для тестирования моделей супер подходит. Все данные: контекст, диалоги, настройки – сохраняются в локальное хранилище браузера. Так что настройки не потеряются от постоянных тестовых перезапусков.

А как разные модели смогли помочь с различными бытовыми жизненными ситуациями – смотри в посте в моем телеграмме [13].

UI llama.cpp-server. Можно выбрать параметры генерации, устанавливать контекст, управлять диалогами

UI llama.cpp-server. Можно выбрать параметры генерации, устанавливать контекст, управлять диалогами

Итого

DeepSeek R1 крутая модель, превосходящая аналоги openai и доступная в opensource. Благодаря крутому мировому комьюнити уже сейчас имеем кучу квантизаций и дистилляций для разного применения. А с помощью llama.cpp мы можем достаточно быстро и удобно запускать модели для теста.

Автор: svtDanny

Источник [14]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/11808

URLs in this post:

[1] unsloth: https://huggingface.co/unsloth/DeepSeek-R1-GGUF

[2] вкус: http://www.braintools.ru/article/6291

[3] safetensors: https://huggingface.co/docs/safetensors/index

[4] gguf: https://huggingface.co/docs/hub/gguf

[5] ggml: https://github.com/ggerganov/ggml

[6] llama.cpp: https://github.com/ggerganov/llama.cpp

[7] huggingface: https://huggingface.co/unsloth/DeepSeek-R1-Distill-Llama-8B-GGUF

[8] huggingface: https://huggingface.co/unsloth/DeepSeek-R1-Distill-Qwen-7B-GGUF

[9] huggingface: https://huggingface.co/unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF

[10] huggingface: https://huggingface.co/unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF

[11] внимание: http://www.braintools.ru/article/7595

[12] памяти: http://www.braintools.ru/article/4140

[13] в посте в моем телеграмме: https://t.me/deploy_ml/85

[14] Источник: https://habr.com/ru/articles/878836/?utm_source=habrahabr&utm_medium=rss&utm_campaign=878836

www.BrainTools.ru

Рейтинг@Mail.ru
Rambler's Top100