LINUX.ORG.RU

DeepSeek v4 Flash local inference

 ,


1

3

DeepSeek v4 Flash

Это модель фронтирного уровня. С выходом версии от 0731 - стала даже лучше по benchmark, но на мой взгляд, это benchmaxing По крайней мере, русский у этой модели стал хуже.

Что нужно для инференса в домашних условиях?

Видеокарта современная NVidia от 16Гб (с поддержкой mxfp4) Память - чем быстрее, тем лучше, желательно DDR5 от 128Гб Камень какой-нибудь хотя бы ядер на 8

Какого результата можно добиться?

  • Можно комфортно общаться с сетью, задавать вопросы, получать ответы (замена Google если вопрос касается общеизвестных вещей, фактов итд.)

  • Можно добиться неспешного выполнения агентских задач, например, программирование с использованием OpenCode.

Какая скорость ожидается?

Скорость будет зависеть от железа, конечно же, от применения оптимизаций, а так же от квантования модели.

  • Скорость prefill (чтение промпта) - сотни токенов в секунду (200+)
  • Скорость decode (генерация) - более 10 токенов в секунду - неспешно читаешь и успеваешь обдумывать прочитанное, но не ждешь жадно каждого токена.

Мое железо

Не так давно я приобрел desktop именно под нейросети, хотя уже 20+ лет я пользовался ноутбуками и не было желания поставить себе в комнату большую шумную коробку. Но все изменилось.

  • Процессор Ryzen 9950x3d
  • RAM DDR5-5600 192Гб
  • GPU RTX Pro 4000 Blackwell

Мои результаты

В целом за пару месяцев моих попыток завести эту модель я продвинулся от 8ts до 17ts генерации, от 40ts decode до 360. Сейчас получил такие результаты:

  • Неквантованная модель: 11ts генерация (decode) 250ts промптпроцессинг (prefill)
  • iq3xxs квантованная: 14ts генерация (decode) 360ts промптпроцессинг (prefill)

Параметры

"%LLAMA_PATH%\llama-server.exe" ^
    -m "%MODEL_PATH%" ^
    --no-mmap ^
    --no-repack ^
    --device CUDA0 ^
    --main-gpu 0 ^
    --direct-io ^
    --kv-offload ^
    --fit on ^
    --ctx-size 384000 ^
    --cache-type-k q8_0 ^
    --cache-type-v q8_0 ^
    -fa 1 ^
    --mlock ^
    --parallel 1 ^
    --jinja ^
    --chat-template-file "%TEMPLATE_PATH%" ^
    --temp 0.7 ^
    -t 8 ^
    -b 4096 ^
    -ub 4096 ^
    -lv 4 ^
    --host 0.0.0.0 ^
    --port 1234

Как видим, контекст 384000 токенов - это достаточно хороший объем, чтобы комфортно вести разработку, при этом он квантован до q8, что экономит кучу памяти, но наверное немного добавляет забывчивости. Так же подобраны оптимальные параметры -batch -ubatch 4096. Обратите внимание, -t 8 говорит нам о том, что используются всего 8 ядер процессора. Больше нет смысла - потому что все упирается в пропускную способность памяти, сколько ни ставь - прироста скорости не будет, а может быть даже наоборот. Так что экономим электроэнергию, именно она составляет основную стоимость домашнего инференса.

Экономика

Мне лень подключать компьютер через ваттметр в данный момент, хотя если будет запрос - я это сделаю. В моем компьютере стоит блок питания на 1.2КВт, при этом он взят с запасом под несколько видеокарт. Допустим, при инференсе компьютер потребляет 700Вт, на основе этого можно понять, сколько стоит инференс. Стоимость обычно указывается за 1млн токенов. Возьмем за основу данные - 9ts в среднем (к концу контекста скорость обычно падает) decode - 200ts. Электричество возьмем по 5 ₽ (хотя у меня 3.50 ₽). Расчет такой: считаем, сколько часов нужно, чтобы сгенерировать 1млн токенов и умножаем на стоимость электричества, которое потребит компьютер мощностью 0.7КВт.

  • Стоимость входных токенов : 1 000 000 / (3600 * 200) * 5 * 0.7 = 4.86 ₽
  • Стоимость выходных токенов : 1 000 000 / (3600 * 9) * 5 * 0.7 = 108.02 ₽
  • Стоимость кэша : в подарок (сложно посчитать)

Что предлагают провайдеры? Например, я сейчас пользуюсь одним провайдером, цены:

  • Стоимость входных токенов : 55,75 ₽
  • Стоимость выходных токенов : 167,24 ₽
  • Стоимость кэша : 1,77 ₽

