Ну и да, размер вырос 671 до 685 миллиардов параметров.
И нет, размер не изменился, предыдущая V3 тоже была 685B, и R1 тоже 685B. Число 685B - это вес основной модели 671B плюс вес модуля MTP 14B. В gguf версиях вы не видите эти дополнительные 14B потому, что MTP пока не реализован в llama.cpp.
MTP это специальный модуль, который расширяет слои основной модели, и который обучался с основной моделью. Он нужен для того, чтобы предсказывать второй токен, вслед за первым. У Deepseek с MTP получается ускорение в 1.8 раза, а вероятность принятия второго токена, по их оценкам, составляет 85–90%.
https://arxiv.org/pdf/2412.19437
В llama.cpp есть похожая, но более простая, идея под названием speculative decoding. Если у какой-то конкретной модели есть разные размеры, главное, чтобы они были из одной "партии", то можно взять маленькую как черновик для большой. Например, у LLaMa 3.1 есть версии: 70B, 8B, 3B, 1B - то для 70B можно использовать черновиком, например, модель 3B. Ускорение получается разным, от 25 до 60%.
Почему это работает, думаю, и так понятно. Например, при генерации длинных слов часто можно предсказать их окончание, но большая модель будет тратить больше времени на генерацию ответа, так как текст выводится токенами, токены представляют собой буквы или слога, и каждый токен будет требовать полного прогона модели. Маленькая модель быстрее продолжит такое слово.
ollama всех обманула и назвала R1 Distill модели, как обычный deepseek r1. Полное название модели на скриншоте - DeepSeek-R1-Distill-Llama-8B, это файнтюн LLaMA 3.1 8B, ничего общего с качеством deepseek R1 не имеет.
Конкурентами digits будут новые AMD EPYC с DDR5 и эпловские m4 Ultra unified memory.
Точнее сказать, что конкурентом скорее будет Ryzen Al Max+ 395. И по цене, и по размерам, и характеристикам. Например, Framework Desktop. Стоит на 1к дешевле, это привычное x86 железо, а не arm, из минусов это не CUDA, а ROCm, но для многих фреймворков это уже не проблема. Шина памяти 256 бит LPDDR5X.
У DIGITS, который теперь DGX Spark, характеристики выложили, шина памяти всё-таки 256 бит, такая же как у Framework Desktop:
Да, точно, LLM это и есть набор весов, а тензоры это лишь объединение этих весов особым образом по слоям. На вычисление каждого следующего токена модели нужны все веса одномоментно, исключение только MoE модели, там веса чередуются на каждый токен.
Токенизатор и прочее, это вообще спичечные размеры. Например, токенизатор DeepSeek R1, самой крупной открытой модель размером 671B в fp8 требующей 700гб памяти для запуска, имеет размер 8мб.
А уже спросили почему Ryzen 7 9800X3D а не 7900x который мощнее (все равно водянку ставим. а цены схожие)?
Если в названии есть X3D - это процессоры с увеличенным 3D V-Cache L3, они могут быть слабее в вычислительных задачах, но у них сильно больше L3 кэш и, как выяснилось, игры очень хорошо отзываются на размер L3 кэша и поэтому в играх такие процессоры показывают себя сильно лучше.
9800x3d vs 7900x
9800x3d vs 7950x3d
9800x3d vs 14900kf vs ultra 9 285k со свежими драйверами
Поэтому вопрос почему именно 9800X3D не стоит, сейчас это лучший процессор для игр, еще и холодный, ему водянка, в общем-то, не требуется.
Вообще, процессоры с 3d кэшем есть и для AM4 платформы, например, 5700x3d, что сейчас, с учетом низкой цены на материнки b450 и недорогой ddr4, скорее всего будет одним из самых дешевых способов получить лучшую производительность в играх по соотношению цена/качество.
5700x3d + rtx 4090 на ультра графике без dlss и без лучей
Preview была проверкой концепции размышлений и вышла 3 месяца назад, в ноябре 2024. Она умела работать только в режиме 1 вопрос - 1 ответ и сразу же ресет, она постоянно переключала языки и её качество вы можете видеть сами. До этого, в сентябре вышла размышляющая chatgpt o1, все гадали как реализовано размышление, это система моделей или как, и qwq preview была попыткой показать, что то, как o1 умеет рассуждать, можно реализовать в рамках монолитной модели и позже подтвердилось, что o1 это одна модель, а не система агентов.
Финальная версия QwQ-32B уже обучена намного лучше, учтены многие факторы и поэтому у неё сильно лучше качество, модель теперь полноценно настроена через apply_chat_template чтобы автоматически убирать предыдущие размышления из истории и добавлять тег <think> вначале нового ответа, поэтому модель пригодна для диалогов.
В llama.cpp реализовано apply_chat_template, поэтому и gguf квантованные версии тоже будут работать нормально, если учесть рекомендации от создателей модели: Use Temperature=0.6 and TopP=0.95. Use TopK between 20 and 40 to filter out rare token occurrences while maintaining the diversity of the generated output.
С юмором у всех моделей сложно:
QwQ-32B-Q4_K_M.gguf
Но то, что модели могут переключать языки, сейчас это в целом типично, даже o3-mini так делает:
С длинной контекста, скорость будет резко падать, поэтому "бенчмарки" про то, что люди получают 4 t/s на коротком контексте могут быть не применимы на практике. Если вы именно хотите это использовать и потребуются длинные диалоги, то нужно это учитывать, либо ждать пока найдут способ это оптимизировать.
https://github.com/ggerganov/llama.cpp/pull/11446
На 200гб можно в лучше случае получить 2-3 t/s, и тут либо еще снижать квант для ускорения, либо если добавить туда одну 3090 и запускать через ktransformers, они выпустили недавно поддержку DeepSeek R1/V3, то на 1 видеокарте можно получить ускорение до 3х раз.
С одной 3090 и эпиком 3 поколения так можно получить 8 t/s, но там не ясна скорость на длинном контексте, для кода это может быть критично, а для просто чата это нормально.
В целом рассуждающая модель может генерировать очень много токенов, поэтому просто запустите R1-Distill в llama.cpp на том железе, что у вас есть сейчас, подобрав размер (качество ответов будет плохое на низких размерах B, но этот эксперимент не про качество ответов) и параметры запуска (выносить на GPU часть слоев или нет, использовать сборку с GPU чтобы kv-кэш автоматически выносился или использовать avx сборку), чтобы в итоге получилось 2 t/s или 4 t/s и посмотрите устраивает ли вас такая скорость.
У 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 и посмотреть, выросла ли производительность.
И нет, размер не изменился, предыдущая V3 тоже была 685B, и R1 тоже 685B.
Число 685B - это вес основной модели 671B плюс вес модуля MTP 14B. В gguf версиях вы не видите эти дополнительные 14B потому, что MTP пока не реализован в llama.cpp.
MTP это специальный модуль, который расширяет слои основной модели, и который обучался с основной моделью. Он нужен для того, чтобы предсказывать второй токен, вслед за первым. У Deepseek с MTP получается ускорение в 1.8 раза, а вероятность принятия второго токена, по их оценкам, составляет 85–90%.
В llama.cpp есть похожая, но более простая, идея под названием speculative decoding.
Если у какой-то конкретной модели есть разные размеры, главное, чтобы они были из одной "партии", то можно взять маленькую как черновик для большой. Например, у LLaMa 3.1 есть версии: 70B, 8B, 3B, 1B - то для 70B можно использовать черновиком, например, модель 3B. Ускорение получается разным, от 25 до 60%.
Почему это работает, думаю, и так понятно. Например, при генерации длинных слов часто можно предсказать их окончание, но большая модель будет тратить больше времени на генерацию ответа, так как текст выводится токенами, токены представляют собой буквы или слога, и каждый токен будет требовать полного прогона модели. Маленькая модель быстрее продолжит такое слово.
ollama всех обманула и назвала R1 Distill модели, как обычный deepseek r1. Полное название модели на скриншоте - DeepSeek-R1-Distill-Llama-8B, это файнтюн LLaMA 3.1 8B, ничего общего с качеством deepseek R1 не имеет.
Точнее сказать, что конкурентом скорее будет Ryzen Al Max+ 395. И по цене, и по размерам, и характеристикам. Например, Framework Desktop. Стоит на 1к дешевле, это привычное x86 железо, а не arm, из минусов это не CUDA, а ROCm, но для многих фреймворков это уже не проблема. Шина памяти 256 бит LPDDR5X.
У DIGITS, который теперь DGX Spark, характеристики выложили, шина памяти всё-таки 256 бит, такая же как у Framework Desktop:
Размер тоже компактный, только вертикальный:
Да, точно, LLM это и есть набор весов, а тензоры это лишь объединение этих весов особым образом по слоям. На вычисление каждого следующего токена модели нужны все веса одномоментно, исключение только MoE модели, там веса чередуются на каждый токен.
Токенизатор и прочее, это вообще спичечные размеры. Например, токенизатор DeepSeek R1, самой крупной открытой модель размером 671B в fp8 требующей 700гб памяти для запуска, имеет размер 8мб.
Но... Ведь это и есть вся LLM.
Если в названии есть X3D - это процессоры с увеличенным 3D V-Cache L3, они могут быть слабее в вычислительных задачах, но у них сильно больше L3 кэш и, как выяснилось, игры очень хорошо отзываются на размер L3 кэша и поэтому в играх такие процессоры показывают себя сильно лучше.
Поэтому вопрос почему именно 9800X3D не стоит, сейчас это лучший процессор для игр, еще и холодный, ему водянка, в общем-то, не требуется.
Вообще, процессоры с 3d кэшем есть и для AM4 платформы, например, 5700x3d, что сейчас, с учетом низкой цены на материнки b450 и недорогой ddr4, скорее всего будет одним из самых дешевых способов получить лучшую производительность в играх по соотношению цена/качество.
Не то, что нужно. Вам нужно вот это, онлайн без регистрации: https://huggingface.co/spaces/Qwen/QwQ-32B-Demo
Preview была проверкой концепции размышлений и вышла 3 месяца назад, в ноябре 2024. Она умела работать только в режиме 1 вопрос - 1 ответ и сразу же ресет, она постоянно переключала языки и её качество вы можете видеть сами.
До этого, в сентябре вышла размышляющая chatgpt o1, все гадали как реализовано размышление, это система моделей или как, и qwq preview была попыткой показать, что то, как o1 умеет рассуждать, можно реализовать в рамках монолитной модели и позже подтвердилось, что o1 это одна модель, а не система агентов.
Финальная версия QwQ-32B уже обучена намного лучше, учтены многие факторы и поэтому у неё сильно лучше качество, модель теперь полноценно настроена через apply_chat_template чтобы автоматически убирать предыдущие размышления из истории и добавлять тег
<think>
вначале нового ответа, поэтому модель пригодна для диалогов.В llama.cpp реализовано apply_chat_template, поэтому и gguf квантованные версии тоже будут работать нормально, если учесть рекомендации от создателей модели:
Use Temperature=0.6 and TopP=0.95. Use TopK between 20 and 40 to filter out rare token occurrences while maintaining the diversity of the generated output.
С юмором у всех моделей сложно:
Но то, что модели могут переключать языки, сейчас это в целом типично, даже o3-mini так делает:
С длинной контекста, скорость будет резко падать, поэтому "бенчмарки" про то, что люди получают 4 t/s на коротком контексте могут быть не применимы на практике.
Если вы именно хотите это использовать и потребуются длинные диалоги, то нужно это учитывать, либо ждать пока найдут способ это оптимизировать.
На 200гб можно в лучше случае получить 2-3 t/s, и тут либо еще снижать квант для ускорения, либо если добавить туда одну 3090 и запускать через ktransformers, они выпустили недавно поддержку DeepSeek R1/V3, то на 1 видеокарте можно получить ускорение до 3х раз.
С одной 3090 и эпиком 3 поколения так можно получить 8 t/s, но там не ясна скорость на длинном контексте, для кода это может быть критично, а для просто чата это нормально.
В целом рассуждающая модель может генерировать очень много токенов, поэтому просто запустите R1-Distill в llama.cpp на том железе, что у вас есть сейчас, подобрав размер (качество ответов будет плохое на низких размерах B, но этот эксперимент не про качество ответов) и параметры запуска (выносить на GPU часть слоев или нет, использовать сборку с GPU чтобы kv-кэш автоматически выносился или использовать avx сборку), чтобы в итоге получилось 2 t/s или 4 t/s и посмотрите устраивает ли вас такая скорость.
https://habr.com/ru/articles/879846/comments/#comment_27903310
У 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 и посмотреть, выросла ли производительность.