У E5-2666v3 память 4х канал ddr4 2133мгц - значит скорость около 50гб/с, скорее всего такой скорости не хватает, чтобы загрузить все ядра. Плюс у вас часть слоев вынесена на видеокарту, судя по загрузке, попробуйте отключить оффлоад на gpu и процессор скорее всего будет полностью загружен.
И, кстати, ktransformers теперь поддерживает DeepSeek 671B V3 и R1. Ускорение на одной 4090 у них вышло в 3 раза, с 4.5 t/s до 13.6 t/s. Использовалось 14гб видеопамяти и 382гб озу для кванта Q4_K_M. Если два процессора, то проблему с numa они временно решили дублированием памяти на оба процессора, обещали потом оптимизировать. Их способ ускорения работает только для MoE моделей, R1-Distill не подойдут.
Второе везде работает автоматически сразу через mmap. Для первого нужно взять сборку с поддержкой видеокарт и там это будет работать автоматически.
gguf файлы внутри организованы так, что их структура совпадает со структурой памяти, когда модель загружена в память, и когда через mmap происходит маппинг файла на память, то в llama.cpp всё работает автоматически через механизмы ОС. Отключить mmap можно через --no-mmap. При загрузке будет указано сколько слоев выгружено на GPU, например, 0, и сколько памяти ушло на промежуточные вычисления и загрузилось ли это на GPU.
Есть нюанс, под виндой mmap работает, но в моем случае почему-то залезает в своп, из-за этого скорость падает до 0.25 t/s. Под линуксом всё работает намного быстрее.
Например, нужно выбрать llama.cpp собранную с поддержкой видеокарт, среди множества версий выбрать нужную:
Если видеокарта amd - то win-hip версии gfx для нужной версии видеокарты. И так как скорее всего никто не разбирается в версиях gfx, то стоит просто попробовать по очереди все варианты. Или версию gfx можно узнать тут на вкладке AMD Radeon GPUs.
Если nvidia, то скачать нужно и cuda сборку и отдельно cudart, который нужно разархивировать в туже папку со сборкой. Для старых карточек версию cu11.7, для новых cu12.4.
Vulkan версия универсальна и работает с любыми видеокартами, хоть amd, хоть nvidia, хоть intel, и даже в паре amd + intel - поэтому если не заводится со специализированным вариантом, можно взять вулкан.
Если скачать avx сборку, то всё будет считаться на cpu.
Запускается это через llama-server, GUI которого потом открывается в браузере, команда для запуска:
Тут --cache-type-k q4_0 квантование kv-кэша для уменьшения его размера, можно отключить, если текст получается несвязный.
Если остается лишняя видеопамять, то можно выгрузить часть слоев на GPU через -ngl N - количество слоев нужно подбирать по количеству видеопамяти. Если 2 и больше видеокарт, то можно распределить загрузку памяти через -ts xx,yy, либо это будет сделано автоматически. --ctx-size 4096 - уменьшить размер контекста до 4к, чем больше контекст, тем больше памяти потребуется:
По тому же адресу, который будет указан у llama-server, если добавить в конце /v1/, то это будет адрес с openai completions api, который можно вводить в любом удобном клиенте или в плагинах, используя вместо chatgpt. Должно получиться вот так: http://127.0.0.1:8080/v1/
В настройках можно указать, чтобы модель явно мыслила на русском языке, иначе она может переключаться на другие языки. min_p нужно установить в 0.05, иначе будет повтор токенов, что снизит качество вывода, температуру в 0.5 для того, чтобы модель меньше фантазировала:
Эти настройки работают и для R1-Distill моделей. Так как в llama-server уже есть поддержка мыслительных тегов, то R1-Distill будут тоже работать, например:
Родной на 137b и другие размерности вы не найдете, но откройте lm studio - они там есть. Эти модели сделаны пользователями из "большой оригинальной". Смысл верить этому такой - переквантизация не требует таких громадных ресурсов как обучение
Квантование не изменяет размерность модели, а у lm studio нет скрытого хаба моделей, они качают модели с hf, там у каждой модели есть ссылка на huggingface, где можно посмотреть, что это за модель такая.
Есть еще версии DS на 200 с лишним параметров. Кто лучше и качественней - вопрос открытый.
Скорее всего вы про предыдущую DeepSeek v2.5, она на 236B.
ну и кому бы понадобилось "апскейлить" официальную 70b (которая не дипсик) только ради того, чтобы раздуть размеры?
И эти квантизованные модели люди запускают, и оно работает по отзывам(я сам скоро смогу запустить, уже заказана озу и едет).
Если вы всё таки про UD квантованную версию, то это работает даже запускаясь с nvme, нужно только 20гб ОЗУ для подгрузи активных параметров. И если есть любая видеокарта хотя бы на 6гб (для интела запуск через vulkan, для amd - rocm или vulkan, для nvidia - cuda, все эти версии уже есть собранные в llama.cpp), то туда можно вынести расчеты kv кэша, получая не плохое ускорение. В итоге можно получить от 0.5 t/s до 1 t/s просто запускаясь с nvme.
Вот я запустил UD оригинальной R1 на обычном домашнем ПК с 64гб ddr4 памятью (скорость 50гб/с), модель не влезает в память целиком, поэтому постоянно подгружается с nvme pcie 3.0, kv-кеш вынесен на gpu.
Но даже так, с бесконечной загрузкой с nvme, на обычном домашнем ПК, скорость получилась 0.75 t/s.
DeepSeek R1 671B UD-IQ1_S запущенный на домашнем ПК
То есть, если модель целиком влезет в память, например, китайская ddr5 192гб сейчас стоит не так дорого, в двухканале там будут скорости 80+ гб/с, в 192гб влезет даже квант получше и скорость вывода модели будет 2.5 t/s, если проц вывезет. Минимально комфортная скорость это 5 t/s, так что половину от этого уже можно получить дома.
И в чём тогда прикол выключать HT? Отдельный вопрос почему оно не параллелится на все N.
HT не добавляет физических ядер, а лишь позволяет использовать не занятые сейчас другой задачей блоки. Ускорение только за счет пред загрузки данных в свободные блоки пока ядро считает, например, AVX-блоки, но количество тактов не меняется, так как физическое ядро одно и тоже.
Инференс это задача для AVX блоков, поэтому другие блоки свободны для фотоной работы винды и браузера - но так как количество тактов не меняется, то для задачи инференса производительность не вырастет, а просядет, ведь такты ядра будут заняты другой работой. Поэтому с включенным HT загрузка 50% это и есть настоящая загрузка всего 100% процессора.
И загрузка будет показываться 60%, что воспринимается как +10% производительности, а на деле для инференса получится -5% производительности. Еще для однородной задачи, так как задача не раскладывается на логические потоки, не эффективно создаются очереди в конвейерах, и постоянное переключение может создать тормоза.
И тут даже в теории не получить +50% производительности, количество тактов не меняется, и даже если будет написано 100% загрузки, что создает ощущение +50% производительности, то это на деле будет просто i/o wait. Сейчас интел вовсе отказался от HT в новом поколении процессоров, сказав что настоящие энергоэффективные ядра лучше, а AMD оставляет SMT, так как в некоторых бенчмарках там получается +18% прирост.
Поэтому стандартный совет отключить HT и проверить ваш сценарий.
Попробуйте запустить с ключом --numa distribute. Еще попробуйте добавить -nkvo И можете перейти на Q4_K_S, сэкономит почти в 2 раза памяти, а качество при этом просядет незаметно.
Не знаю скажется ли это в вашем случае на скорость, так как у вас модель влезает в память и так, но можно еще попробовать взять экспериментальный динамический низкий квант. Качество UD-IQ1 сильно лучшем, чем просто IQ1, потому что UD-IQ1 сохраняет важные веса внимания на уровне Q4_K_M, а все остальные уже квантует через матрицу важности до IQ1, в итоге получается не плохой гибрид по качеству.
Динамические UD кванты запускают даже просто с nvme на скоростях от 0.5 t/s до 1 t/s. Но правда такие скорости только под линуксом.
Еще сейчас идет работа по добавлению в ktransformers возможности для архитектуры V3 выгружать активные веса на GPU, и так как активных весов всего 37B из 671B, то это в теории может ускорить вывод с помощью одной GPU сильнее, чем как сейчас это работает в llama.cpp. Следить за этим можно тут.
росту на 5 процентных пунктов Qwen2.5-Coder-7B-Ins, сравняв ее по качеству с гораздо более крупной DeepSeek-V2.5 (236B параметров). Ещё раз: модель в 7 миллиардов параметров стала выдавать качество модели в 236 миллиардов, в 33 раза большей
Звучит так, словно она и без этих 5 процентов выдавала качество на том же уровне.
Веса модели в fp8, немного bf16 это веса нормализации, а в fp32 веса weight_scale_inv, которые нужны для деквантования из fp8 по формуле (128x128 weight block) * weight_scale_inv.
И в низкий квант не верю. Поэтому запускать R1 не буду.
В обычный низкий квант да, но есть динамический низкий квант.
Обычный низкий квант, вроде IQ1_M, это почти все веса, включая веса Внимания и Feed-Forward Network, часть необходимая для работы Внимания, почти все они в очень низком кванте. Именно это снижает возможности модели "мыслить" и рассуждать, в итоге в ответ получается очень не качественные ответы, так как затронута главная часть трансформера. Вот так выглядят веса обычного экстремально низкого кванта:
пример очень низкого кванта DeepSeek-R1-Distill-Llama-70B-IQ1_M
пример динамического квантования DeepSeek-R1-UD-IQ1_S
Остальные веса в экстремально низком кванте IQ1 и IQ2, но это в основном только нисходящие и восходящие веса ffn не главных экспертов, а также веса переходов между экспертами, что не так фатально сказывается на возможности модели рассуждать и "мыслить". При этом эти же веса главного эксперта (в MoE множество экспертов, но в моменте активны только часть из них) оставлены на Q4 и Q6, что тоже видно на скриншоте выше.
Но даже так, у не основных экспертов, главные веса Внимания оставлены на Q4 и Q6:
Пример не основных экспертов
Так что динамический низкий квант не тоже самое, что просто низкий квант, и его вполне можно попробовать. Особенно в ваше случае, когда в 192гб можно попробовать уместить UD-IQ2_XXS (только тут главное не перепутать с обычным Q2).
Вот я запускал DeepSeek-R1-UD-IQ1_S на обычном ПК ryzen 5600g + 64gb ddr4 3600 + nvme на скорости 0.82 t/s. То что не влезло в память, загружалось с ssd. Пример простой, но не каждая модель может правильно решить эту простую головоломку. И обычно на таком низком кванте язык превращается в кашу, а мысли путаются, тут же рассуждения остаются на приемлемом уровне. И это на самом низком динамическом кванте, если чуть повыше, то будет еще лучше.
Не из-за памяти. Магия hyper-threading, которая из 12 ядер делает 24 потока, работает только на разнородных задачах, отсюда и загрузка в 50% от настоящих ядер + 10% на фоновую работу винды, браузера и т.д.
Смысл HT в том, что если одна задача занимает avx блоки, то остальные блоки остаются свободными для других задач, и можно в теории немного выиграть в производительности, если заранее эти блоки заполнить информацией, а потом ядро быстренько это посчитает. В такой схеме не растет теплопакет, так как тактов у ядра больше не становится, такты всё равно будут делится между этими блоками.
При этом загрузка может показываться в 100%, но выигрыш будет лишь небольшой, не в 2 раза, в реальности это от силы 18% если повезет с задачами. Поэтому только реальные ядра могут дать кратный буст.
Инференс это задача для avx блоков, выполнением занимаются только настоящие ядра, поэтому добавление сюда фейковых логических ядер обычно замедляет работу, а не ускоряет. Частым советом и в llm среде и в гейминг среде отключить HT/SMT и посмотреть, выросла ли производительность.
Правильно ли я понял, что речь о чисто CPU, вообще без GPU?
Да, это только CPU на типичной домашней сборке. Сейчас перепроверил на нормальном pcie 3.0 nvme 970 evo plus. Скорости выросли до 0.82 t/s под линуксом, под виндой на нем же 0.11 t/s из-за свопа на медленный sata ssd, хотя с mmap этого не должно происходить.
На 0.82 t/s уже даже не лень дождаться ответа на главный вопрос человечества, сколько же сестер у брата Марии:
В llama.cpp, в llama-server, добавили поддержку мыслей, которые можно скрыть или раскрыть в отдельном блоке. Видно, что несмотря на экстремальное квантование, мысли и сам язык не разваливаются.
А что, если туда добавить 4090 c 24GB VRAM? Пусть себе из ОЗУ (RAM диск с файлом модели) подгружает нужное в VRAM. Это может ускорить до приемлемых результатов?
Эта концепция не реализована в llama.cpp, но было бы не плохо. Такое есть в ktransformers, но там пока нет поддержки V3 и R1, только V2.
Если просто выгрузить часть слоев на 24гб VRAM, выгрузив 9 слоев из 62, скорость возрастает до 1.07 t/s на той же задаче.
Если использовать 40гб VRAM (24гб + 16гб), выгрузив 15 слоев, то скорость 1.23 t/s.
Если бы кто-то проверил на 192гб DDR5, куда модель целиком влезает, то зависимость скоростей была бы еще понятнее. Например, на M2 Studio с 192гб, где очень быстрая память 800гб/с, у людей выходит 13-14 t/s, при пороге комфортного использования в 5 t/s это очень хороший результат.
Там, кстати, только что Mistral Small 3 вышла размером 24B, обещают качество на уровне LLama 3.3 70B. Для запуска Q4_K_M нужно 16гб памяти.
Сейчас unsloth выпустил динамический квант для R1, так что для запуска нужно всего 131гб + сколько гб на контекст.
Так как тут 37B активных параметров, то скорость будет выше чем 0.01 t/s если избавится от всяких тормозящих факторов, вроде сжатия ntfs, свопа, и windows почему-то плохо работает с mmap, из-за чего свопит на медленный ssd, даже если модель запускается с быстрого.
Я запустил DeepSeek-R1-UD-IQ1_S на nvme + ddr4 под windows, скорость 0.11 t/s, запустил тоже самое под Linux, скорость выросла до 0.33 t/s. В Windows всё уперлось в своп, хотя при mmap не должно такого быть. nvme подключен к сокету, поэтому скорость 1.3 гб/c, если взять более быстрый, то скорости вырастут, но не прям сильно. Если всё влезет в память, то скорости уже будут получше, а на ddr5 можно сейчас набить 192гб.
R1 Distill - это взяли 800к ответов от настоящей R1 и зафайнтюнили на этих ответах Qwen2.5 и Llama3.1, и эти Distill модели будут вести себя не так как R1, а намного хуже. Настоящая R1 весит 700гб, в квантованном виде без особых потерь весит 400гб, в экстремально квантованном виде будет 131гб, и даже в таком виде она будет лучше чем любая R1-Distill.
Запуск настоящей R1 локально возможен, так как там активных параметров всего 37B из 671B. Достаточно типичного объема памяти и быстрого nvme, чтобы подгружать активные параметры в память, но это скорее не для использования, а для теоретической возможности, так как модель много размышляет, и это всё очень медленно.
В llama.cpp по умолчанию используется mmap, это значит файл модели мапится с диска на ram без реальной загрузки в память, и в момент когда нужны конкретные 37B из модели они будут загружены в память с диска - поэтому чем быстрее ssd, тем быстрее это будет работать. По сути запуск возможен просто с ssd, если у вас есть хотя бы 32гб памяти, чтобы вместить 37B активных параметров, которые в квантованном виде займут 20-25гб.
Вот, запуск квантованной оригинальной DeepSeek-R1-UD-IQ1_S весом 131гб (динамическое квантование в 1.58 бит о котором уже написали выше, основные веса квантованы в 1.5 бита, а важные веса внимания оставлены в 4/6 бит). На 64гб ddr4 3600 на скорости 50гб/с и nvme на 1гб/с, скорость будет 0.3-0.25 t/s, дождаться пока модель закончит размышлять на простой вопрос в таком случае занимает 10 минут.
Поэтому, если у вас быстрый nvme на 5гб/с и 64гб DDR5 работающей на 100гб/с, вы сможете добиться скоростей около 1 t/s, но только на очень маленьком контексте, и так как это размышляющая модель, то контекст очень быстро дойдет до тысяч токенов, и скорость будет в лучшем случае 0.5 t/s.
Тут кто-то запускает на 96Gb DDR5 6800, 5 слоев выгружено на 3090 и быстрый nvme 990 pro
Если у вас б/у эпик с 16 канальным DDR4, работающий на 400 гб/с, то вы получите 4 t/s на большом контексте, так как в такие эпики можно вместить до 1тб памяти. Сейчас такой эпик собрать дешевле чем купить одну 4090.
Так что локальный запуск настоящей R1 это возможно, но не практично.
Вот мне и стало интересно сколько же будет это стоить.
Ну чисто технически, запуск квантованных моделей это всё еще запуск настоящей R1, а не её дистиллированных версий, и, например, Q6_K уже не отличима от оригинала по качеству (оригинал обучался в fp8).
Собрать б/у эпик 1-2 поколения работающий на ddr4 в 16-канале на скоростях 400гб/с обойдется где-то в 150-200к, или дешевле, если заказывать на таобао. Туда можно набить 1тб памяти, этого хватит чтобы запустить Q8_0/Q6_K модель, а для Q4_K_M, которая теряет несколько процентов качества, хватит и 512гб. Скорость инференса будет 4t/s, для сравнения скорость небыстрого чтения где-то 5t/s. Б/у эпики есть и на ddr5, но ощутимо дороже.
Тут unsloth сделал динамическое квантование gguf для R1, запихнув модель в 131 ГБ в 1.58 бита. Квантовал в 1.5 бита только MoE веса, а слои внимания оставлял как 4/6 бит, в итоге получилось добиться не плохого качества экстремально снижая требования к железу.
Да, это супер квантованная версия, но тем не менее, автор показал, что такой версией можно пользоваться, и можно написать Flappy Bird:
И уже для запуска такой версии на хорошей скорости достаточно 6x 7900xtx по 100к каждая (суммарный объем 144гб vram), скорость работы будет намного быстрее скорости чтения.
Mac с 192гб унифицированной быстрой памятью может запускать такую модель на приличной скорости.
Так как это MoE модель, то можно активные веса, которых всего 37B из 671B, вынести в момент инференса на GPU из памяти, и это, даже с учетом перекидывания туда-сюда весов, даст неплохое ускорение. Эту идею реализует ktransformers, но пока не для V3 и R1.
Потому что это не R1, версии на 70B или 32B и ниже ошибочно называют R1, хотя это R1 Distill. R1 Distill - это файнтюн на выходных данных R1 для qwen или llama, они не обучались как оригинальная R1 и их качество не соответствует R1.
Кликните на нее и перейдите в раздел Models (Модели), где вы увидите несколько размеров моделей - от 5 миллиардов до 671 миллиарда параметров
Моделей несколько, и только одна из них R1.
На реддите есть длинный тред, про то как ollama обманул неподкованных пользователей, заставив думать, что бывает R1 на 70B или 32B и многие ошибочно делают вывод, что R1 это полная фигня, пробуя не настоящий R1.
Размеры от 5B до 70B - это файнтюн qwen или llama, они называются R1 Distill, и они должны быть вынесены в отельную категорию, потому что это дообученные qwen или llama на выходных данных из оригинальной R1, их качество не соответствует R1, они не обучались как R1 и делать выводы по ним ошибка.
Единственный способ запустить настоящую R1 (как и deepseek V3) локально, это иметь ПК с хотя бы 256гб памяти, если это 16 канальная ddr4 3200 система на б/у эпиках (1-2 поколения, такие можно собрать где-то за 150к), то вы получите скорость 4 t/s в Q2_K кванте, для размышлений это слишком медленно, так как их обычно много, но это более менее терпимо, если учесть, что скорость небыстро чтения 5 t/s. На обычном ПК тоже можно запустить, ssd будет как виртуальная память, в llama.cpp поддерживается такой режим по умолчанию, скорость будет около 0.01 t/s.
Если вы взяли ту, что в статье, то вы взяли старшую обычную модель V3 размером 671B, просто квантованную Q2_K_XS. Для запуска такой модели не хватит 64гб памяти, нужно 210гб, это даже с учетом MoE, фактически модель работала со скоростью вашего диска, откуда вы загружали её, так как памяти не хватило и модель постоянно считывалась с диска. Для нормальной скорости вам нужна быстрая память, например, минимально 6-8 канальная на б/у эпиках, и то получится 3-4 токена в секунду.
Речь не про просто запуск, стандартные трансформеры можно сразу запускать на чем угодно. Речь про квантованные модели gguf, которые снижают требования к железу в несколько раз, позволяя запускать такие тяжелые модели на обычном ПК.
Например, модель DeepSeek-R1-Distill-Qwen-32B:
в оригинальных трансформерах модель требует 67гб памяти.
если взять gguf с квантованием Q4_K_M, то модель требует всего 20гб памяти.
Потеря качества между Q4_K_M и оригинальной моделью будет несколько процентов, что вполне приемлемо.
В llama.cpp поддержка была добавлена вчера, поэтому все проекты построенные на нем, вроде ollama, lm studio или oobabooga/text-generation-webui получат обновление позже. Пока можно запустить используя веб-сервер от самой llama.cpp:
-ngl 99 - это количество слоев, которые будут выгружены на видеокарту, нужно установить в зависимости от количества видеопамяти. Для windows, если у вас не новые amd или любой intel, то качайте vulkan версию, если новые amd, то hip, если nvidia, то cuda версию.
По идее, чтобы заработало нормально, лучше следовать рекомендациям от создателей:
Задать системный промпт: A conversation between User and Assistant. The user asks a question, and the Assistant solves it. The assistant first thinks about the reasoning process in the mind and then provides the user with the answer. The reasoning process and answer are enclosed within <think> </think> and <answer> </answer> tags, respectively, i.e., <think> reasoning process here </think> <answer> answer here </answer>.
Установить температуру в диапазоне от 0.5 до 0.7, иначе может быть бесконечный вывод и непоследовательное рассуждение.
После этого модель будет работать нормально и вести диалог в чате самостоятельно фильтруя теги размышления.
Не знаю, это из-за квантования пишет водород как гидрород, или просто так удобнее размышлять. 极高 - "очень велико"
Не довел ответ до гелия-4, но и вопрос был про другое
У E5-2666v3 память 4х канал ddr4 2133мгц - значит скорость около 50гб/с, скорее всего такой скорости не хватает, чтобы загрузить все ядра. Плюс у вас часть слоев вынесена на видеокарту, судя по загрузке, попробуйте отключить оффлоад на gpu и процессор скорее всего будет полностью загружен.
И, кстати, ktransformers теперь поддерживает DeepSeek 671B V3 и R1. Ускорение на одной 4090 у них вышло в 3 раза, с 4.5 t/s до 13.6 t/s. Использовалось 14гб видеопамяти и 382гб озу для кванта Q4_K_M.
Если два процессора, то проблему с numa они временно решили дублированием памяти на оба процессора, обещали потом оптимизировать. Их способ ускорения работает только для MoE моделей, R1-Distill не подойдут.
Второе везде работает автоматически сразу через mmap. Для первого нужно взять сборку с поддержкой видеокарт и там это будет работать автоматически.
gguf файлы внутри организованы так, что их структура совпадает со структурой памяти, когда модель загружена в память, и когда через mmap происходит маппинг файла на память, то в llama.cpp всё работает автоматически через механизмы ОС. Отключить mmap можно через
--no-mmap
.При загрузке будет указано сколько слоев выгружено на GPU, например, 0, и сколько памяти ушло на промежуточные вычисления и загрузилось ли это на GPU.
Есть нюанс, под виндой mmap работает, но в моем случае почему-то залезает в своп, из-за этого скорость падает до 0.25 t/s. Под линуксом всё работает намного быстрее.
Например, нужно выбрать llama.cpp собранную с поддержкой видеокарт, среди множества версий выбрать нужную:
Если видеокарта amd - то win-hip версии gfx для нужной версии видеокарты. И так как скорее всего никто не разбирается в версиях gfx, то стоит просто попробовать по очереди все варианты. Или версию gfx можно узнать тут на вкладке AMD Radeon GPUs.
Если nvidia, то скачать нужно и cuda сборку и отдельно cudart, который нужно разархивировать в туже папку со сборкой. Для старых карточек версию cu11.7, для новых cu12.4.
Vulkan версия универсальна и работает с любыми видеокартами, хоть amd, хоть nvidia, хоть intel, и даже в паре amd + intel - поэтому если не заводится со специализированным вариантом, можно взять вулкан.
Если скачать avx сборку, то всё будет считаться на cpu.
Запускается это через llama-server, GUI которого потом открывается в браузере, команда для запуска:
Тут
--cache-type-k q4_0
квантование kv-кэша для уменьшения его размера, можно отключить, если текст получается несвязный.Если остается лишняя видеопамять, то можно выгрузить часть слоев на GPU через
-ngl N
- количество слоев нужно подбирать по количеству видеопамяти. Если 2 и больше видеокарт, то можно распределить загрузку памяти через-ts xx,yy
, либо это будет сделано автоматически.--ctx-size 4096
- уменьшить размер контекста до 4к, чем больше контекст, тем больше памяти потребуется:По тому же адресу, который будет указан у llama-server, если добавить в конце
/v1/
, то это будет адрес с openai completions api, который можно вводить в любом удобном клиенте или в плагинах, используя вместо chatgpt. Должно получиться вот так:http://127.0.0.1:8080/v1/
В настройках можно указать, чтобы модель явно мыслила на русском языке, иначе она может переключаться на другие языки. min_p нужно установить в 0.05, иначе будет повтор токенов, что снизит качество вывода, температуру в 0.5 для того, чтобы модель меньше фантазировала:
Эти настройки работают и для R1-Distill моделей. Так как в llama-server уже есть поддержка мыслительных тегов, то R1-Distill будут тоже работать, например:
Квантование не изменяет размерность модели, а у lm studio нет скрытого хаба моделей, они качают модели с hf, там у каждой модели есть ссылка на huggingface, где можно посмотреть, что это за модель такая.
Скорее всего вы про предыдущую DeepSeek v2.5, она на 236B.
Любому, кто скачает mergekit. Вот, например, модель 137B собранная из двух Qwen2.5-72B - https://huggingface.co/Solshine/Qwen2.5-137B-Doubled72B-Instruct-Mergekit-Merge
Но, вообще, ощущение, что вы говорите про динамическое квантование UD-IQ1_S от unsloth. Вес модели как раз 131гб и это действительно оригинальная R1.
За счет того, что веса внимания оставлены как Q4_K_M, а MoE веса квантованы в 1-2 бита, такая модель не только оригинальная по своей сути, но и показывает не плохой уровень. Но она остается как 671B модель, а не как 131B или 137B.
Если вы всё таки про UD квантованную версию, то это работает даже запускаясь с nvme, нужно только 20гб ОЗУ для подгрузи активных параметров.
И если есть любая видеокарта хотя бы на 6гб (для интела запуск через vulkan, для amd - rocm или vulkan, для nvidia - cuda, все эти версии уже есть собранные в llama.cpp), то туда можно вынести расчеты kv кэша, получая не плохое ускорение. В итоге можно получить от 0.5 t/s до 1 t/s просто запускаясь с nvme.
Вот я запустил UD оригинальной R1 на обычном домашнем ПК с 64гб ddr4 памятью (скорость 50гб/с), модель не влезает в память целиком, поэтому постоянно подгружается с nvme pcie 3.0, kv-кеш вынесен на gpu.
Но даже так, с бесконечной загрузкой с nvme, на обычном домашнем ПК, скорость получилась 0.75 t/s.
То есть, если модель целиком влезет в память, например, китайская ddr5 192гб сейчас стоит не так дорого, в двухканале там будут скорости 80+ гб/с, в 192гб влезет даже квант получше и скорость вывода модели будет 2.5 t/s, если проц вывезет. Минимально комфортная скорость это 5 t/s, так что половину от этого уже можно получить дома.
HT не добавляет физических ядер, а лишь позволяет использовать не занятые сейчас другой задачей блоки. Ускорение только за счет пред загрузки данных в свободные блоки пока ядро считает, например, AVX-блоки, но количество тактов не меняется, так как физическое ядро одно и тоже.
Инференс это задача для AVX блоков, поэтому другие блоки свободны для фотоной работы винды и браузера - но так как количество тактов не меняется, то для задачи инференса производительность не вырастет, а просядет, ведь такты ядра будут заняты другой работой. Поэтому с включенным HT загрузка 50% это и есть настоящая загрузка всего 100% процессора.
И загрузка будет показываться 60%, что воспринимается как +10% производительности, а на деле для инференса получится -5% производительности. Еще для однородной задачи, так как задача не раскладывается на логические потоки, не эффективно создаются очереди в конвейерах, и постоянное переключение может создать тормоза.
И тут даже в теории не получить +50% производительности, количество тактов не меняется, и даже если будет написано 100% загрузки, что создает ощущение +50% производительности, то это на деле будет просто i/o wait.
Сейчас интел вовсе отказался от HT в новом поколении процессоров, сказав что настоящие энергоэффективные ядра лучше, а AMD оставляет SMT, так как в некоторых бенчмарках там получается +18% прирост.
Поэтому стандартный совет отключить HT и проверить ваш сценарий.
Попробуйте запустить с ключом
--numa distribute
. Еще попробуйте добавить-nkvo
И можете перейти на Q4_K_S, сэкономит почти в 2 раза памяти, а качество при этом просядет незаметно.
Как минимум на идентичной с вашей конфигурацией получают ~2t/s. Эпики с 16 канальной ddr4 3200 на 2x EPYC 7543 с 403 гб/с - 4 t/s. На эпиках с 12-канальной ddr5 4800 выходит на малом контексте до 9 t/s на Q4_K_S.
Не знаю скажется ли это в вашем случае на скорость, так как у вас модель влезает в память и так, но можно еще попробовать взять экспериментальный динамический низкий квант. Качество UD-IQ1 сильно лучшем, чем просто IQ1, потому что UD-IQ1 сохраняет важные веса внимания на уровне Q4_K_M, а все остальные уже квантует через матрицу важности до IQ1, в итоге получается не плохой гибрид по качеству.
Динамические UD кванты запускают даже просто с nvme на скоростях от 0.5 t/s до 1 t/s. Но правда такие скорости только под линуксом.
Еще сейчас идет работа по добавлению в ktransformers возможности для архитектуры V3 выгружать активные веса на GPU, и так как активных весов всего 37B из 671B, то это в теории может ускорить вывод с помощью одной GPU сильнее, чем как сейчас это работает в llama.cpp. Следить за этим можно тут.
Звучит так, словно она и без этих 5 процентов выдавала качество на том же уровне.
Там если нажать на стрелочку рядом, то будет расписано какие веса bf16, а какие в fp8.
BF16/FP32 там немного, они нужны для динамической активации и масштабирования (документация из V3 совпадает с R1).
Веса модели в fp8, немного bf16 это веса нормализации, а в fp32 веса weight_scale_inv, которые нужны для деквантования из fp8 по формуле
(128x128 weight block) * weight_scale_inv
.Официальный релиз ~150гб в bf16.
R1 обучалась сразу в fp8, а не fp16/fp32, поэтому ей нужно ~700Гб + память на контекст.
По сути это первая крупная модель обученная сразу в fp8, интересно на сколько рабочими будут модели обученные в новый fp4.
В обычный низкий квант да, но есть динамический низкий квант.
Обычный низкий квант, вроде IQ1_M, это почти все веса, включая веса Внимания и Feed-Forward Network, часть необходимая для работы Внимания, почти все они в очень низком кванте. Именно это снижает возможности модели "мыслить" и рассуждать, в итоге в ответ получается очень не качественные ответы, так как затронута главная часть трансформера. Вот так выглядят веса обычного экстремально низкого кванта:
В динамическом очень низком кванте UD, который собрал unsloth, все важные веса оставлены на уровне Q4 или Q6, поэтому главная часть модели по сути на уровне Q4_K_M.
Остальные веса в экстремально низком кванте IQ1 и IQ2, но это в основном только нисходящие и восходящие веса ffn не главных экспертов, а также веса переходов между экспертами, что не так фатально сказывается на возможности модели рассуждать и "мыслить". При этом эти же веса главного эксперта (в MoE множество экспертов, но в моменте активны только часть из них) оставлены на Q4 и Q6, что тоже видно на скриншоте выше.
Но даже так, у не основных экспертов, главные веса Внимания оставлены на Q4 и Q6:
Так что динамический низкий квант не тоже самое, что просто низкий квант, и его вполне можно попробовать. Особенно в ваше случае, когда в 192гб можно попробовать уместить UD-IQ2_XXS (только тут главное не перепутать с обычным Q2).
Вот я запускал DeepSeek-R1-UD-IQ1_S на обычном ПК ryzen 5600g + 64gb ddr4 3600 + nvme на скорости 0.82 t/s. То что не влезло в память, загружалось с ssd.
Пример простой, но не каждая модель может правильно решить эту простую головоломку. И обычно на таком низком кванте язык превращается в кашу, а мысли путаются, тут же рассуждения остаются на приемлемом уровне. И это на самом низком динамическом кванте, если чуть повыше, то будет еще лучше.
Не из-за памяти. Магия hyper-threading, которая из 12 ядер делает 24 потока, работает только на разнородных задачах, отсюда и загрузка в 50% от настоящих ядер + 10% на фоновую работу винды, браузера и т.д.
Смысл HT в том, что если одна задача занимает avx блоки, то остальные блоки остаются свободными для других задач, и можно в теории немного выиграть в производительности, если заранее эти блоки заполнить информацией, а потом ядро быстренько это посчитает. В такой схеме не растет теплопакет, так как тактов у ядра больше не становится, такты всё равно будут делится между этими блоками.
При этом загрузка может показываться в 100%, но выигрыш будет лишь небольшой, не в 2 раза, в реальности это от силы 18% если повезет с задачами. Поэтому только реальные ядра могут дать кратный буст.
Инференс это задача для avx блоков, выполнением занимаются только настоящие ядра, поэтому добавление сюда фейковых логических ядер обычно замедляет работу, а не ускоряет. Частым советом и в llm среде и в гейминг среде отключить HT/SMT и посмотреть, выросла ли производительность.
Да, это только CPU на типичной домашней сборке. Сейчас перепроверил на нормальном pcie 3.0 nvme 970 evo plus. Скорости выросли до 0.82 t/s под линуксом, под виндой на нем же 0.11 t/s из-за свопа на медленный sata ssd, хотя с mmap этого не должно происходить.
На 0.82 t/s уже даже не лень дождаться ответа на главный вопрос человечества, сколько же сестер у брата Марии:
В llama.cpp, в llama-server, добавили поддержку мыслей, которые можно скрыть или раскрыть в отдельном блоке. Видно, что несмотря на экстремальное квантование, мысли и сам язык не разваливаются.
Эта концепция не реализована в llama.cpp, но было бы не плохо. Такое есть в ktransformers, но там пока нет поддержки V3 и R1, только V2.
Если просто выгрузить часть слоев на 24гб VRAM, выгрузив 9 слоев из 62, скорость возрастает до 1.07 t/s на той же задаче.
Если использовать 40гб VRAM (24гб + 16гб), выгрузив 15 слоев, то скорость 1.23 t/s.
Если бы кто-то проверил на 192гб DDR5, куда модель целиком влезает, то зависимость скоростей была бы еще понятнее. Например, на M2 Studio с 192гб, где очень быстрая память 800гб/с, у людей выходит 13-14 t/s, при пороге комфортного использования в 5 t/s это очень хороший результат.
Там, кстати, только что Mistral Small 3 вышла размером 24B, обещают качество на уровне LLama 3.3 70B. Для запуска Q4_K_M нужно 16гб памяти.
Сейчас unsloth выпустил динамический квант для R1, так что для запуска нужно всего 131гб + сколько гб на контекст.
Так как тут 37B активных параметров, то скорость будет выше чем 0.01 t/s если избавится от всяких тормозящих факторов, вроде сжатия ntfs, свопа, и windows почему-то плохо работает с mmap, из-за чего свопит на медленный ssd, даже если модель запускается с быстрого.
Я запустил DeepSeek-R1-UD-IQ1_S на nvme + ddr4 под windows, скорость 0.11 t/s, запустил тоже самое под Linux, скорость выросла до 0.33 t/s. В Windows всё уперлось в своп, хотя при mmap не должно такого быть. nvme подключен к сокету, поэтому скорость 1.3 гб/c, если взять более быстрый, то скорости вырастут, но не прям сильно. Если всё влезет в память, то скорости уже будут получше, а на ddr5 можно сейчас набить 192гб.
R1 Distill - это взяли 800к ответов от настоящей R1 и зафайнтюнили на этих ответах Qwen2.5 и Llama3.1, и эти Distill модели будут вести себя не так как R1, а намного хуже.
Настоящая R1 весит 700гб, в квантованном виде без особых потерь весит 400гб, в экстремально квантованном виде будет 131гб, и даже в таком виде она будет лучше чем любая R1-Distill.
Запуск настоящей R1 локально возможен, так как там активных параметров всего 37B из 671B. Достаточно типичного объема памяти и быстрого nvme, чтобы подгружать активные параметры в память, но это скорее не для использования, а для теоретической возможности, так как модель много размышляет, и это всё очень медленно.
В llama.cpp по умолчанию используется mmap, это значит файл модели мапится с диска на ram без реальной загрузки в память, и в момент когда нужны конкретные 37B из модели они будут загружены в память с диска - поэтому чем быстрее ssd, тем быстрее это будет работать. По сути запуск возможен просто с ssd, если у вас есть хотя бы 32гб памяти, чтобы вместить 37B активных параметров, которые в квантованном виде займут 20-25гб.
Вот, запуск квантованной оригинальной DeepSeek-R1-UD-IQ1_S весом 131гб (динамическое квантование в 1.58 бит о котором уже написали выше, основные веса квантованы в 1.5 бита, а важные веса внимания оставлены в 4/6 бит).
На 64гб ddr4 3600 на скорости 50гб/с и nvme на 1гб/с, скорость будет 0.3-0.25 t/s, дождаться пока модель закончит размышлять на простой вопрос в таком случае занимает 10 минут.
Поэтому, если у вас быстрый nvme на 5гб/с и 64гб DDR5 работающей на 100гб/с, вы сможете добиться скоростей около 1 t/s, но только на очень маленьком контексте, и так как это размышляющая модель, то контекст очень быстро дойдет до тысяч токенов, и скорость будет в лучшем случае 0.5 t/s.
Если у вас б/у эпик с 16 канальным DDR4, работающий на 400 гб/с, то вы получите 4 t/s на большом контексте, так как в такие эпики можно вместить до 1тб памяти. Сейчас такой эпик собрать дешевле чем купить одну 4090.
Так что локальный запуск настоящей R1 это возможно, но не практично.
Ну чисто технически, запуск квантованных моделей это всё еще запуск настоящей R1, а не её дистиллированных версий, и, например, Q6_K уже не отличима от оригинала по качеству (оригинал обучался в fp8).
Собрать б/у эпик 1-2 поколения работающий на ddr4 в 16-канале на скоростях 400гб/с обойдется где-то в 150-200к, или дешевле, если заказывать на таобао. Туда можно набить 1тб памяти, этого хватит чтобы запустить Q8_0/Q6_K модель, а для Q4_K_M, которая теряет несколько процентов качества, хватит и 512гб.
Скорость инференса будет 4t/s, для сравнения скорость небыстрого чтения где-то 5t/s. Б/у эпики есть и на ddr5, но ощутимо дороже.
Тут unsloth сделал динамическое квантование gguf для R1, запихнув модель в 131 ГБ в 1.58 бита. Квантовал в 1.5 бита только MoE веса, а слои внимания оставлял как 4/6 бит, в итоге получилось добиться не плохого качества экстремально снижая требования к железу.
Да, это супер квантованная версия, но тем не менее, автор показал, что такой версией можно пользоваться, и можно написать Flappy Bird:
И уже для запуска такой версии на хорошей скорости достаточно 6x 7900xtx по 100к каждая (суммарный объем 144гб vram), скорость работы будет намного быстрее скорости чтения.
Mac с 192гб унифицированной быстрой памятью может запускать такую модель на приличной скорости.
Так как это MoE модель, то можно активные веса, которых всего 37B из 671B, вынести в момент инференса на GPU из памяти, и это, даже с учетом перекидывания туда-сюда весов, даст неплохое ускорение. Эту идею реализует ktransformers, но пока не для V3 и R1.
Потому что это не R1, версии на 70B или 32B и ниже ошибочно называют R1, хотя это R1 Distill. R1 Distill - это файнтюн на выходных данных R1 для qwen или llama, они не обучались как оригинальная R1 и их качество не соответствует R1.
Моделей несколько, и только одна из них R1.
На реддите есть длинный тред, про то как ollama обманул неподкованных пользователей, заставив думать, что бывает R1 на 70B или 32B и многие ошибочно делают вывод, что R1 это полная фигня, пробуя не настоящий R1.
Размеры от 5B до 70B - это файнтюн qwen или llama, они называются R1 Distill, и они должны быть вынесены в отельную категорию, потому что это дообученные qwen или llama на выходных данных из оригинальной R1, их качество не соответствует R1, они не обучались как R1 и делать выводы по ним ошибка.
Единственный способ запустить настоящую R1 (как и deepseek V3) локально, это иметь ПК с хотя бы 256гб памяти, если это 16 канальная ddr4 3200 система на б/у эпиках (1-2 поколения, такие можно собрать где-то за 150к), то вы получите скорость 4 t/s в Q2_K кванте, для размышлений это слишком медленно, так как их обычно много, но это более менее терпимо, если учесть, что скорость небыстро чтения 5 t/s.
На обычном ПК тоже можно запустить, ssd будет как виртуальная память, в llama.cpp поддерживается такой режим по умолчанию, скорость будет около 0.01 t/s.
Если вы взяли ту, что в статье, то вы взяли старшую обычную модель V3 размером 671B, просто квантованную Q2_K_XS.
Для запуска такой модели не хватит 64гб памяти, нужно 210гб, это даже с учетом MoE, фактически модель работала со скоростью вашего диска, откуда вы загружали её, так как памяти не хватило и модель постоянно считывалась с диска.
Для нормальной скорости вам нужна быстрая память, например, минимально 6-8 канальная на б/у эпиках, и то получится 3-4 токена в секунду.
Вам, видимо, нужна дистиллированная версия R1, которая будет размером 70b, 32b или 14b, для такого размера уже хватит скоростей двухканальной ddr5 6000+ с частичной выгрузкой на gpu - https://huggingface.co/collections/unsloth/deepseek-r1-all-versions-678e1c48f5d2fce87892ace5
Но, возможно, вам больше подойдет Qwen 2.5 Coder, так как размышляющая модель R1 требует много генераций - https://huggingface.co/collections/unsloth/qwen-25-coder-6732bc833ed65dd1964994d4
Речь не про просто запуск, стандартные трансформеры можно сразу запускать на чем угодно. Речь про квантованные модели gguf, которые снижают требования к железу в несколько раз, позволяя запускать такие тяжелые модели на обычном ПК.
Например, модель DeepSeek-R1-Distill-Qwen-32B:
в оригинальных трансформерах модель требует 67гб памяти.
если взять gguf с квантованием Q4_K_M, то модель требует всего 20гб памяти.
Потеря качества между Q4_K_M и оригинальной моделью будет несколько процентов, что вполне приемлемо.
gguf версии для локального запуска все варианты: https://huggingface.co/collections/unsloth/deepseek-r1-all-versions-678e1c48f5d2fce87892ace5
В llama.cpp поддержка была добавлена вчера, поэтому все проекты построенные на нем, вроде ollama, lm studio или oobabooga/text-generation-webui получат обновление позже. Пока можно запустить используя веб-сервер от самой llama.cpp:
-ngl 99 - это количество слоев, которые будут выгружены на видеокарту, нужно установить в зависимости от количества видеопамяти.
Для windows, если у вас не новые amd или любой intel, то качайте vulkan версию, если новые amd, то hip, если nvidia, то cuda версию.
По идее, чтобы заработало нормально, лучше следовать рекомендациям от создателей:
Задать системный промпт:
A conversation between User and Assistant. The user asks a question, and the Assistant solves it. The assistant first thinks about the reasoning process in the mind and then provides the user with the answer. The reasoning process and answer are enclosed within <think> </think> and <answer> </answer> tags, respectively, i.e., <think> reasoning process here </think> <answer> answer here </answer>.
Установить температуру в диапазоне от 0.5 до 0.7, иначе может быть бесконечный вывод и непоследовательное рассуждение.
После этого модель будет работать нормально и вести диалог в чате самостоятельно фильтруя теги размышления.