I'm currently trying to write an inference engine that combines the benefits of llama.cpp (one binary deployment, good support for heterogenous non-dataserver compute, wide quantization support) with the benefits of vLLM/SGlang (things like proper paged attention for better VRAM utilization and high concurrency).<p>Datacenter hardware is expensive and there's shortage of it but llama.cpp is slow/unoptimized for concurrent use, while vLLM/SGLang easily crash on non-common setups (things like, if you do pipeline parallelism for RTX5090+RTX4090, they will randomly crash with RAM caching enabled or select wrong kernels because they usually assume that every rank is the same device type; they also don't support Q5-Q6).<p>For me what's most interesting is to optimize inference for lack of good datacenter hardware and how to optimize for it best. I've been running an AI server in the office, and so far I've find these techniques most important for concurrent use on cheap hardware: pipeline parallelism (to accomodate for PCie), RAM caching (to quickly restore contexts into VRAM), speculative decoding (including domain-specific ngrams, they already can speed up code generation considerably without the overhead of a draft model), good kernels highly optimized for a specific device, support for Q5-Q6 (almost as good as Q8), FP8 contexts (more context to fit), paged attention (for better VRAM utilization), prefix caching, continuous batching (this is the default everywhere).<p>So far the main bottlenecks have been llama.cpp's poor VRAM utilization for contexts (you either have fixed-size slots, or use unified KV cache where each request attends to attention from all other requests and then unnecessary portions of attention are masked out), and lack of decode/prefill segregation: when a request starts prefilling a long context, all decoding threads slow down to like 5 tok/sec. On the other hand, vLLM/SGLang feel superbuggy if you don't run them on some officially approved node like 8xH200
> Speculative decoding is the process of guessing which tokens a model might generate, then validating those guesses.<p>As a computer engineer, it’s always interesting to see optimizations applied at different levels of the stack.<p>Speculative execution became pretty popular in the 90s, eventually used in basically every x86 design.<p>Then in the mid-2000s the Speculator[0] paper brought that concept to distributed systems, which we’re still seeing work on[1][2].<p>Everything old is new again (:<p>[0]<a href="https://www.cs.princeton.edu/courses/archive/fall07/cos518/papers/spec-execution.pdf" rel="nofollow">https://www.cs.princeton.edu/courses/archive/fall07/cos518/p...</a><p>[1]<a href="https://www.usenix.org/system/files/osdi25-shen-weihai.pdf" rel="nofollow">https://www.usenix.org/system/files/osdi25-shen-weihai.pdf</a><p>[2] <a href="https://www.microsoft.com/en-us/research/publication/distributed-speculative-execution-for-resilient-cloud-applications/" rel="nofollow">https://www.microsoft.com/en-us/research/publication/distrib...</a>
> guessing which tokens a model might generate<p>A transformer that generates tokens based on pre-training? We could call it a GPT for short.
Can we expect similar issues such as spectre and meltdown that intel experienced with speculative execution.. but, in the form of prompt injection/poisoning?
Ok, I'll bite: no, considering these are very different domains and you don't get system access by getting the wrong speculative branch for your next text token, you just get a slightly different (but probably still related enough) text.
> optimizations applied at different levels of the stack<p>That's because it's just "guess and check" not some deep universal insight.
It's closer to "we can make this highly parallel for not that much cost, but we struggle to use that concurrency. So what if we just guess what the next step is going to be? If we are right we get a big speedup, if we are wrong we just throw that work away". Which I would classify as a notable insight. Doing work that you are 50% certain is useless is not the most obvious thing
Simple optimizations are often the best :)
<p><pre><code> Inference techniques either move a deployment along the latency–throughput frontier or push the entire frontier out, creating more efficiency to allocate.
</code></pre>
This is a tautology. You can say that with anything. Gastronomy techniques will make a previous recipe better, or create a new recipe better than others, or a mix of both.
My RTX 3090 is still laughing at my attempts to run 70B models efficiently.
My daily struggle is trying to make a 7B model respond in under 500ms without breaking the bank. This hits home.
this is a nice and concise writeup. what's striking to me is that these techniques really have not changed in /years/. sure, precision has become slightly lower, spec decoding acceptance has gotten slightly better and the complexity of parallelism is trickier with mixture of experts. but no new concepts in a very long time!<p>the absolute most impactful improvements for inference comes at architecture design time. I firmly believe everyone who cares about impacting model efficiency should look there
Nice read. I was wondering what can one do to get into inference engineering as simple theoretical knowledge is not sufficient and switching profiles is tough for someone with years of experience.
You know what <i>I'm</i> curious about? Whether you have brand guidelines inside the company, a Claude skillset, or the blog post author makes the charts in line with the brand colours and so on.
> A model is a “frontier model” if it offers the highest degree of intelligence at a given cost or size.<p>I would define a "frontier model" as offering the highest degree of intelligence at <i>any</i> cost, or <i>without regard</i> to cost. The frontier today is clearly Fable/Mythos, with the "efficient frontier" at Opus/Sol.
Your partial quote is quite misleading. The article obviously talks about "efficient frontier", not "intelligent frontier".<p>>In the AI industry, we borrowed the term “efficient frontier” from economists. We use it to talk about managing tradeoffs, most often the tradeoff between cost and capabilities for models. A model is a “frontier model” if it offers the highest degree of intelligence at a given cost or size.
The author does not deeply mention that quality/intelligence is a third dimension here in addition to throughput and latency, and the frontier is jagged so quality and intelligence require bespoke benchmarks to evaluate tradeoffs for speed and cost.
These are both good points that I attempted to cover, quotes:<p>> In practice, the efficient frontier is very jagged. Rather than a smooth, continuous line between outcomes, small changes can have big impacts. These cutoff points are often unintuitive and must be discovered empirically through sweeps.<p>> However, quantization introduces a new set of tradeoffs between quality and serving efficiency. This is a particularly jagged frontier, where a large degree of improvement to serving efficiency is possible with little-to-no reduction in model quality, especially when using microscaling floating-point number formats like MXFP4 and NVFP4.<p>Would appreciate ideas on how to explain in greater depth
good recap on the recent inference techniques!
"the efficient frontier" is an important landmark of (investment) portfolio theory. It proves/explains/illustrates how you can combine selections from a diffuse cloud of individual investments and still land on a frontier that is better than any of your individual choices. It's the entire basis of "diversify your portfolio".<p>The efficient frontier of LLM inference is a line, not a frontier.<p>this is a frontier:<p><a href="https://upload.wikimedia.org/wikipedia/commons/e/e1/Markowitz_frontier.jpg?utm_source=en.wikipedia.org&utm_campaign=imageinfo&utm_content=thumbnail_unscaled" rel="nofollow">https://upload.wikimedia.org/wikipedia/commons/e/e1/Markowit...</a><p>no matter how good is something a smart person writes down, a pleb will come along and try to hang on its coattails.<p>If you want to steal an idea for this, steal indifference curves, they'd make more sense.
[flagged]
[dead]
[flagged]
[dead]
[flagged]
[dead]
[dead]
[dead]