Как видим, получилось даже дешевле!

Но есть еще дополнительная цена - это наличие железа и терпения в ожидании решения задачи. Считаем, что хороший компьютер у вас уже есть. А терпение - это плата за контроль. Здесь вас не отключат, и тем более никто не украдет ваши наработки (да кому они нужны?) Или, постойте… Сейчас идет охота за данными - нейросетевые гиганты скупают книги тоннами и сканируют их, только чтобы накормить свои ненасытные нейросети данными, которых уже сейчас катастрофически не хватает для обучения нейросетей (скормили все, что плохо лежало). Поэтому я не удивлюсь, если провайдеры действительно собирают ваши сессии, а затем продают их в качестве датасетов для обучения нейросетей. Так что куски кода вашего секретного суперпроекта рискуют уже завтра появится в агентской сессии ваших конкурентов.

Как добиться лучших результатов по скорости?

  1. Конечно же, купить несколько видеокарт последнего (Blackwell), пред-последнего (Ada), пред-пред-последнего поколений (Ampere), чтобы поднять VRAM до 128-192 Гб.

  2. Собрать комп на многоканальной памяти - 4, 8, 12… Пусть даже на DDR4. Например, если взять EPYC с памятью на 8 каналов, получаем пропускную способность 200Гб/с - а это уже сравнимо с Ryzen AI, где пропускная способность в районе 250Гб/с!

Предлагаю делиться своими результатами. Быть может вместе мы сможем придумать, как лучше задействовать потенциал нашего железа.



Последнее исправление: EvilSpirit (всего исправлений: 6)
Ответ на: комментарий от gagarin0

на моей конфигурации, при заполненности контекста на 400к, получаю около 15 t/s decode, 180 t/s prefill

Установил сабж вместо оффтопа, получил 12tg 400pp, то есть стало слегка быстрее.

EvilSpirit
() автор топика
Ответ на: комментарий от EvilSpirit

хорошо, теперь напомните вашу конфигурацию (VRAM, RAM, CPU и то как запускаете Deepseek V4)

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 1)
Ответ на: комментарий от EvilSpirit
  1. я настоятельно рекомендую запускать llama-cpp в докер контейнерах.

  2. перейдите на deepseek v4 flash exp (по бенчмаркам он лучше чем 0731, переделывать ничего не надо, только выкачать модель и указать ее в llama-cpp)

  3. попробуйте https://github.com/spiritbuun/buun-llama-cpp (если выполните п.1 то можно будет просто поменять образ, и вынести MoE на CPU)

gagarin0
()
Ответ на: комментарий от gagarin0

я настоятельно рекомендую запускать llama-cpp в докер контейнерах.

попробуйте https://github.com/spiritbuun/buun-llama-cpp (если выполните п.1 то можно будет просто поменять образ, и вынести MoE на CPU)

Что это даст? Говорят, вынос Moe, якобы, ускоряет. Но это как-то странно…

Кстати, постестил Qwen Flash - генерит быстрее (20-24) кушает промпт медленнее (200) Пока в реальных условиях не тестировал, но то, что видел - вроде хорошо

EvilSpirit
() автор топика
Ответ на: комментарий от gagarin0

впрочем я вашу позицию понял, желаю удачи.

А какая у меня позиция? Спросил, что даст запуск в докере и что дает moe на цпу, вдруг вы знаете почему и отчего так. Просто я не могу же все рандомные пожелания всех обитателей интернета имплементировать, не зная, что я получу. Теперь я знаю, что 15 процентов. Видимо вы с кем-то тут поругались и принимаете меня не за того человека. Я с вами не ругался.

EvilSpirit
() автор топика
Ответ на: комментарий от EvilSpirit

я предполагал что вы умеете или имеете желание по ключевым словам проводить самостоятельную «работу», не более того, что-либо продавать вам и разжевывать в теме «искусственный интеллект» у меня внезапно желание пропало.

gagarin0
()
Ответ на: комментарий от gagarin0

я предполагал что вы умеете или имеете желание по ключевым словам проводить самостоятельную «работу»

Вы в курсе, что вы срываетесь на мне? У вас проблемы какие-то в жизни? Я блин на этот вынос Moe потратил охренть сколько времени, конечно не собирал этот бранч еще, как вы не понимаете, я могу очень многое в этой жизни, о чем вы даже никогда не думали. Вы даже не представляете, сколько я всего умею и имею желание делать, но у меня банально нет столько времени. Банальный вопрос вызывал у вас волну неадекватной агрессии с переходом на личности, что случилось, нормально же общались? Может вы как-то не так прочитали мое сообщение? Может нашли в нем грубость? «Что это даст?» - может грубовато. Но дальше в тексте идет сомнительное смягчение, в том, что я сомневаюсь, и не понимаю логики того, как это работает. Я решительно не понимаю вашей агрессивной позиции и причин, которые ее вызвали. Проспитесь.

