Можно дообучать (файнтюнить) квантованные bnb модели. Оригинальные модели и bnb версии найти не сложно, они выкладываются на Hugging Face, где-то рядом с gguf моделями.
Обучение 13B возможно на одной 24гб GPU за счет 4-битной qlora. Создатель моделей Saiga рассказывал как быстро дообучать существующую модель на своих данных на одной GPU: https://habr.com/ru/articles/759386/
Сейчас у Сайги получаются очень годные файнтюны для русского языка, поэтому можно начать с этих статей и дальше уже искать информацию про более современные методы вроде qlora.
Дома дообучить R1 на своих данных можно, например, на б/у серверах с 512гб памяти, это будет очень не быстро, но в теории возможно.
Для документаций применяется другой подход - RAG.
Для RAG не нужно дообучать модель, вместо этого создается векторная база из ваших данных, и после к этой базе уже можно подключать любую модель.
Движки RAG разные и работают с разным качеством, поэтому вам нужно поискать готовые llm клиенты с поддержкой RAG, сейчас их не мало, и сравнить качество. В тех же клиентах обычно ещё сразу есть и веб-поиск и т.д.
Часто вместо RAG это называют как-то вроде Chat with Documents или просто нужно перетянуть файл в поле чата. Например, где это реализовано (не все решения опенсорсные):
И я не рекомендую использовать процессор для этого, особенно когда речь идет о reasoning моделей, она будет часами размышлять над вашей задачей. Используйте microsoft phi-4/qwen3-30b-a3b/gemma3-27b
Нет, будем запускать локальный DeepSeek на домашнем железе.
Но даже для маленьких моделей лучше брать UD-кванты, так как Q6/Q8 не всегда влезут в 24гб, а Gemma3, которая не такая быстрая как Qwen3-32B-A3B, целиком в VRAM залезет.
128гб будет не достаточно, и 256 тоже. Потому что мало хранить веса, нужно еще KV-cache для контекста. Вот в этом исследовании сравнивали разные кванты, качество менялось на грани погрешности (от 0 до 6%, чаще ~1%), поэтому 2бита самое то, для 32к контекста потребуется 400гб
Там llama.cpp кванты без MLA, поддержки которой ещё нет в llama.cpp. Зато MLA-кванты R4 уже есть в ik_llama.
DeepSeek ещё в V2 представили MLA (Multi-head Latent Attention). Полтора года назад GQA (Grouped Query Attention) было прорывом, позволяя ускорить вывод модели и размера контекста без потери качества, все модели делались на GQA. MLA это более эффективная версия GQA. Есть инструмент TransMLA для конвертации GQA в MLA, и более быстрый FlashMLA.
В ik_llama реализовано и MLA, и тензоры оптимизированы для вычисления на avx2 CPU, поэтому R4 кванты работают побыстрее, чем обычная llama.cpp, вмещают 32к контекста в одну GPU рядом с тензорами внимания в формате удобном для GPU, что дает ускорение и контекст на одной видеокарте.
Ещё важно различать 2 бита и 2 бита динамического квантования UD. Потому что если вы возьмете обычные 2 бита, вы не получите такое качество, как с UD. По вашей ссылке видно, что UD-Q2_K_XL выступает на уровне Q4_K_M, но весит на 165гб меньше, а вот стандартный Q2_K_L и весит больше, и ощутимо провисает в качестве.
Сомневаюсь, что среди локалок есть что-то лучше геммы в мультиязычности (разве что qwen3 как раз, но сомнительно)
Есть специализированная Aya Expanse (8B и 32B), она не самая умная, но она заточена на перевод на 23 языках (Arabic, Chinese (simplified & traditional), Czech, Dutch, English, French, German, Greek, Hebrew, Hindi, Indonesian, Italian, Japanese, Korean, Persian, Polish, Portuguese, Romanian, Russian, Spanish, Turkish, Ukrainian, and Vietnamese).
По крайней мере с японского на русский она лучше чем Gemma3 переводит. Есть еще более свежая Aya Vision 8B/32B, может как и Gemma3 переводить картинки, но у неё нет gguf, только bnb-4bit, что не так удобно для запуска.
Когда запускаете модель распространенными способами, хоть через LM Studio, хоть напрямую через llama.cpp, хоть через ollama, то там включается openai completion api, который является стандартом для всех API llm. Во 2 и 3 случаях api-сервер будет включен автоматически, в LM Studio надо будет галочкой включить.
Ставите для VSCode плагины Continue или Cline/RooCode, в нем указываете адрес api-сервера, теперь у вас в редакторе будет доступен "локальный Copilot", позволяющий работать с вашим кодом напрямую.
Можно легко переключать локальный api на бесплатный openrouter, и так далее.
Брать лучше UD кванты, они лучше сбалансированы. Они отмечены как UD либо как K_XL (обычные кванты имеют размер K_M или K_S), в UD XL квантах важные веса внимания меньше квантуют.
Вообще Q5_K_буква - цифрой указывается битность квантования основных весов, а буквой (S - small, M - medum, XL - x large) отмечена степень квантования тех самых важных тензоров внимания. Если рядом с Q есть i, то значит для квантования использовалась матрица важности imatrix. Такие кванты весят меньше, но имеют почти такое же качество как более тяжелые кванты, но с одним нюансом, если данные из матрицы важности совпали с вашим сценарием использования, обычно imatrix пытаются делать универсальным, что работает для программирования или английского, но часто там нет других языков, например, русского языка, поэтому русский проседает в i-квантах, если не делать их самостоятельно со своей imatrix (делается из обычного текстового файлика, где в кучу свалены нужные вам варианты использования модели, можно взять чужой и добавить к нему нужное).
Поэтому все же мечтаю хотя бы средней сложности код делать все же на своей локальной тачке - есть LM Studio, rtx 3090(24Gb), RAM 128Gb.
Чтобы запустить полноценный большой DeepSeek 671B на таком желез, вам нужно разбираться в консоли.
Для программирования нужен большой контекст, просадка на большом контексте критична для локального запуска, и чтобы этого не было, сейчас есть только 1 решение, использовать ik_llama, это форк llama.cpp заточенный на работу на CPU с большим контекстом и дополнительным ускорением через 1 видеокарту (в последних релизах ускорение через multi-gpu тоже поддерживается, если собрать версию с нужным ключем).
Для ik_llama подходят любые кванты, но чтобы получить скорость вам нужно взять специальные R4 кванты заточенные именно для CPU + 1 GPU, которые доступны только вот тут. Попутно эти новые кванты по PPL лучше всех остальных доступных сейчас: https://huggingface.co/ubergarm/DeepSeek-R1-0528-GGUF
Они работают только на ik_llama, их можно собрать самостоятельно или перекодировать из обычных gguf на лету через ключ -rtr, но готовые удобнее. Там же есть инструкция как их запустить на различных конфигурациях железа.
Если у вас Windows, то вам ещё придется разобраться как собрать ik_llama самостоятельно, для этого нужно воспользоваться инструкций от llama.cpp, они по сути совпадают. Это не сложно, но потратить вечерок, чтобы разобраться как запустить придется.
-ot ".ffn_.*_exps.=CPU", где можно почитать про использование этого ключа?
С этим довольно туго, нет какой-то документации, есть лишь обрывистые объяснения в репозиториях или комментариях. При чем часто используют синонимы одной и той же команды, что еще больше запутывает, например, -ot ".ffn_.*_exps.=CPU" тоже самое что -ot exps=CPU и тоже самое что -ot "([0-9]+).ffn_.*_exps.=CPU".
Модель llm трансформера состоит из слоев, например, Qwen3 30B-A3B состоит из 49 слоев (48 внутренних слоев и 1 выходной слой).
Типичный слой трансформера состоит из тензоров внимания (attn) и тензоров основных весов нелинейного преобразования данных (ffn).
В Dense моделях все слои общие и нужны для вычисления каждого следующего токена на каждом шагу.
В MoE моделях слои представляют собой отдельных экспертов и на каждый токен используется только часть слоев-экспертов.
В MoE бывает разная архитектура, в некоторых реализациях есть общие слои (много в llama4 maverick, мало в deepseek), а есть только эксперты (qwen3).
Посмотреть слои, названия тензоров и прочее можно на huggingface, кликнув на любой gguf квант:
У Dense моделей ускорение получается, если вынести часть слоев на GPU (через -ngl X), так как на каждом шагу нужны все слои, то это работает просто разделением по слоям. В MoE на каждом шагу нужны не все слои, поэтому если просто вынести через -ngl 10, то выгрузятся первые 10 слоев, но шанс, что на каждом шагу будут выпадать именно эти слои мал и ускорения почти не будет.
Поэтому для MoE появилась другая идея, вынести тензоры внимания attn из каждого слоя на GPU, а массивные веса ffn оставить на CPU.
Сначала всё выносим на GPU (-ngl 99 или меньшее число, сколько хватает vram), а потом переопределяем тензоры и ffn отправляем на CPU. Параметр -ot можно много раз писать, и если остается vram или есть несколько видеокарт, то можно явно раскидать слои по ним, например, на вторую карту CUDA отправить с 3 по 6 слои -ot "([3-6]).ffn_.*_exps.=CUDA1" , или, если видеокарта AMD/Intel, использовать имена для Vulkan/ROCM устройств, например, Vulkan0, имена GPU пишутся в консоли во время запуска llama.cpp.
В случае с Llama 4 Maverick 402b, где есть общие слои, можно получить 20 t/s за счет такого ускорения на одной GPU, в случае с Qwen3 235b, где нет общих слоев, получится всего 4.4 t/s.
В случае с Qwen3 тензоры внимания занимают всего 7гб vram, поэтому можно догрузить карту: -ot "blk.([0-9]|1[0-3]).ffn.=CUDA0" -ot exps=CPU, то получим скорость 5 t/s.
Возможно это не оптимальные параметры для Qwen3, например, можно попробовать выгрузить только ffn_down_exps 40 слоев: -ot "blk.([0-9]|[0-3][0-9]).ffn_down_exps.=CUDA0" -ot exps=CPU, то скорость будет чуть быстрее.
Извиняюсь за ламерский вопрос. А как можно в домашних условиях собрать нечто, способное запустить эту нейронку на ollama? Даже если абстрагироваться от стоимости.
Запустить можно просто с nvme, только скорость будет ниже порога комфортного использования на порядок, в районе 0.1 t/s.
Порог комфортного использования 5 t/s. Но для размышляющих моделей это скорее будет 10 t/s.
Скорость генерации тем выше, чем выше скорость памяти.
Запускать в домашних условиях нужно квантованную gguf версию.
Размер кванта Q4_K_M считается близким к оригиналу, но уменьшает размер модели в 4 раза (в случае с DeepSeek в 2 раза).
Одна GPU на 16гб дает хорошее ускорение при использовании --override-tensor параметра, через который можно на GPU вынести только общие тензоры, а MoE тензоры оставить на CPU. Если есть несколько GPU, можно тензоры до загрузить по видеокартам, сначала общие, потом отдельные слои.
Можно подключить несколько GPU, количество линий pcie не важно, можно и в x1, так как данные загружаются в память 1 раз и дальше уже считаются внутри GPU. Лишную VRAM можно заполнить тензорами через тот же -ot параметр (для обычных моделей не нужен -ot, там разгрузка на GPU идет по слоям, разделение по тензорам нужно только для MoE моделей).
Модель DeepSeek R1/V3 имеет размер 671B, но так как это MoE модель, то активных только 37B параметров. 37B в кванте Q4_K_M это примерно 22гб. Поэтому нужна скорость памяти ~110 гб/с чтобы запустить модель на скорости 5 t/s без помощи gpu (цифры не точные, а примерные).
100 гб/с можно получить на двухканальной DDR5 с частотой 6400+ Mhz. Например, недорогая китайская KingBank 2x48gb 6400Mhz позволяет получить 97 гб/с на Intel процессорах.
Чтобы вместить DeepSeek R1 Q4_K_M нужно 404гб + размер контекста. На данный момент для домашних ПК выпускают только модули памяти размером 48гб, поэтому можно получить только 192гб собрав из 4х модулей памяти (но 4 модуля по 48гб не стабильно работают и не заводятся на 6400Mhz и частоту придется снижать, скорость в лучшем случае снизится до 80 гб/с или ниже).
В общем на домашнем ПК сейчас нельзя набрать 404 гб обычной памяти. Поэтому есть такие варианты:
Серверное б/у оборудование, например, устаревшие Epyc или Xeon процессоры. Б/у стоит намного дешевле нового и можно набрать до 1тб памяти в 6-12 каналах памяти. Чем больше каналов, тем выше скорость, в итоге можно получить там скорости выше 200+ гб/c, вплоть до 400 гб/с. Q4_K_M на длинном контексте в 30к запускают на хорошей скорости через ik_llama где реализовано ускорение через MLA:
Epyc 9374F 384GB RAM + 1 x RTX 4090
Купить что-то вроде Orange Pi AI Studio pro 192гб или аналогов, которые сейчас появляются. Скорость памяти там 200+ гб/с, но 192гб всё еще не хватит, поэтому их потребуется несколько и объединить их тем или иным способом. Либо Mac Studio на 512гб, скорость памяти там 800 гб/с, но без поддержки MLA на длинном контексте будет не так быстро как с GPU и -ot.
Взять квант поменьше, Unsloth предоставили свои варианты сильного квантования UD, где важным тензорам они отдают больший приоритет и подвергает их меньшей степени квантования, а MoE веса квантуют сильнее. Можно подобрать квант, который влезет в домашние 192гб, либо 96гб + запуск с nvme. И иметь одну GPU на 16гб.
Для эксперимента я запустил квант UD-Q2_K_XL весом 234 гб на обычном ПК, это 2.7-битное квантование с лучшим балансом между размером и качеством. Двухканальная DDR5 192гб 4000mhz, скорость памяти в таком случае 57 гб/с, по скорости это на уровне двухканала ddr4. Что не влезло в память загружалось с nvme, использовал -ot ".ffn_.*_exps.=CPU" -fa -ngl 99 Скорость 3 t/s под Linux на Nvidia, под Windows медленнее, не знаю почему.
Можно взять UD-IQ2_XXS (216гб), это 2.4-битное квантование с использованием imatrix, квантование через матрицу важности imatrix позволяет сильнее сжать модель при том же качестве, модель будет меньше данных считывать с nvme, что немного добавит скорости. Или взять UD-IQ1_M (201гб) или UD-IQ1_S (185гб) - то этот 1.78-битное квантование, квант целиком влезет в 192гб, качество будет ниже, но скорость будет как раз в районе 5 t/s.
UPD. Проверил UD-IQ1_S, скорость 5.3 t/s, а pp в 7 раз быстрее.
Извините но я процетирую себя от 28.02.25 : "На самом деле это главная новость за последние 8 лет. С момента появления трансформеров"
Диффузионные не меняют парадигму текущих LLM, они не исправляют проблему галлюцинаций, уверенности в своем неверном ответе, не исправляют зависимость от размера контекста, который чем выше, тем хуже качество ответа, а лишь ускоряют скорость инференса за счет снижения качества и возрастания требований к обучению примерно в 5 раз.
"Главных" новостей хватает на каждый год, разработчикам подо всё нужно выбивать бюджет и ресурсы на обучение, иначе новостей было бы больше:
Диффузионная архитектура появилась на 2 года раньше трансформеров в 2015 году, трансформеры представлены в 2017 году.
В 2021 году была SUNDAE, один из первых рабочих прототипов диффузионных LM работающий не на авторегрессии. Может и ещё раньше было что-то рабочее.
В 2022 году диффузионные текстовые модели применялись в картиночных нейросетях.
Первый перспективный прототип диффузионных языковых моделей CodeFusion представлен 06.03.23 размером 75M, по их словам конкурирующая с gpt-3 в кодирование.
В декабре 2024 представлен то, что уже можно назвать LLM (ключевое тут Large) с мышлением названным DoT. Уже тогда интернет называл это будущим LLM.
В феврале 2025 представлены рабочие модели LLM размером 7-8B, которые уже в бенчмарках конкурируют с авторегрессивными вариантами, но вне бенчмарков не впечатляют.
У первых моделей качество очень сильно хромает, но скорости безумны. У гугла в разы больше ресурсов, и если им удалось побороть проблему с качеством, то это покажет другим создателям моделей, что этот путь не безнадежен.
У меня GitHub Copilot работает лучше всего утром по европейскому времени, когда, видимо, в Америке ещё не начался рабочий день. К вечеру работа дико деградирует.
Если искать причину, то как вариант, это может быть когда свободные ресурсы есть, выкручивают бюджет размышления выше, когда пользователей становится много, бюджет уменьшают.
Качество ответа на примере Qwen3, чем выше бюджет размышления, тем лучше ответ
Помогает сброс и начало нового чата. Накопление контекста чата выше какого-то уровня, похоже, вредит.
Чем длиннее контекст, тем хуже у модели качество ответа, в том числе и кратно - это факт.
Чем длиннее контекст, тем медленнее скорость, это справедливо для всех устройств, не уникально для мака. Если взять 3090 и взять отлаженную модель на 12B (чтобы влезала в память) и сравнить скорость вначале и на 16к контекста - падение будет почти в 2 раза.
Сверху добавляется, что с DeepSeek особая ситуация, в отличии от типичных моделей, которые используют Grouped-Query Attention (GQA), DeepSeek использует собственный Multi-head Latent Attention (MLA), который быстрее, требует меньше памяти на контекст и, по их словам, вообще во всём лучше.
У llama.cpp, движок через который все запускают gguf модели, пока нет поддержки MLA, вместо этого они вроде как делают конвертацию в GQA, из-за этого возрастают накладные расходы на контекст и скорость работы. И эта проблема для всех устройств пока не будет реализации MLA.
И не забывайте, что DeepSeek хоть и имеет размер 671B, у него только 37B активных весов, так как это MoE модель. То есть по скорости он примерно как модель размером 37B, просто занимает в памяти 671B. Поэтому это нормально, что dense модель на 70B будет медленнее. И снова, это не уникально для мака.
Буквально меньше недели назад представили черновик mla для cuda, когда отладят, то, скорее всего, реализуют и для остальных движков.
Чтобы увидеть эффективность от mla, можно посмотреть на такой форк как ik_llama - он сосредоточен на оптимизацию работы моделей на процессорах. Там уже реализовано mla. На примере Epyc 9374F 384GB RAM + 1 x RTX 4090, на 30к контексте падение меньше 20% с 11.3 t/s до 9.7 t/s:
В актуальные Mac Studio ставят LPDDR5 память, что означает практическую бесперспективность затеи с инференсом для больших моделей. Там все счастье заканчивается на этапе когда модель в принципе влезла. Но несколько токенов в секунду, которые выдает девайс, это далеко за гранью комфортной работы.
Вы путаете двухканал в обычном ПК, где на ddr5 предел это 100-120 гб/с и многоканал в маках и серверах. Только в маках еще есть специальные ядра для тензорных вычислений.
Скорость у U3 Ultra 512 Гб заявлена 819 гб/с, у 4090 для сравнения заявлена 1008 гб/с. Разница всего 23% по скорости и огромная по объему.
Если отключить аппаратное ускорение в браузерах, а в Windows отключить "Планирование графического процессора с аппаратным ускорением", то получите 22 t/s в LM Studio. Почти 40% ускорения. Переходите на llama-server и получите 30 t/s.
Совсем безумие, перейти на линукс и будет 34 t/s. И через llama-server и через LM Studio.
Qwen 30B(MoE). NVidia 4090 - 32.93 t/s.
4090 может выдавать намного больше, там ведь всего 3B активных параметров, а версия из LM Studio Q4_K_M весит всего 17.5гб. В моем случае выдает 112 t/s под Windows и 135 t/s под Linux.
Во всех случаях запуск llama-bench сборки без GPU, только avx2. Если запускать через сборку с GPU, даже если указать -ngl 0, pp будет считаться на GPU. pp - это подготовка промпта и всей истории диалога. tg - генерация новых токенов.
AMD Ryzen 5600g + b550 phantom gaming 4 + 4x 16gb ddr4 3600 16-19-19-39 CR1 Чтение в aida: 50851 MB/s Latency: 74 ns Модель saiga_nemo_12b.Q8_0, запуск llama-bench сборка без GPU, только avx2:
pp: 13.52 t/s
tg: 3.89 t/s
Intel Core i7-14700 (без K) + msi pro z790-p + 2x 48gb ddr5 6400 KingBank 32-39-39-99 CR2 Чтение в aida: 97709 MB/s Latency: 71.2 ns Модель та же, запуск идентичный. Память заводится на заводском XMP 6400:
pp: 26.01 t/s
tg: 6.98 t/s
Intel Core i7-14700 (без K) + msi pro z790-p + 4x 48gb ddr5 5400 KingBank 38-38-38-77 CR2 Чтение в aida: 80734 MB/s Latency: 75.6 ns Модель та же, запуск идентичный. Дешевые китайские 4 планки не завелись на XMP, пришлось снизить до 5200-5400:
Начиная с 0.3.14 в LM Studio это в явном виде работает, можно отключать, можно менять стратегию заполнения, чтобы вначале заполнялась самая быстрая. LM Studio 0.3.14: Multi-GPU Controls
Но это сделать сложно, использую обычную материнскую плату на AMD x470 чипсете. Там какие-то сложность с вторым PCI-E16x, если установлен второй SSD(
Вы можете подключить gpu в любой маленький x1 pcie, или урезанный x16, либо даже в слот для nvme через переходник. Для инференса достаточно x1 pcie 1.0, не важны ни x16 линии, ни версии pcie.
Ширина канала виляет только на время загрузки слоев в память видеокарты - один единственный раз во время загрузки модели, а на сами вычисления это уже никак не влияет. На материнках обычно стоит много pcie 3.0 x1, это 1 гб/с, если загружать с sata ssd, то упретесь в скорость диска, а не канала pcie, а если с nvme, то будет 16 секунд на загрузку, вместо 6 секунд.
Так что можно утыкать всю материнку кучей видях через удлинители, на localllama периодически люди выкладывают своих монстров франкенштейна, где видеокарты кто как смог закрепил вне корпуса, и там обычно их от 4 до 10.
В типичный домашний комп можно без проблем засунуть 3.5 слотовую 4090 и 2 слотовую 4060ti/5060ti, нужно только материнку правильно подобрать, чтобы расстояние между двумя pcie было достаточным. У меня на b550 phantom gaming 4 идеально влезло, не пришлось ничего придумывать.
Скажите, что важнее для второй видеокарты, скорость самого чипа или размер памяти? Или на ней то же будет производиться исполнение и важно и то и другое?
Слои распределятся по видеокартам, поэтому каждая будет вычислять, но требования к этому на столько малы по сравнению к скорости памяти, что фактически важны только объем и скорость памяти.
Можно дообучать (файнтюнить) квантованные bnb модели. Оригинальные модели и bnb версии найти не сложно, они выкладываются на Hugging Face, где-то рядом с gguf моделями.
Обучение 13B возможно на одной 24гб GPU за счет 4-битной qlora. Создатель моделей Saiga рассказывал как быстро дообучать существующую модель на своих данных на одной GPU: https://habr.com/ru/articles/759386/
Другой пользователь показал как дообучить Сайгу: https://habr.com/ru/articles/776872/
Сейчас у Сайги получаются очень годные файнтюны для русского языка, поэтому можно начать с этих статей и дальше уже искать информацию про более современные методы вроде qlora.
Дома дообучить R1 на своих данных можно, например, на б/у серверах с 512гб памяти, это будет очень не быстро, но в теории возможно.
Для документаций применяется другой подход - RAG.
Для RAG не нужно дообучать модель, вместо этого создается векторная база из ваших данных, и после к этой базе уже можно подключать любую модель.
Движки RAG разные и работают с разным качеством, поэтому вам нужно поискать готовые llm клиенты с поддержкой RAG, сейчас их не мало, и сравнить качество. В тех же клиентах обычно ещё сразу есть и веб-поиск и т.д.
Часто вместо RAG это называют как-то вроде Chat with Documents или просто нужно перетянуть файл в поле чата. Например, где это реализовано (не все решения опенсорсные):
LM Studio
Jan
Cherry Studio
Msty
Open Webui
А для чего для игр использовать именно wine, а не proton? В частности тот же portproton куда удобнее, при том же способе использования как wine.
На 2 вечера несмешного изучения. Всё куда проще, чем кажется.
Нет, будем запускать локальный DeepSeek на домашнем железе.
Но даже для маленьких моделей лучше брать UD-кванты, так как Q6/Q8 не всегда влезут в 24гб, а Gemma3, которая не такая быстрая как Qwen3-32B-A3B, целиком в VRAM залезет.
Там llama.cpp кванты без MLA, поддержки которой ещё нет в llama.cpp. Зато MLA-кванты R4 уже есть в ik_llama.
MLA позволяет засунуть 160к контекста в 11гб без квантования kv-кэша.
DeepSeek ещё в V2 представили MLA (Multi-head Latent Attention). Полтора года назад GQA (Grouped Query Attention) было прорывом, позволяя ускорить вывод модели и размера контекста без потери качества, все модели делались на GQA. MLA это более эффективная версия GQA. Есть инструмент TransMLA для конвертации GQA в MLA, и более быстрый FlashMLA.
В ik_llama реализовано и MLA, и тензоры оптимизированы для вычисления на avx2 CPU, поэтому R4 кванты работают побыстрее, чем обычная llama.cpp, вмещают 32к контекста в одну GPU рядом с тензорами внимания в формате удобном для GPU, что дает ускорение и контекст на одной видеокарте.
Ещё важно различать 2 бита и 2 бита динамического квантования UD. Потому что если вы возьмете обычные 2 бита, вы не получите такое качество, как с UD. По вашей ссылке видно, что UD-Q2_K_XL выступает на уровне Q4_K_M, но весит на 165гб меньше, а вот стандартный Q2_K_L и весит больше, и ощутимо провисает в качестве.
Есть специализированная Aya Expanse (8B и 32B), она не самая умная, но она заточена на перевод на 23 языках (Arabic, Chinese (simplified & traditional), Czech, Dutch, English, French, German, Greek, Hebrew, Hindi, Indonesian, Italian, Japanese, Korean, Persian, Polish, Portuguese, Romanian, Russian, Spanish, Turkish, Ukrainian, and Vietnamese).
По крайней мере с японского на русский она лучше чем Gemma3 переводит.
Есть еще более свежая Aya Vision 8B/32B, может как и Gemma3 переводить картинки, но у неё нет gguf, только bnb-4bit, что не так удобно для запуска.
Когда запускаете модель распространенными способами, хоть через LM Studio, хоть напрямую через llama.cpp, хоть через ollama, то там включается openai completion api, который является стандартом для всех API llm.
Во 2 и 3 случаях api-сервер будет включен автоматически, в LM Studio надо будет галочкой включить.
Ставите для VSCode плагины Continue или Cline/RooCode, в нем указываете адрес api-сервера, теперь у вас в редакторе будет доступен "локальный Copilot", позволяющий работать с вашим кодом напрямую.
Можно легко переключать локальный api на бесплатный openrouter, и так далее.
Брать лучше UD кванты, они лучше сбалансированы. Они отмечены как UD либо как K_XL (обычные кванты имеют размер K_M или K_S), в UD XL квантах важные веса внимания меньше квантуют.
Вообще Q5_K_буква - цифрой указывается битность квантования основных весов, а буквой (S - small, M - medum, XL - x large) отмечена степень квантования тех самых важных тензоров внимания. Если рядом с Q есть i, то значит для квантования использовалась матрица важности imatrix. Такие кванты весят меньше, но имеют почти такое же качество как более тяжелые кванты, но с одним нюансом, если данные из матрицы важности совпали с вашим сценарием использования, обычно imatrix пытаются делать универсальным, что работает для программирования или английского, но часто там нет других языков, например, русского языка, поэтому русский проседает в i-квантах, если не делать их самостоятельно со своей imatrix (делается из обычного текстового файлика, где в кучу свалены нужные вам варианты использования модели, можно взять чужой и добавить к нему нужное).
Чтобы запустить полноценный большой DeepSeek 671B на таком желез, вам нужно разбираться в консоли.
Для программирования нужен большой контекст, просадка на большом контексте критична для локального запуска, и чтобы этого не было, сейчас есть только 1 решение, использовать ik_llama, это форк llama.cpp заточенный на работу на CPU с большим контекстом и дополнительным ускорением через 1 видеокарту (в последних релизах ускорение через multi-gpu тоже поддерживается, если собрать версию с нужным ключем).
Для ik_llama подходят любые кванты, но чтобы получить скорость вам нужно взять специальные R4 кванты заточенные именно для CPU + 1 GPU, которые доступны только вот тут. Попутно эти новые кванты по PPL лучше всех остальных доступных сейчас: https://huggingface.co/ubergarm/DeepSeek-R1-0528-GGUF
Они работают только на ik_llama, их можно собрать самостоятельно или перекодировать из обычных gguf на лету через ключ
-rtr
, но готовые удобнее. Там же есть инструкция как их запустить на различных конфигурациях железа.Если у вас Windows, то вам ещё придется разобраться как собрать ik_llama самостоятельно, для этого нужно воспользоваться инструкций от llama.cpp, они по сути совпадают. Это не сложно, но потратить вечерок, чтобы разобраться как запустить придется.
С этим довольно туго, нет какой-то документации, есть лишь обрывистые объяснения в репозиториях или комментариях. При чем часто используют синонимы одной и той же команды, что еще больше запутывает, например,
-ot ".ffn_.*_exps.=CPU"
тоже самое что-ot exps=CPU
и тоже самое что-ot "([0-9]+).ffn_.*_exps.=CPU"
.Почитать изначальную реализацию в llama.cpp, еще реализация и обсуждение в ik_llama. Инструкция от unsloth по локальному запуску deepseek R1, где есть примеры с ot как использовать больше VRAM или меньше: https://docs.unsloth.ai/basics/deepseek-r1-0528-how-to-run-locally
Общая концепция такая:
Модель llm трансформера состоит из слоев, например, Qwen3 30B-A3B состоит из 49 слоев (48 внутренних слоев и 1 выходной слой).
Типичный слой трансформера состоит из тензоров внимания (attn) и тензоров основных весов нелинейного преобразования данных (ffn).
В Dense моделях все слои общие и нужны для вычисления каждого следующего токена на каждом шагу.
В MoE моделях слои представляют собой отдельных экспертов и на каждый токен используется только часть слоев-экспертов.
В MoE бывает разная архитектура, в некоторых реализациях есть общие слои (много в llama4 maverick, мало в deepseek), а есть только эксперты (qwen3).
Посмотреть слои, названия тензоров и прочее можно на huggingface, кликнув на любой gguf квант:
У Dense моделей ускорение получается, если вынести часть слоев на GPU (через
-ngl X
), так как на каждом шагу нужны все слои, то это работает просто разделением по слоям. В MoE на каждом шагу нужны не все слои, поэтому если просто вынести через-ngl 10
, то выгрузятся первые 10 слоев, но шанс, что на каждом шагу будут выпадать именно эти слои мал и ускорения почти не будет.Поэтому для MoE появилась другая идея, вынести тензоры внимания attn из каждого слоя на GPU, а массивные веса ffn оставить на CPU.
Сначала всё выносим на GPU (
-ngl 99
или меньшее число, сколько хватает vram), а потом переопределяем тензоры и ffn отправляем на CPU. Параметр-ot
можно много раз писать, и если остается vram или есть несколько видеокарт, то можно явно раскидать слои по ним, например, на вторую карту CUDA отправить с 3 по 6 слои-ot "([3-6]).ffn_.*_exps.=CUDA1"
, или, если видеокарта AMD/Intel, использовать имена для Vulkan/ROCM устройств, например, Vulkan0, имена GPU пишутся в консоли во время запуска llama.cpp.В случае с Llama 4 Maverick 402b, где есть общие слои, можно получить 20 t/s за счет такого ускорения на одной GPU, в случае с Qwen3 235b, где нет общих слоев, получится всего 4.4 t/s.
В случае с Qwen3 тензоры внимания занимают всего 7гб vram, поэтому можно догрузить карту:
-ot "blk.([0-9]|1[0-3]).ffn.=CUDA0" -ot exps=CPU
, то получим скорость 5 t/s.Возможно это не оптимальные параметры для Qwen3, например, можно попробовать выгрузить только ffn_down_exps 40 слоев:
-ot "blk.([0-9]|[0-3][0-9]).ffn_down_exps.=CUDA0" -ot exps=CPU
, то скорость будет чуть быстрее.Примеры, как люди используют эту команду:
Пример использования на 4 gpu
Попытка объяснить как использовать ot на примере llama4
Еще одна попытка на примере Dense модели, где метод тоже пригодился.
Запустить можно просто с nvme, только скорость будет ниже порога комфортного использования на порядок, в районе 0.1 t/s.
Порог комфортного использования 5 t/s. Но для размышляющих моделей это скорее будет 10 t/s.
Скорость генерации тем выше, чем выше скорость памяти.
Запускать в домашних условиях нужно квантованную gguf версию.
Размер кванта Q4_K_M считается близким к оригиналу, но уменьшает размер модели в 4 раза (в случае с DeepSeek в 2 раза).
Одна GPU на 16гб дает хорошее ускорение при использовании --override-tensor параметра, через который можно на GPU вынести только общие тензоры, а MoE тензоры оставить на CPU. Если есть несколько GPU, можно тензоры до загрузить по видеокартам, сначала общие, потом отдельные слои.
Можно подключить несколько GPU, количество линий pcie не важно, можно и в x1, так как данные загружаются в память 1 раз и дальше уже считаются внутри GPU. Лишную VRAM можно заполнить тензорами через тот же -ot параметр (для обычных моделей не нужен -ot, там разгрузка на GPU идет по слоям, разделение по тензорам нужно только для MoE моделей).
Модель DeepSeek R1/V3 имеет размер 671B, но так как это MoE модель, то активных только 37B параметров. 37B в кванте Q4_K_M это примерно 22гб. Поэтому нужна скорость памяти ~110 гб/с чтобы запустить модель на скорости 5 t/s без помощи gpu (цифры не точные, а примерные).
100 гб/с можно получить на двухканальной DDR5 с частотой 6400+ Mhz. Например, недорогая китайская KingBank 2x48gb 6400Mhz позволяет получить 97 гб/с на Intel процессорах.
Чтобы вместить DeepSeek R1 Q4_K_M нужно 404гб + размер контекста.
На данный момент для домашних ПК выпускают только модули памяти размером 48гб, поэтому можно получить только 192гб собрав из 4х модулей памяти (но 4 модуля по 48гб не стабильно работают и не заводятся на 6400Mhz и частоту придется снижать, скорость в лучшем случае снизится до 80 гб/с или ниже).
В общем на домашнем ПК сейчас нельзя набрать 404 гб обычной памяти. Поэтому есть такие варианты:
Серверное б/у оборудование, например, устаревшие Epyc или Xeon процессоры. Б/у стоит намного дешевле нового и можно набрать до 1тб памяти в 6-12 каналах памяти. Чем больше каналов, тем выше скорость, в итоге можно получить там скорости выше 200+ гб/c, вплоть до 400 гб/с. Q4_K_M на длинном контексте в 30к запускают на хорошей скорости через ik_llama где реализовано ускорение через MLA:
Купить что-то вроде Orange Pi AI Studio pro 192гб или аналогов, которые сейчас появляются. Скорость памяти там 200+ гб/с, но 192гб всё еще не хватит, поэтому их потребуется несколько и объединить их тем или иным способом. Либо Mac Studio на 512гб, скорость памяти там 800 гб/с, но без поддержки MLA на длинном контексте будет не так быстро как с GPU и -ot.
Взять квант поменьше, Unsloth предоставили свои варианты сильного квантования UD, где важным тензорам они отдают больший приоритет и подвергает их меньшей степени квантования, а MoE веса квантуют сильнее. Можно подобрать квант, который влезет в домашние 192гб, либо 96гб + запуск с nvme. И иметь одну GPU на 16гб.
Для эксперимента я запустил квант UD-Q2_K_XL весом 234 гб на обычном ПК, это 2.7-битное квантование с лучшим балансом между размером и качеством.
Двухканальная DDR5 192гб 4000mhz, скорость памяти в таком случае 57 гб/с, по скорости это на уровне двухканала ddr4. Что не влезло в память загружалось с nvme, использовал
-ot ".ffn_.*_exps.=CPU" -fa -ngl 99
Скорость 3 t/s под Linux на Nvidia, под Windows медленнее, не знаю почему.
Можно взять UD-IQ2_XXS (216гб), это 2.4-битное квантование с использованием imatrix, квантование через матрицу важности imatrix позволяет сильнее сжать модель при том же качестве, модель будет меньше данных считывать с nvme, что немного добавит скорости. Или взять UD-IQ1_M (201гб) или UD-IQ1_S (185гб) - то этот 1.78-битное квантование, квант целиком влезет в 192гб, качество будет ниже, но скорость будет как раз в районе 5 t/s.
UPD. Проверил UD-IQ1_S, скорость 5.3 t/s, а pp в 7 раз быстрее.
Нажмите кнопку DeepThink (R1)
Диффузионные не меняют парадигму текущих LLM, они не исправляют проблему галлюцинаций, уверенности в своем неверном ответе, не исправляют зависимость от размера контекста, который чем выше, тем хуже качество ответа, а лишь ускоряют скорость инференса за счет снижения качества и возрастания требований к обучению примерно в 5 раз.
"Главных" новостей хватает на каждый год, разработчикам подо всё нужно выбивать бюджет и ресурсы на обучение, иначе новостей было бы больше:
Диффузионная архитектура появилась на 2 года раньше трансформеров в 2015 году, трансформеры представлены в 2017 году.
В 2021 году была SUNDAE, один из первых рабочих прототипов диффузионных LM работающий не на авторегрессии. Может и ещё раньше было что-то рабочее.
В 2022 году диффузионные текстовые модели применялись в картиночных нейросетях.
Первый перспективный прототип диффузионных языковых моделей CodeFusion представлен 06.03.23 размером 75M, по их словам конкурирующая с gpt-3 в кодирование.
В декабре 2024 представлен то, что уже можно назвать LLM (ключевое тут Large) с мышлением названным DoT. Уже тогда интернет называл это будущим LLM.
В феврале 2025 представлены рабочие модели LLM размером 7-8B, которые уже в бенчмарках конкурируют с авторегрессивными вариантами, но вне бенчмарков не впечатляют.
В мае 2025 гугл представляет Gemini Diffusion.
Первые диффузионные llm представлены 3 месяца назад, и код и веса открыты:
https://huggingface.co/GSAI-ML/LLaDA-8B-Instruct
https://huggingface.co/Dream-org/Dream-v0-Instruct-7B
https://huggingface.co/kuleshov-group/bd3lm-owt-block_size16
Можно в живую посмотреть, как подбираются токены в реальном времени:
https://huggingface.co/spaces/multimodalart/Dream
У первых моделей качество очень сильно хромает, но скорости безумны. У гугла в разы больше ресурсов, и если им удалось побороть проблему с качеством, то это покажет другим создателям моделей, что этот путь не безнадежен.
Поисковые системы лучше всего ищут в ночь с субботы на воскресенье.
Если искать причину, то как вариант, это может быть когда свободные ресурсы есть, выкручивают бюджет размышления выше, когда пользователей становится много, бюджет уменьшают.
Чем длиннее контекст, тем хуже у модели качество ответа, в том числе и кратно - это факт.
Чем длиннее контекст, тем медленнее скорость, это справедливо для всех устройств, не уникально для мака.
Если взять 3090 и взять отлаженную модель на 12B (чтобы влезала в память) и сравнить скорость вначале и на 16к контекста - падение будет почти в 2 раза.
Сверху добавляется, что с DeepSeek особая ситуация, в отличии от типичных моделей, которые используют Grouped-Query Attention (GQA), DeepSeek использует собственный Multi-head Latent Attention (MLA), который быстрее, требует меньше памяти на контекст и, по их словам, вообще во всём лучше.
У llama.cpp, движок через который все запускают gguf модели, пока нет поддержки MLA, вместо этого они вроде как делают конвертацию в GQA, из-за этого возрастают накладные расходы на контекст и скорость работы. И эта проблема для всех устройств пока не будет реализации MLA.
И не забывайте, что DeepSeek хоть и имеет размер 671B, у него только 37B активных весов, так как это MoE модель. То есть по скорости он примерно как модель размером 37B, просто занимает в памяти 671B. Поэтому это нормально, что dense модель на 70B будет медленнее. И снова, это не уникально для мака.
Буквально меньше недели назад представили черновик mla для cuda, когда отладят, то, скорее всего, реализуют и для остальных движков.
Чтобы увидеть эффективность от mla, можно посмотреть на такой форк как ik_llama - он сосредоточен на оптимизацию работы моделей на процессорах. Там уже реализовано mla. На примере Epyc 9374F 384GB RAM + 1 x RTX 4090, на 30к контексте падение меньше 20% с 11.3 t/s до 9.7 t/s:
Сомнительно.
Вы путаете двухканал в обычном ПК, где на ddr5 предел это 100-120 гб/с и многоканал в маках и серверах. Только в маках еще есть специальные ядра для тензорных вычислений.
Скорость у U3 Ultra 512 Гб заявлена 819 гб/с, у 4090 для сравнения заявлена 1008 гб/с. Разница всего 23% по скорости и огромная по объему.
DeepSeek R1 671B Q4 запускают на 18 t/s при потреблении в 51 ватт.
Если отключить аппаратное ускорение в браузерах, а в Windows отключить "Планирование графического процессора с аппаратным ускорением", то получите 22 t/s в LM Studio. Почти 40% ускорения.
Переходите на llama-server и получите 30 t/s.
Совсем безумие, перейти на линукс и будет 34 t/s. И через llama-server и через LM Studio.
4090 может выдавать намного больше, там ведь всего 3B активных параметров, а версия из LM Studio Q4_K_M весит всего 17.5гб.
В моем случае выдает 112 t/s под Windows и 135 t/s под Linux.
Во всех случаях запуск llama-bench сборки без GPU, только avx2. Если запускать через сборку с GPU, даже если указать -ngl 0, pp будет считаться на GPU.
pp - это подготовка промпта и всей истории диалога.
tg - генерация новых токенов.
AMD Ryzen 5600g + b550 phantom gaming 4 + 4x 16gb ddr4 3600 16-19-19-39 CR1
Чтение в aida: 50851 MB/s
Latency: 74 ns
Модель saiga_nemo_12b.Q8_0, запуск llama-bench сборка без GPU, только avx2:
pp: 13.52 t/s
tg: 3.89 t/s
Intel Core i7-14700 (без K) + msi pro z790-p + 2x 48gb ddr5 6400 KingBank 32-39-39-99 CR2
Чтение в aida: 97709 MB/s
Latency: 71.2 ns
Модель та же, запуск идентичный. Память заводится на заводском XMP 6400:
pp: 26.01 t/s
tg: 6.98 t/s
Intel Core i7-14700 (без K) + msi pro z790-p + 4x 48gb ddr5 5400 KingBank 38-38-38-77 CR2
Чтение в aida: 80734 MB/s
Latency: 75.6 ns
Модель та же, запуск идентичный. Дешевые китайские 4 планки не завелись на XMP, пришлось снизить до 5200-5400:
pp: 23.75 t/s
tg: 5.85 t/s
Через консоль: https://github.com/ggml-org/llama.cpp/tree/master/tools/rpc
Не знаю есть ли GUI для этого.
Начиная с 0.3.14 в LM Studio это в явном виде работает, можно отключать, можно менять стратегию заполнения, чтобы вначале заполнялась самая быстрая. LM Studio 0.3.14: Multi-GPU Controls
Вы можете подключить gpu в любой маленький x1 pcie, или урезанный x16, либо даже в слот для nvme через переходник. Для инференса достаточно x1 pcie 1.0, не важны ни x16 линии, ни версии pcie.
Ширина канала виляет только на время загрузки слоев в память видеокарты - один единственный раз во время загрузки модели, а на сами вычисления это уже никак не влияет. На материнках обычно стоит много pcie 3.0 x1, это 1 гб/с, если загружать с sata ssd, то упретесь в скорость диска, а не канала pcie, а если с nvme, то будет 16 секунд на загрузку, вместо 6 секунд.
Так что можно утыкать всю материнку кучей видях через удлинители, на localllama периодически люди выкладывают своих монстров франкенштейна, где видеокарты кто как смог закрепил вне корпуса, и там обычно их от 4 до 10.
В типичный домашний комп можно без проблем засунуть 3.5 слотовую 4090 и 2 слотовую 4060ti/5060ti, нужно только материнку правильно подобрать, чтобы расстояние между двумя pcie было достаточным. У меня на b550 phantom gaming 4 идеально влезло, не пришлось ничего придумывать.
Слои распределятся по видеокартам, поэтому каждая будет вычислять, но требования к этому на столько малы по сравнению к скорости памяти, что фактически важны только объем и скорость памяти.