По ощущениям, на Хабре одна группа пользуется LLM локально, а другая — через внешние API.
А третья еще не определилась, и у неё периодически возникают следующие вопросы:
-
Что будет, если запускать LLM на CPU вместо GPU? Сильно упадет скорость?
-
А как это от размера модели зависит?
-
А DeepSeek оригинальный очень большой — а можно его с диска подкачивать, если он в RAM не влезает?
В общем, я пару раз отвечал на данные вопросы в комментариях — но поскольку я периодически натыкаюсь на них вновь и вновь, то решил сделать эту небольшую статью.
TLDR: Я сделал небольшое HTML-приложение, которое наглядно дает ощущение скорости генерации в разных инсталляциях. Если непонятно, что там к чему — то лучше прочитать статью.
Локальный запуск LLM
Обычно локально всякие LLM-сети запускают с помощью программ типа Ollama или LM Studio — они как скачивают нужную сеть из интернета, так и запускают её у вас.
Обычно у них есть три варианта запуска:
-
Модель полностью помещается в памяти GPU (обычно Nvidia) — и это самый быстрый вариант
-
Модель полностью помещается в RAM — это приемлемый вариант
-
Модель периодически загружается с SSD через swap (это работает адски медленно, можете потом в примерах посмотреть — имхо неюзабельно)
Модели бывают разных размеров — Llama 7B, 70B, Mistral Nemo 12B и пр. Нас интересует цифирка рядом с B — это, грубо говоря, число весов модели. Будем называть его SIZEB.
При этом надо понимать следующее: оригинальные веса модели хранятся в float32 (4 байта) — и, таким образом, если вы хотите запустить оригинальную модель, вам понадобится приблизительно SIZEB x 4 Гб памяти. Т.е. 28 Гб даже для не очень серьезной по качеству 7B-модели.
Понятное дело, это очень серьезные требования к железу, и люди придумали хак: они начали квантизировать веса — т.е. кодировать их меньшим количеством битов (меньше 32 оригинальных). Понятное дело, это приводит к понижению точности и качества генерации модели — но… это зависит от уровня квантизации.
Подобные квантизированные веса сейчас чаще всего распространяются в формате gguf (вы можете его увидеть, если будете качать с сайта). Условно считается, что:
-
Квантизация q8 (8 бит на вес) почти не влияет на качество модели. Модель при этом занимает в памяти около SIZEB Гб
-
Квантизация q4 (4 бита на вес) прилично влияет на качество модели, но в целом она по-прежнему используема. (Модель занимает в памяти SIZEB/2 Гб)
Есть и другие варианты (6 бит, 2 бита, 1 бит, разные квантизации для разных слоев) — но про них как-нибудь в другой раз.
В любом случае, при работе вам всегда имеет смысл качать максимальную модель по числу битов на вес (но не более q8, т.е. 8 бит на вес), которая помещается в памяти вашего устройства — VRAM или RAM.
Например:
-
13B в q4 это 13/2 = 6.5 Гб — помещается на видеокарту с 8Гб VRAM. Но в q8 она уже занимает 13 Гб — и на ту же видеокарту она уже не поместится, только в RAM.
-
70B в q4 это 35 Гб — она уже не помещается ни в одну бытовую видеокарту — но, возможно, поместится в RAM, если её у вас много.
Скорости генерации
Теперь, собственно, самое интересное — с какой скоростью будут работать сети в той или иной инсталляции?
Вот приблизительные цифры (полученные по результатам собственных экспериментов какое-то время назад):
-
Локальные модели (помещаются на GPU / VRAM)
-
7-13B: 20 токенов/секунду
-
14-40B: 15 токенов/секунду
-
70-700B: 10 токенов/секунду
-
-
Локальные модели (на CPU / RAM)
-
7B: 8 токенов/секунду
-
14B: 5 токенов/секунду
-
20-40B: 3 токена/секунду
-
70-700B: 1.5 токена/секунду
-
-
Удаленные модели по API
-
7B-13B: 50 токенов/секунду
-
14B-40B: 35 токенов/секунду
-
70B: 25 токенов/секунду
-
200-700B: 18 токенов/секунду
-
-
Другие варианты
-
API FAST моделей: 200 токенов/секунду
-
Локальная от 32B, подгрузка с SSD: 0.2 токена/секунду
-
В реальности они могут раза в два отличаться — т.к. все зависит от процессора, видеокарты и пр., но приблизительное понимание они дают.
Интерактивный вариант
Чтобы не просто смотреть на цифры, а почувствовать, как это работает, я сделал небольшое HTML-приложение:

Пользовательские ощущения
Чисто интуитивно у меня выработалось следующее представление о скоростях с точки зрения пользователя:
-
50 токенов в секунду — ощущается как быстрое
-
10 токенов в секунду и выше — ощущается нормально
-
5 токенов в секунду — минимально приемлемый вариант с ожиданием, но еще не мучительным
Из этого следует, что, по моим ощущениям:
-
Если модель помещается в VRAM — можно пользоваться, ощущения нормальные
-
Если помещается в RAM, то нормальные ощущения от пользования моделями до 7B, условно можно пользоваться моделями до 13B; выше — ужасно медленно.
-
Подгрузка с диска дает около 0.2 т/с — можете попробовать прям в приложении это ощущение, чтобы не пробовать вживую 🙂
По API, конечно, пользоваться можно с гораздо большим удовольствием:
-
Большинство моделей выдают от 20 токенов в секунду
-
Легкие модели — OpenAI gpt-4o-mini, Google Flash 2.0 — выдают 50-100 токенов в секунду, что ощущается как очень быстрый ответ.
-
Изредка можно найти провайдеров, которые хостят модели с удивительной скоростью — например, я нашел DeepSeek 0324 со скоростью 200 токенов в секунду. Ощущение — как будто все летает, конечно. (Правда, за это приходится платить свою цену — при этом варианте контекст ограничен 8 000 токенами в противовес 128 000 в обыкновенном DeepSeek)
В общем, если:
-
Нужная вам модель не предлагается никем
-
Или у вас жесткие требования к приватности обработки данных
…используйте локальные модели. В противном случае, по моему мнению, гораздо лучше использовать удаленное API.
PS: Еще раз ссылка на приложение, в котором можно потыкать и ощутить разницу в скорости.
ссылка на оригинал статьи https://habr.com/ru/articles/896204/
Добавить комментарий