EvilSpirit
() автор топика
Последнее исправление: EvilSpirit (всего исправлений: 1)
Ответ на: комментарий от EvilSpirit

но у меня банально нет столько времени

для этого как раз придумали ИИ

Вы в курсе, что вы срываетесь на мне? У вас проблемы какие-то в жизни?

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

gagarin0
()
Ответ на: комментарий от gagarin0

они есть, да и им нужно меньше памяти, чем 44 ГБ

искал еще что-то уровнем выше, иначе можно только 2 видеокарты на 32 гб юзать для квенов

ЗЫ 51 ГБ нграма (которые чуть ли не даже на ссд обещали, что можно) уже включены в размеры по линку?

baja
()
Последнее исправление: baja (всего исправлений: 2)
Ответ на: комментарий от baja

в теории да, можно использовать SSD streaming, я сам не пробовал, но у форков llama-cpp есть такая возможность, скорость у дипсика будут удручающая с контекстом 64k-128k, может быть что-то получится с квантом IQ3_XSS…

  • какой Gen у PCIe ?

  • какая память RAM, в сколько каналов работает?

  • какой процессор? ему нужно будет сделать overcloking

если получится выжать 10 t/s decode, 100 t/s prefill, это будет условная победа, но уверенности в этом нет

Самый простой способ попробовать - подключить у себя агента с облачной моделью и дать ей задачу поставить в докере нужный форк llama-cpp чтобы он настроил под конкретное железо, это самый эффективный способ.

51GB VRAM

все же лучше настроить у себя идеально qwen3.8-27b с 256к контекстом

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 5)
Ответ на: комментарий от baja

Возьмите IQ3_XXS квант от модели deepseek v4 vision exp (она получше, размер тот же), квант примерно весит 96GiB, возьмите https://github.com/spiritbuun/buun-llama-cpp соберите его в докере (он есть в репозитории)

Далее, подключите к любому агенту на этой машине облачную модель с возможностью web-поиска (я использую чат гопоту 5.6), и дайте ей задание развернуть у вас deepseek v4 vision exp и дайте ей ссылку на документацию (buun-llama-cpp), в промпте укажите чтобы использовался llama-fit для определения лучшей конфигурации сколько MoE выкружать на RAM/CPU и заполненности VRAM, укажите для начала желаемый контекст 64к, после каждого запуска модели, пусть прогоняются тесты и лучший результат будет вашей рабочей конфигурации, на все про все, уйдет около 3-4 часов.

для понимание примерной конфигурации для моего железа, конфиг такой (применять у себя его не стоит, он именно под мою конфигурацию):

NAME="${NAME:-deepseek-exp-v4-flash-q4-k-xl}"
PORT="${PORT:-8087}"
IMAGE="${IMAGE:-llama-cpp:buun-cuda12-sm89}"
MODEL="${MODEL:-/models/DeepSeek-V4-Flash-Vision-Exp/UD-Q4_K_XL/DeepSeek-V4-Flash-Vision-Exp-UD-Q4_K_XL-00001-of-00005.gguf}"
MODEL_HOST_ROOT="${MODEL_HOST_ROOT:-/var/lib/llama-cpp/models}"
API_KEY="${API_KEY:-}"
REASONING_EFFORT="${REASONING_EFFORT:-max}"

CTX="${CTX:-524288}"
N_PREDICT="${N_PREDICT:-8192}"

case "$REASONING_EFFORT" in
  low|high|max) ;;
  *)
    echo "REASONING_EFFORT must be low, high, or max" >&2
    exit 2
    ;;
esac

# One -ot argument only.
#
# blk.32 is intentionally omitted from CPU expert overrides,
# therefore routed experts of blk.32 remain fully resident on CUDA1.
OT='blk\.13\.ffn_(gate|up|gate_up|down).*=CUDA1,blk\.25\.ffn_(gate|up|gate_up|down).*=CPU,blk\.10\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.11\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.12\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.23\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.24\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.26\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.27\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.28\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.29\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.30\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.31\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.33\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.34\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.35\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.36\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.37\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.38\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.39\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.40\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.41\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU,blk\.42\.ffn_(up|down|gate_up|gate)_(ch|)exps=CPU'

