Поднимаем DeepSeek llm локально. deepseek.. deepseek. deploy.. deepseek. deploy. distillation.. deepseek. deploy. distillation. inference.. deepseek. deploy. distillation. inference. llm.. deepseek. deploy. distillation. inference. llm. unsloth.. deepseek. deploy. distillation. inference. llm. unsloth. искусственный интеллект.. deepseek. deploy. distillation. inference. llm. unsloth. искусственный интеллект. Машинное обучение.

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

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

Что имеем?

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

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

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

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

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

На самом деле, такие размеры тоже достаточно велики. На практике скорее будут использоваться дистилляты, благо их на вкус и цвет. И, кстати, почему-то особо никто не говорит, что 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 в ggml gguf.
ggml – базовая библиотека для llama.cpp – одного из самых эффективных и легких в использовании фреймворка инференса для llm.

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

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

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

  1. DeepSeek-R1-GGUF [huggingface]

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

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

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

  5. 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

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

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

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

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

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

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

Итого

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

Автор: svtDanny

Источник

Rambler's Top100