Ghosted this account for a while. 👋
Was doing data analysis and chasing crypto. Now: final year CS, building AI systems full-time.
Working on Outpace — an AI tool tracking B2B competitive intel. Zero users, building in public anyway.
@skpnky Building Outpace — AI tool tracking competitor moves & market signals for B2B.
Still early and zero users, so rip it apart.
https://t.co/AQwNVAwJfX
@MarkoCirix Hardest lesson in tech. Spending months polishing code nobody asked for hurts way more than building out loud and failing fast. What are you building now?
@matankatzzzz Outpace — AI that watches your competitors' pricing, hiring, and reviews so you find out what they're doing before your customers tell you.
https://t.co/AQwNVAwJfX
@TarunyaKesh@X Fellow builder in the AI/ML transition here — final-year CS student working on Outpace. Good luck with the next GSoC round.
Happy to connect!
@makhmudov9807 Mostly pricing page diffs and job postings tbh, those tend to have the clearest intent behind them. A company quietly hiring for "growth" or dropping prices usually means something's shifting. Website and review monitoring are in there too but way noisier signal-wise.
Ghosted this account for a while. 👋
Was doing data analysis and chasing crypto. Now: final year CS, building AI systems full-time.
Working on Outpace — an AI tool tracking B2B competitive intel. Zero users, building in public anyway.
This is exactly what I ran into building my own tiny inference server — Qwen2.5-0.5B, raw Python, CPU only, no GPU.
Naive loop: 2.27 tok/s. Added a KV-cache: 6.71 tok/s. Same output, just way faster. Wild how much is left on the table without it.
KV cache is one of the most important ideas in LLM inference, but it is often explained too casually.
During autoregressive generation, a model produces one token at a time. Without caching, each new decoding step would repeatedly recompute key and value states for tokens the model has already processed. KV caching avoids that redundant work by storing those past K/V tensors and reusing them as the sequence grows.
That sounds simple, but it has consequences across the entire serving stack. The cache grows with sequence length, consumes significant GPU memory, creates memory-bandwidth pressure during decoding, and helps explain why architectures moved from MHA to MQA and GQA, why MLA takes a different compression approach, and why systems such as PagedAttention exist in the first place. It also explains why long context is not free, why prefix caching is a separate optimization, and why KV cache should not be confused with an LLM’s memory.
I put together a technical handbook that works through this from first principles => what exactly gets cached, the tensor shapes, the memory formula, concrete MHA/GQA/MQA calculations, prefill vs. decode, MLA, PagedAttention, prefix reuse, offloading, quantization, eviction, and the common misconceptions around all of it.
The explanations are grounded in the original papers and current framework documentation.
Sharing the handbook here
Also messed around with batching and speculative decoding. Funniest result: spec decoding crushes it on repetitive text (3x speedup) and completely faceplants on anything novel — 0 draft tokens ever accepted. Learned the hard way there's no free lunch here.