# Fail early if model shard does not exist.
HOST_MODEL="${MODEL/#\/models/$MODEL_HOST_ROOT}"

CHAT_TEMPLATE_KWARGS="$(printf '{"reasoning_effort":"%s"}' "$REASONING_EFFORT")"

SERVER_ARGS=(
  --model "$MODEL"
  --alias deepseek-v4-flash

  --host 0.0.0.0
  --port 8080

  # Context
  --ctx-size "$CTX"
  --n-predict "$N_PREDICT"
  --parallel 1

  # GPU placement
  --device CUDA0,CUDA1
  --split-mode layer
  --n-gpu-layers 44
  --tensor-split 15,29
  --fit off
  -ot "$OT"

  # Dynamic MoE cache
  --moe-cache on
  --moe-cache-expert-parallel 0
  
  #--ctx-checkpoints 16
  #--checkpoint-min-step 4096

  # Attention / KV
  --flash-attn on
  --kv-offload
  --cache-type-k q4_0
  --cache-type-v q4_0

  # Prefill
  --batch-size 4096
  --ubatch-size 2048

  # Model loading
  --no-mmap

  # CPU / NUMA
  --threads 14
  --threads-batch 18
  --numa isolate
  --prio 2
  --poll 100
  --poll-batch 1

  # Prompt cache
  --cache-prompt

  # DeepSeek-V4 reasoning
  --jinja
  --reasoning on
  --reasoning-format deepseek
  --reasoning-budget -1
  --chat-template-kwargs "$CHAT_TEMPLATE_KWARGS"

  # Official DeepSeek agentic sampling
  --temp 1.0
  --top-p 0.95

  # Disable extra llama.cpp sampling restrictions.
  --top-k 0
  --min-p 0.0
  --top-nsigma -1.0
  --typical-p 1.0

  --xtc-probability 0.0
  --dynatemp-range 0.0
  --mirostat 0
  --dry-multiplier 0.0

  --repeat-penalty 1.0
  --presence-penalty 0.0
  --frequency-penalty 0.0

  # 512k prompt eval may take a long time.
  --timeout 7200

  # Diagnostics
  --metrics
  --verbosity 3
)

if [[ -n "$API_KEY" ]]; then
  SERVER_ARGS+=(--api-key "$API_KEY")
fi


docker rm -f "$NAME" >/dev/null 2>&1 || true

docker run -d \
  --init \
  --name "$NAME" \
  --restart unless-stopped \
  --gpus all \
  --cap-add=SYS_NICE \
  --privileged \
  --cpuset-cpus="0-17,36-53" \
  --cpuset-mems="0" \
  -p "${PORT}:8080" \
  -v "${MODEL_HOST_ROOT}:/models:ro" \
  \
  -e TZ=Europe/Amsterdam \
  -e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
  \
  -e CUDA_SCALE_LAUNCH_QUEUES=2x \
  \
  -e GGML_CUDA_MOE_CACHE_RESERVE_MB=640 \
  -e GGML_CUDA_MOE_CACHE_STATS=64 \
  -e GGML_CUDA_MOE_CACHE_INSERTS=32 \
  -e GGML_CUDA_MOE_CACHE_ADMIT_AFTER=2 \
  -e GGML_CUDA_MOE_CACHE_THROTTLE=32 \
  \
  "$IMAGE" \
  "${SERVER_ARGS[@]}"

P.S. так же нужно не забыть перед началом работы облачной модели, дайте ей задание изучить вашу конфигурацию, numa-topology и прочего, например у меня две видео карты висят на numa0, а на numa1 ничего, такие нюансы важны, чтобы оптимизировать модель под ваш конфиг.

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 2)
Ответ на: комментарий от gagarin0

для этого как раз придумали ИИ

Вы серьезно? Вы от компа отходите хоть иногда? Как бы есть же проблемы и задачи, которые ИИ пока что нас не заменил, и слава богу.

EvilSpirit
() автор топика
Ответ на: комментарий от gagarin0

какой процессор? ему нужно будет сделать overcloking

для Memory-bound задачи вам не нужно даже много ядер, не то что потоков. Разгонять надо память, уменьшать тайминги, но толку от этого. Берите многоканальную память, пусть даже DDR4.

EvilSpirit
() автор топика
Ответ на: комментарий от baja

9950x, 96gb 6400 ddr5 2ch, pcie 5 x8, pcie 4 x4 *2

Любая видеокарта на 16Гб и вы запустите квантованную версию. Тоже хотел сначала взять 96Гб, потом одумался и взял еще 96. Не забудьте поставить 8 потоков, толку от многопоточности здесь не будет - ваши ядра будут ждать память.

