Локальні великі мовні моделі спочатку здаються блискавично швидкими. Ви завантажуєте модель на 7B або 13B параметрів, відправляєте короткий промпт, і токени стрімляться по екрану з комфортною швидкістю. Але потім ви вставляєте довгий блок коду або історія чату розростається до десятка повідомлень, і модель починає «повзти». Сповільнення рідко буває поступовим. Це обрив. Однієї миті GPU генерує токени; наступної — ваш системний монітор показує зростання навантаження на пам'ять, і генерація перетворюється на заїкання. Ви не можете точно передбачити, коли це станеться, за допомогою якоїсь зручної формули. Ваш єдиний надійний орієнтир — це саме залізо.

Прихована ціна контексту

Кожен згенерований токен додає стан до KV-кешу. Цей кеш зберігає ключі (keys) та значення (values), обчислені під час фаз prefill та генерації, і він займає місце в пам'яті разом із вагами моделі, буферами уваги (attention buffers) та накладними витратами під час виконання. На типовій споживчій GPU з 12 ГБ або 16 ГБ VRAM KV-кеш зрештою починає конкурувати за простір з усім іншим. Коли виділена відеопам'ять заповнюється, операційна система не видає помилку і не зупиняється. Вона тихо переносить надлишок у спільну пам'ять, перекачуючи дані між GPU та системною RAM через шину PCIe. Ця шина швидка для передачі файлів, але вона надзвичайно повільна порівняно з пропускною здатністю пам'яті всередині відеокарти. Результатом є не незначне падіння продуктивності, а повний колапс.

Три ознаки того, що ви досягли «обриву»

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

  • Зростання обсягу спільної VRAM. Це пам'ять, яку драйвер GPU витіснив із виділеної відеопам'яті в пул, керований операційною системою хоста. Як тільки цей показник перевищує нуль, ви перетнули межу.
  • Зростання використання системної RAM. Надлишок має кудись потрапити, і це місце — ваша основна пам'ять. Якщо використання RAM зростає під час генерації токенів моделлю, це означає, що дані вивантажуються з GPU.
  • Падіння швидкості оцінки (eval speed) вдвічі або більше. Сповільнення на 10% може означати термальний тротлінг або фонові процеси. Падіння на 50% або більше означає, що вузьким місцем стали не тензорні ядра, а пропускна здатність пам'яті та затримка PCIe. Коли ви бачите, як швидкість генерації падає з двозначних чисел до однозначних, ви вже зірвалися з обриву.

Чому ваш швидкий бенчмарк, швидше за все, бреше

Коротка перевірка (smoke test) дасть вам хибну впевненість. Якщо ви тестуєте модель із промптом на сто токенів, бачите стабільну пропускну здатність і вважаєте роботу завершеною, ви виміряли лише «медовий місяць». KV-кеш майже порожній. Шари моделі не були навантажені довгим prefill. Справжній об'єм пам'яті проявляється лише після того, як модель опрацює суттєвий промпт і кеш заповниться до свого реального робочого розміру. Ви повинні тестувати за допомогою глибокого prefill та тривалих сесій генерації. Дайте контексту реально накопичитися. Тільки тоді тиск на пам'ять стабілізується і покаже вам справжню межу.

Пошук вашого ліміту за допомогою llama.cpp

Якщо ви запускаєте моделі через llama.cpp, ви можете виміряти свою межу за допомогою простої арифметики та терплячого тестування.

1. Виміряйте використання спільної пам'яті.
Зафіксуйте базовий рівень виділеної VRAM із мінімальним промптом, потім запустіть завдання з довгим контекстом і занотуйте пік. Відніміть базовий рівень від пікового. Різниця — це те, що витіснилося з вашої GPU у спільну системну пам'ять.

2. Розрахуйте дельту RAM.
Зробіть таке ж віднімання для системної RAM. Відніміть базовий рівень RAM від пікового під час тривалого прогону. Це число точно покаже, скільки даних було перенесено з відеокарти до вашої основної пам'яті. Воно кількісно визначає «витік» через шину.

3. Засічіть час колапсу швидкості оцінки.
Порівняйте ваш базовий показник токенів на секунду зі швидкістю після того, як модель «пережує» довгий документ. Ви можете спостерігати, як модель працює на швидкості сімнадцяти токенів на секунду, коли контекст свіжий, а потім видає лише два токени на секунду, коли кеш роздувся. Це падіння на п'ятнадцять токенів — ваша «канарейка в шахті».

Визначення точки перелому

To map the curve accurately, do not settle for one lonely data point. Run three distinct trials at 16,000 tokens, 32,000 tokens, and 65,000 tokens. Two points might suggest a line, but two dots are just a guess. The third point proves whether you are looking at measurement noise or a real memory wall. Subtract the results between runs to calculate how much extra memory each additional thousand tokens consumes on your specific combination of model, quantization layer, and GPU.

Once you have that slope, you can project forward. Take your per-token cost, multiply it by the target context length, divide by 1024 to move between units, and add the result to your base model VRAM load. The equation looks like this:

Model VRAM load + (tokens × memory per token ÷ 1024) = Theoretical VRAM usage

This projection is not prophecy. It is a guidepost derived from actual behavior. Use it to estimate your ceiling before you commit to a full production run.

Why Paper Formulas Fail, and What Quantization Can Fix

Textbook formulas ignore the messy reality of local inference. Different architectures allocate attention buffers differently. Your operating system reserves VRAM for the display driver, compositor, and CUDA context. Driver versions change how aggressively they use shared memory. A theoretical equation cannot know how much VRAM is actually free on your machine at 2:00 PM with a browser full of tabs open. You have to run the model on your specific hardware and watch the meters.

Quantization offers partial relief. Moving the KV cache from f16 to q8_0 halves its memory footprint while keeping precision high enough for nearly all practical tasks. That change buys you headroom. It does not grant immunity. The cache still grows linearly with every token you feed in. Eventually, even the reduced size overwhelms your available dedicated memory and the spillover to system RAM begins. The pressure only stops when the context window is capped or the data stops moving.

The Real Takeaway

Do not trust marketing slides, parameter counts, or back-of-the-envelope math. Load the model. Open your system monitor. Run a 65,000-token thread, watch the RAM climb, and count the tokens per second. The numbers that appear on your specific screen, on your specific GPU, are the only numbers that matter. Context always wins. Your job is to know exactly when it wins on your machine.