Oleksandr Kuzmenko, РедакторОпубліковано 5 хв читанняЗа участі AI · перевірено редактором
TL;DR
- Повна реалізація інференсу Llama 3.2 1B напряму на C++17 та CUDA з memory-mapped завантаженням ваг.
- Посторінковий KV-кеш із блоками по 16 токенів та online-softmax декодуванням у FP32.
- Понад 80 сторінок рукописних нотаток, що детально розкривають математику інференсу з перших принципів.
Архітектура: від ваг safetensors до логітів
Проєкт samir-vllm пропонує реалізацію повного циклу генерації для Llama 3.2 1B Instruct. Двійкові ваги завантажуються напряму з файлу model.safetensors через механізм memory-mapped IO (mmap), що виключає зайві копіювання між RAM і VRAM. Рушій містить кастомний BPE-токенізатор, а також оптимізовані кернели для RoPE, FP32 RMSNorm і SwiGLU-проекцій для всіх 16 шарів моделі.
Пейджинг KV-кешу та динамічний планувальник
Замість статичного виділення пам'яті під максимальний контекст, рушій використовує посторінкову структуру пам'яті:
- Пул фізичних сторінок: Типовий розмір 128 МіБ (
--kv-cache-mib), де кожна сторінка вміщує 16 токенів K та V у форматі BF16. - Online Softmax: Під час декодування потоки читають сторінки безпосередньо з кешу без об'єднання в монолітний буфер.
- Continuous Batching: Планувальник використовує систему квот (
prompt_tokens + allowed_new_tokens - 1). Це усуває дедлоки та аварійні зупинки через брак пам'яті.
Понад 80 сторінок інженерних конспектів
Репозиторій супроводжується посібником *Inference from Scratch* на 80+ сторінок рукописних нотаток та схем, які детально пояснюють математику GQA, prefill та decode фази без використання згенерованих ШІ текстів.