EvilSpirit
() автор топика
Ответ на: комментарий от gagarin0

то лучше ищите другую модель, qwen3.8-27b, qwen3.6-35-a3b

У меня с ними никак не срослось. Нормально входит только квант q4, а он немного глуповат. moe шный очень быстрый, но за ним нужен глаз да глаз. Лучше зарядить нормальную модель, которая пусть неспешно, но грамотно работает. Тем более что 27b вовсе не скоростная модель, новый qwen flash с драфтером неплохо шпарит на 20-25тс, что сравнимо с 27b (что-то около 40)

EvilSpirit
() автор топика
Последнее исправление: EvilSpirit (всего исправлений: 1)
Ответ на: комментарий от EvilSpirit

Вы серьезно? Вы от компа отходите хоть иногда?

конечно отхожу, для этого и был создан ИИ, дал задачу и 3 часа свободен.

для Memory-bound задачи вам не нужно даже много ядер

4.2

overclocking CPU дал мне +10% к prompt eval или к decode, уже не помню

Берите многоканальную память,

в моей конфигурации она четырехканальная, REG ECC DDR4, 4 x 32GB

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 3)
Ответ на: комментарий от gagarin0

overclocking CPU дал мне +10% к prompt eval или к decode, уже не помню

Это капля в море, как и те 15% от выгрузки moe на CPU. Нужно принципиально другое решение, которое использует ресурс видеокарт, а не загружает процессор. Я тоже так-то могу разогнать свою память, подкрутив тайминиги, но это все равно мелочь.

EvilSpirit
() автор топика
Последнее исправление: EvilSpirit (всего исправлений: 2)
Ответ на: комментарий от EvilSpirit

Нужно принципиально другое решение

Вот вы «рука-лицо» перед зеркалом делайте. А я не могу добиться, чтобы на двух видеокартах он работал быстрее, чем на одной, и у многих так. Посмотрите видео на запрещенном ресурсе, там у чувака 4x3090 и 20tg

EvilSpirit
() автор топика
Последнее исправление: EvilSpirit (всего исправлений: 1)
Ответ на: комментарий от EvilSpirit

я вам дал все ключевые слова, при помощи которых у меня получилось увеличить decode/prefill.

. Вы даже не представляете, сколько я всего умею и имею желание делать

дайте облачной LLM задание собрать в докере llama-cpp отсюда https://github.com/noonghunna/club-3090 (в том числе там уже есть из коробки MoE), запустить в разных конфигурациях.

у меня вчера получилось запустить GLM-5.3-flash IQ3_XXS при помощи этого подхода 14 t/s, 280 prefill, 512k context

gagarin0
()
Ответ на: комментарий от gagarin0

у меня вчера получилось запустить GLM-5.3-flash IQ3_XXS при помощи этого подхода

14 t/s, 280 prefill, 512k context

Я только вчера скачал GLM-5.3. Пока руки до него не доходят, работа, стройка, ребенок, еще механические проекты в голову лезут. Правда, пока что настроение плюнуть до тех пор, пока не куплю себе что-то типа 3-4xcmp170 или 8v100 или еще какого-нибудь зверя придумают. Пока не лезет в VRAM и нехрен выделываться. Я понял, что 20tg и 500pp это вот прям можно работать на безрыбье, для своих проектов, но хочется 50tg и 5000pp хотя бы в 4 потока - если работать профессионально и эффективно.

https://github.com/allover326/deepseek-v4-cmp170hx
https://github.com/1CatAI/1Cat-vLLM

«Кто знает - тот поймет»

EvilSpirit
() автор топика
Последнее исправление: EvilSpirit (всего исправлений: 2)
Ответ на: комментарий от gagarin0

https://github.com/noonghunna/club-3090

К тому же у вас там клуб по интересам, а у меня RTX4000 Blackwell + cmp50hx 20Гб и еще P100 16Гб. Мне все эти штуки не помогут скорее всего. У меня в две карты не работает быстрее, только энергию жрет, один Blackwell 24гб уделывает любое потому что mxfp4 в коробке. Правда, не обессутьте. Если бы я был энтузиаст - я бы плакал по каждым 10-15%, что я могу получить. Но я профессионал, я понял, что я не хочу воевать за каждый токен, я хочу нормально свободно работать и быть конкурентным на рынке за счет того, что не буду сидеть судорожно обновляя счет за токены, чтобы случайно не слить лимиты или не выйти в минус. Мне на работе токены не дают бесплатно. Так-то.

EvilSpirit
() автор топика
Последнее исправление: EvilSpirit (всего исправлений: 2)
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария