AI Engineer World's Fair 2026

How Inference Keeps Up with Our Insatiable Need for Tokens — Cerebras & Gimlet Labs

Read the talk

How Inference Keeps Up with Our Insatiable Need for Tokens — Cerebras & Gimlet Labs

From continuous batching and KV caches to specialized hardware and agent-written kernels, Daniel Kim and Michelle explain how inference systems turn scarce memory, compute and power into more usable tokens.

From a talk by Daniel Kim

At a glance

Ideas worth remembering

  • Batching shares weight reads across requests; continuous batching replaces completed requests so shorter outputs do not leave capacity idle.

  • Paged KV allocation reduces unused memory reservations, prompt caching reuses computed state, and chunked prefill gives other requests opportunities to run.

  • Disaggregation can separate phases, model roles or attention and FFN work. The right division depends on workload shape, hardware strengths, communication costs and serving goals.

  • Speculative decoding saves full-model passes by drafting candidate tokens cheaply and verifying them with the full model.

  • Gimlet reports a 33% end-to-end speedup for GPT-OSS 120B on AMD hardware through agent-assisted kernel optimization. Uptime, model bring-up, custom software and silicon design offer further ways to increase usable inference capacity.

Faster tokens begin with moving the weights

Token demand keeps rising even as inference gets cheaper and faster. Daniel Kim of Cerebras opens with Google's reported jump from 480 trillion to 3.2 quadrillion tokens per month. Alongside Michelle, a Gimlet Labs co-founder, he follows the engineering needed to serve that appetite: first inside an inference worker, then across workers and different kinds of silicon.

The first obstacle is the autoregressive loop. A model generates a token, then uses the growing sequence to generate the next one. In Daniel's simplified account, each step streams the model's weights from memory into the compute units. Arithmetic can finish faster than memory supplies its inputs, leaving the compute units waiting. He describes cases with up to 90% idle time: the bottleneck is moving data, even when plenty of arithmetic capacity is available.

Splitting the model across four GPUs reduces the weights each GPU must read to roughly a quarter. Ideally, that would cut token latency by four. But the GPUs must combine their partial calculations through an all-reduce after the attention block and again after the feed-forward network, or FFN, in every layer. That repeated communication consumes part of the gain. Daniel's example gets only twice the speed from four times the compute.

This creates the speed–throughput tradeoff that organizes the rest of the talk. Assigning more hardware to one request can make its tokens arrive faster while leaving less capacity to serve everyone else. A Pareto frontier marks the best available combinations of individual-request speed and aggregate throughput. The useful engineering question is how to move that frontier outward, so a provider can improve one without paying as much in the other.

0:120:20
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

0:12 · section reference included

Share the weight read, then confront the cache

Batching starts with a cost already paid: reading the weights. Instead of using that read to advance one request, a worker advances several requests together. More useful work happens for the same movement of model weights.

What happens to capacity after a short request finishes? In a fixed batch, its slot can remain unused while a longer request continues. Continuous batching admits a new request into that opening. Replacing completed requests keeps the shared weight reads useful to more users instead of letting those slots sit idle.

The catch is that each active request brings its own memory demand. Attention retains key and value vectors—the KV cache—for tokens already processed. Daniel's rule of thumb for the 70-billion-parameter example is about one gigabyte per 3,000 tokens, or roughly 42 gigabytes for a single 128K-token context. Those figures depend on the model and cache representation; they are not a universal per-token cost. Run eight requests together and their caches accumulate, so batching can exhaust memory before it exhausts compute.

4:064:36
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

4:06 · section reference included

Waste less cache memory and reuse work already done

Where does reserved cache memory go unused? Paged KV cache addresses that allocation problem. In the earlier scheme described here, a request reserves physical memory for its cache, but may never use all of it. Paging separates the request's logical cache from where its contents sit in physical memory, allowing cache data to occupy available blocks. The allocation comparison is reserved-but-empty space versus blocks holding actual KV data. Daniel reports capacity for three times as many requests in the comparison he presents; the mechanism is recovering wasted space, rather than making each stored vector smaller.

Fixed reservations leave most of each request’s allocation empty: the slide labels 60–80% wasted and shows only three requests fitting.Open full source frame
Fixed reservations leave most of each request’s allocation empty: the slide labels 60–80% wasted and shows only three requests fitting.

Prompt caching saves a different resource: repeated computation. A coding agent or chat application may send the same long system prompt on successive requests. If the corresponding KV state is reusable, the next request can start from that cached work instead of recomputing it. Paging improves how memory is occupied; prompt caching avoids rebuilding state for a repeated prompt portion.

That distinction becomes clearer when inference is split into its two phases:

  • Prefill: Process the input prompt, calculate its key and value vectors, and produce the first output token. Much of this work can run in parallel, making compute capacity especially important.
  • Decode: Produce subsequent tokens one at a time while reusing the cache built during prefill. Repeated memory access makes bandwidth especially important.

The familiar pause before a chat response begins corresponds to prefill; the stream afterward corresponds to decode. Reusing a cached prompt portion removes some of the work behind that initial pause.

6:066:36
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

6:06 · section reference included

Keep one enormous prompt from blocking other users

Long-context coding agents turn prefill into a scheduling problem. Daniel gives contexts of 200K, 500K or a million tokens. In the blocking execution pattern he describes, a long prefill occupies the worker while other prefill and decode requests wait. Someone asking a short math question can therefore inherit the delay caused by another user's enormous coding context.

Where can those waiting requests make progress? Chunked prefill divides the long prompt-processing job into smaller pieces. Between chunks, the scheduler can run other requests' prefill or decode work. The openings appear between chunks that previously formed one uninterrupted block. The large request still needs processing, but it no longer has to monopolize the worker until all of its prefill finishes.

Slot 1 alternates chunks of prefill A with decode work; slot 2 runs decode work alongside it, showing where other requests fit between chunks.Open full source frame
Slot 1 alternates chunks of prefill A with decode work; slot 2 runs decode work alongside it, showing where other requests fit between chunks.
8:369:06
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

8:36 · section reference included

Different requests need different worker pools

Michelle moves from optimizing a worker to distributing work across a system. The starting point is the shape of a request: input length and output length change which resources matter most.

  • Document summarization: Many documents go in, and one short answer comes out. The long prompt makes prefill and compute capacity dominant.
  • Writing a book from a few themes: Little text goes in, but a long answer comes out. Repeated decode steps make memory bandwidth dominant.
  • Long input and long output: Both phases contribute substantial work, so both compute and memory resources matter.

Prefill–decode disaggregation puts the two phases in separate worker pools. That makes their capacity independently adjustable. For document summarization, the system can add prefill workers to handle the documents while keeping a smaller decode pool for the brief answers. It avoids allocating equal resources to two phases that have very unequal amounts of work.

The split can also follow hardware strengths. Prefill offers substantial parallel computation across prompt tokens. Decode repeatedly steps through tokens and accesses the existing KV cache, adding to its memory demands. Once those phases have separate homes, they no longer have to use the same kind of machine.

9:3810:00
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

9:38 · section reference included

Move the KV cache between machines with different strengths

Cerebras makes the bandwidth case through its SRAM-based architecture. Daniel cites 3.35 terabytes per second for an H100 and 21,000 terabytes per second for Cerebras, then gives a decode comparison of 600 versus 3,000 tokens per second. These are presented hardware and performance figures, not a proportional conversion from bandwidth into token speed; the recording does not specify the full model and serving conditions for that comparison.

The proposed AWS partnership gives phase disaggregation a concrete data path. Trainium chips perform prefill, AWS EFA transfers the resulting KV cache, and Cerebras CS-3 systems perform decode. What crosses between the two hardware pools? The cache carries the prompt's computed attention state into the machines that will generate subsequent tokens. Daniel projects five times the high-speed token capacity in the same footprint from this arrangement.

Gimlet generalizes the placement problem across Nvidia, AMD, Trainium, Cerebras, d-Matrix and Intel Gaudi. Its multi-silicon inference cloud breaks workloads into smaller pieces, characterizes their resource needs and maps those pieces to suitable hardware. Michelle reports three to ten times faster inference than homogeneous systems at the same power budget. That is a reported result for Gimlet's comparisons, rather than a promise for every workload; the rest of the talk explains finer divisions of work that can make such placement useful.

The cache connects specialized prefill and decode pools

AWS TrainiumPrefill — Process the prompt during prefill and build its KV cache.
AWS EFATransfer — Transfer the KV cache to the decode systems.
Cerebras CS-3Decode — Use the transferred state to serve decode tokens.
In the described AWS–Cerebras arrangement, prefill and decode run on different silicon. EFA transfers the computed KV cache between them.
Read the diagram as text
  • AWS Trainium. Prefill — Process the prompt during prefill and build its KV cache.
  • AWS EFA. Transfer — Transfer the KV cache to the decode systems.
  • Cerebras CS-3. Decode — Use the transferred state to serve decode tokens.
  • AWS Trainium → AWS EFA: KV cache from prefill.
  • AWS EFA → Cerebras CS-3: Transfer cache for decode.
12:2112:51
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

12:21 · section reference included

Let a small model draft and the full model verify

Speculative decoding divides work by model role. Ordinary autoregressive decoding runs a full-model forward pass for each output token. A smaller draft model can propose candidate tokens more quickly and with fewer resources, leaving the full model to verify them.

The draft is useful because it approximates the full model, sometimes through training or fine-tuning based on it. Approximate agreement is not enough to emit its output unchecked. Candidate tokens go through a verification stage on the full model, which determines which tokens can be accepted. Drafting and verification continue until the output has been produced.

Which expensive operations disappear in the nine-token example? Standard decoding needs nine forward passes on the full model. In Michelle's speculative example, producing those nine tokens needs only three full-model passes, plus the smaller model's drafting work. Several full-model passes are replaced by cheaper proposals and fewer verification passes. The speedup therefore depends on making the draft fast enough and having enough of its candidates accepted; the example does not establish a fixed threefold gain.

For the same nine output tokens, the standard row shows nine full-model passes; the speculative row groups draft-model proposals with three full-model verification passes.Open full source frame
For the same nine output tokens, the standard row shows nine full-model passes; the speculative row groups draft-model proposals with three full-model verification passes.

This offers two successive ways to move the speed–throughput frontier. First, speculative decoding on the same GPUs reduces how often the full model runs. Second, placing the small model on hardware that runs it especially quickly further reduces drafting time. Michelle points to d-Matrix and Cerebras for that role and reports ten times the interactivity at the same throughput in the comparison shown, relative to homogeneous machines.

14:0914:39
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

14:09 · section reference included

Split the work inside a model layer

Attention–FFN disaggregation takes the division inside the model itself. Michelle motivates it with models as large as three trillion parameters, where even one layer can demand substantial resources. The layer's two major kinds of work have different characteristics:

  • Attention: Frequent KV-cache accesses make memory bandwidth valuable.
  • Feed-forward network: Dense matrix multiplications make fast matrix computation valuable.

The system can place attention on a bandwidth-oriented machine and the FFN on a machine suited to matrix multiplication. Execution then “ping-pongs” across machines within the model, rather than changing machines only between prefill and decode. This makes placement more precise while introducing repeated cross-machine movement—the same general communication cost that already limited the four-GPU example near the start.

There is no universally best disaggregation strategy or hardware choice. A useful design must account for the model, input and output shapes, latency requirements and throughput guarantees. Splitting more finely creates more opportunities to match work to hardware, but the resulting arrangement still has to serve the workload's actual goals.

17:0517:34
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

17:05 · section reference included

Use agents to search for faster kernels

Agents intensify token demand, but they can also help improve the machinery serving it. Daniel calls the frontier “really getting yeeted to the right”; Michelle replies, “I told Daniel not to say that.” The engineering problem underneath the joke is substantial: supporting many kinds of silicon multiplies the kernel-optimization work.

A kernel implements a computational operation on the target hardware. Hand-tuning one is sensitive to the model, hardware family, hardware generation and workload shape. Gimlet's KForge agent takes hardware profiles, workload profiles and other optimization information as inputs, then treats kernel generation as a brute-force search problem. Those profiles matter because an implementation that suits one combination may be a poor choice for another.

What changes when KForge optimizes a forward pass? Michelle presents the original computation alongside the generated kernel, then reports a 33% end-to-end speedup for GPT-OSS 120B on AMD hardware after less than a week of running the agent, starting from kernels that had already been optimized. The recording does not explain the specific code transformation or evaluation procedure, so the result supports the practical value of the search without identifying which kernel choices produced the gain.

18:2618:40
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

18:26 · section reference included

More usable tokens also come from uptime, compilers and deployment

The next proposal extends agent assistance into custom silicon. Agents could help design chips tuned to particular models or workloads; those chips could train better AI, which could help design the next generation of chips. Michelle presents this as a recursive direction for future work, including faster tape-out, rather than a demonstrated result from the kernel experiment.

Several nearer operational opportunities broaden what counts as inference optimization:

  • Incident response: More reliable systems and greater uptime create more time in which the installed hardware can serve tokens.
  • Model bring-up: Agents could help a newly released model run across different hardware on day one, reducing the delay before available machines become useful for it.
  • Custom compilers and inference stacks: Software tailored to a particular model, workload and hardware combination could expose optimizations that a general stack misses. Daniel cites Anthropic's two-week compiler effort as motivation, while framing workload-specific stacks as an opportunity.

Procurement, legal work and other back-office processes also affect what it takes to serve inference, and Daniel includes them among the candidates for agent assistance. The ending expands the unit of optimization from a token-generation step to the organization keeping that step available. Faster kernels improve the machine while it runs; faster deployment and better uptime help it spend more of its life doing useful work.

20:1521:39
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

20:15 · section reference included

Resources

Read the complete timestamped transcript
  1. 0:12

    Hello everyone. My name is Daniel. Uh, I work on AI and AI agents here at Cerebras. Um, what's your name?

  2. 0:20

    I'm Michelle. I'm a co-founder at Gimlet Labs, where we're building a multi-silicon neocloud to optimize inference at every layer of the stack.

  3. 0:28

    And we're really excited to bring you our talk, all the things we have to do to satisfy your insatiable need for tokens.

  4. 0:36

    As you know, AI spend is going kind of bananas right now, with this year we're sl-slated to spend seven hundred and sixty-five billion dollars on compute, and in twenty thirty one, up to one point six trillion dollars. The frontier labs are having a mad dash to secure as much compute as possible to buy, um, across hardware vendors, p- to do both training for their frontier models, as well as to serve all of their users. And all of their compute is going to satisfy

  5. 1:06

    everyone's insatiable need for tokens. Um, Google, at their IO last year, said that they were serving four hundred and eighty trillion tokens per month, and l-last month, they said that it jumped up to three point two quadrillion tokens per month. So all of this is happening at the same time as models are getting cheaper and faster. Llama three point three seventy B, when it was first released, compared to now, is now twenty-five percent cheaper, while still being three point six times

  6. 1:36

    faster. So in today's talk, we're gonna talk about two things. One, what have we done so far to optimize inference to make it cheaper and faster? And what does the roadmap look like to juice perf and throughput even further? So to do this, let's take a little bit of a time jump to twenty twenty two and learn about all the optimizations that led us to the point we're at now and hopefully what the future looks like. So LLMs produce tokens one

  7. 2:06

    at a time in something called an auto-regressive loop. So to generate one additional token, you need to read all of the weights from memory into compute. So most of the time, the compute is sitting idle. It's just waiting for memory to be able to stream in all the weights necessary to do the compute itself. So up to ninety percent of the time, the compute's just sitting there waiting on memory to load. So how can we figure out how to optimize this so there's less idle time, and you can make full advantage and serve

  8. 2:36

    tokens faster? So what you can do is throw more compute at the problem. So instead of streaming in the whole set of weights, what if you could split up the entire model into four and have each GPU take care of a fourth of the model each? Then you could reduce, in theory, the amount of time it takes to serve a single token by four times. However, you have to pay a tax if you wanna do this. Before the attention block and then the F... Uh, so after the attention block and an FFN block, you have to do

  9. 3:06

    something called all reduce, where you take each of the individual calculations from each GPU, and you combine it all together, so you can actually get a calculation. Because each of those GPUs doesn't have the whole picture, it only does one-fourth of the model. So you need to do this across every layer twice, which can lead to only getting two x speed up for getting four x the amount of compute that you add on. If I were to graph this in a pretty graph, um, you can see that throwing more GPUs at the problem does get you faster tokens, but it requires

  10. 3:36

    exponentially more energy to serve a single token as you s- put in more compute at the problem because of the communication overhead we just talked about. So if we flip the Y-axis here, so it's throughput, you can see that this resembles something like a Pareto frontier, where you can see that you have to make some kind of sacrifice between throughput and speed when you're an inference provider. A great example of this is Claude Code Fast Mode, where you can spend, I think, six x the amount of tokens to serve a single token compared to

  11. 4:06

    regular Claude for twice the speed. So for that product, they're really optimizing towards the right of the Pareto frontier, where they're getting the speed, but at the cost of not being able to serve as many tokens. So during today's talk, we're gonna talk about what are the innovations we have done in the past and in the future to be able to shift the Pareto frontier to the right. So you al-already know from our previous slides that to generate each token, you have to read the whole model. So what if we could s-spend one

  12. 4:36

    pass that we already paid for to serve multiple requests? So that is where the idea of batching and continuous batching comes in. The idea of batching is when you take a weight read that you've already done and be able to serve multiple user requests. However, the problem though is that some of these requests are longer than others, which means that there's all of these idle periods in the compute where nothing is happening. So how can we solve this problem and squeeze out more performance?

  13. 5:06

    That's where continuous batching comes in. So the idea here is that for every single idle slot, you slot in a new user request to be served during that same weight read to be able to serve as many requests as possible. However, this does come with a slight downside because every single token, when you do inference, requires you to save something into the KV cache because that's how the attention block works. You need to understand how every single token, like what the K and V vectors

  14. 5:36

    are. This can add up very quickly. So if you're running a coding agent with very long context, for example, a hundred and twenty-eight K context, you're going to save forty-two gigabytes of KV cache that is needed to serve that individual request. So the rule of thumb here for a seventy billion parameter model is that for every three thousand tokens, you need one gigabyte of additional KV cache, and that's for one user request. So imagine you're doing batching, and you're doing like eight different requests at the same time. Then your KV cache is going to explode, and you will not

  15. 6:06

    have enough memory to be able to serve all of your requests. So what are some of the innovations we have done to be able to optimize how we use memory? So that's where paged KV cache comes into play. So how traditionally KV cache worked was that you would have physical memory that you would reserve to make sure that you could have enough room to be able to store all of the KV information from each request into memory. However, this came with a downside and a lot of inefficiency because you would just have a lot of memory blocks

  16. 6:36

    that would be reserved but wouldn't actually be used. So the idea with a paged KV cache is we use something s- that's similar to like an OS or a virtual machine where you provision a whole memory block that's all virtual, and you can store wherever there's free space KV cache for each request. So this allows you to serve three times more requests than not having a paged KV cache and just doing what was before. And this really reduces the amount of wasted space where you're reserving memory slots without

  17. 7:06

    actually using them. This was right after, followed by an innovation called prompt caching. So the idea here is that if you have a coding agent or if you have a chat app that has a very long system prompt, you don't actually have to recalculate the KV cache needed every single time you have a request. What you can do is you can reuse the KV cache that you calculated already for the previous request for the next request. That way, you can s- pick up where you left off. Here, you can skip

  18. 7:36

    the very, very time-consuming prefill phase. And you might be wondering, what is prefill? So during inference, you can split up what happens into two major phases, prefill and decode. So the prefill phase consists of all the things that happen once the re- request arrives, and then w- ends when the first tokens gets generated. And here you can see this when you type something into ChatGPT, and then it takes a couple seconds before it starts returning the first token, and then it goes kind of like smoothly from

  19. 8:06

    there. So what's happening during the first couple of seconds where it's not returning anything is that it's computing K and V vectors for every single prompt token that you've inputted and produces the first output token. This is very compute bound because you can optimize the hell out of this. You can parallelize this extremely. However, after the first token is generated, what happens is, uh, that you decode one token at a time, reusing the KV cache you just built in the prefill phase. So this is more reliant on memory.

  20. 8:36

    The reason I'm talking about this is because something happened lately that's really messing up a lot of inference pipelines, which is super, super token-hungry coding agents. So let's say you have a coding agent that's using 200K context or 500K context, or a million context, right? What happens is that it starts to clog up the pipeline. While prefill is running, no other prefill or decode request can get through. So this is kind of catastrophic if you have a bunch of people that are sending in coding requests and a couple people that are just trying to figure out like

  21. 9:06

    math qual- problems in chat mode. So to avoid this clogging problem, there is an innovation called chunked prefill. That kind of goes and solves this problem, and the idea is quite simple here. The idea is taking a very long piece of prefill, chopping it up into smaller bits, so you can interleave in different decode and prefill requests. That way, there's not one thing that's taking up a bunch of time and clogging the whole pipeline. So now, Michelle, tell

  22. 9:36

    us more about what else we can optimize.

  23. 9:38

    Yeah, so all of the optimizations that Daniel just talked about are runtime level optimizations. So that explains, uh, we explore how we make inference more efficient within a single worker. But in order to, to keep pushing that frontier, we really need to start looking at system level optimizations, which is how can we distribute these workloads across many different workers?

  24. 10:00

    And so the first thing to recognize there is that every request is different. So take, for example, a summarization use case. You're throwing the LLM a bunch of different documents, and you just really want a single question answered. And so this workload is going to have a long prompt and short answer, and so it's dominated by that prefill phase and so therefore compute bound. On the other hand, you might have a case where it's the opposite. Let's say you want to write a long story or book, you just wanna pass it a few themes for it to

  25. 10:30

    go off of. And so this is gonna have a short prompt and long answer, and this is gonna be dominated by decode because you have so many output tokens compared to the number of input tokens coming in, and this is gonna be memory bound. And finally, you can have a case that's somewhere in the middle, right? It's both a long prompt, a long answer, and you're seeing here that both the prefill and decode phases, and therefore compute and memory both matter. And by looking at these different examples, you can really see that the resource requirements that

  26. 11:00

    you have for your hardware, it's pretty different depending on what your workload looks like. And so how do you prevent yourself from getting, you know, bound by compute, bound by memory? And so one t- way to do that is called disaggregation, so splitting up your workload to different worker nodes. And so the most common form is called prefill decode disagg, where you're actually splitting and disaggregating this workload by phase.

  27. 11:26

    And what that allows you to do is essentially have two pools. So you have your prefill pool, that's gonna be running the prefill part of your workload, the decode pool, that's gonna be running the decode part of your workload. And taking the summarization use case, for example, you know, you're gonna wanna scale up that prefill pool so you're not blocked by the compute, and scale down your decode pool because you don't wanna waste resources when you just really don't have that much decode work to do. And it's nice 'cause now you can scale all these independently, and neither part is

  28. 11:56

    stalling the other. And we can take that one step farther, right? We said before, prefill, that workload itself is inherently bound by compute. Decode, that is bound by memory. And just walking through that really quickly again, the reason for that is as you're doing decode, you're stepping through each of these tokens one by one, and for every decode step, you're rereading, you know, the entire KV cache, right? That's gonna be memory bound.

  29. 12:21

    So yeah, um, the, the thing that Michelle just said about this being memory bound, this can be clearly seen by what the hardware can actually do. So GPUs, right? Uh, the, the speed at which you can transfer data from memory into compute is limited by something called memory bandwidth. So for an H100, this looks like 3.35 terabytes per second. However, Cerebras has 7,000 times the bandwidth of a H100, with 21,000 terabytes per second. This is because we have a very

  30. 12:51

    specialized SRAM-based memory architecture on our chip. So this really means that Cerebras is really built for decode. So we can serve tokens at 3,000 tokens per second versus an H100 serving it at 600 tokens per second for decode. So we're really excited to partner with AWS to productionize this. So we are going to partner with AWS Trainium, so they can serve prefill using their AWS Trainium chips, use their EFA service to transfer the KV

  31. 13:21

    cache to our Cerebras CS-3 systems to finally serve the end token. So this will lead us to give us 5X high-speed token capacity in the same footprint. So this is one of the things that we're doing to try to make fast inference more accessible and cheaper for developers. So we're really excited to really pa- pursue this partnership.

  32. 13:39

    And at Gimlet, we're really generalizing that beyond just Trainium and Cerebras. What Gimlet is building is essentially a multi-silicon inference cloud, which takes your workload, breaks it down into finer grain pieces, determines the resource characteristics of all of those different pieces, and then figures out the best way to map it to the underlying hardware, where that hardware can be really anything, right? Nvidia, AMD, Trainium, Cerebras, d-Matrix, Intel Gaudi, the list goes on and on. And by running those tasks on the machine that is most efficient for running

  33. 14:09

    it, we're actually seeing pretty crazy results. So we're seeing three to 10 times faster inference compared to homogenous systems that have the same power budget. And this is diving into more than just the prefill decode disaggregation than before, and some of those techniques are, for example, disaggregating based on model instead of on phase. And so that's called speculative decoding. So just reviewing again the decode phase. Typically, you do a forward pass for each of the detoke- to- decode tokens that you're getting out,

  34. 14:39

    and that's the standard way of doing it. What speculative decode is, is that you essentially have a draft model, and this is just a smaller form of the full model that, um, can generally approximate the results that you get out of it. And the nice thing there is because it's smaller, it runs a lot more quickly and also uses less resources. And so in speculative decode, what you can do is, in order to get, you know, the nine next tokens, you will essentially run the decode on that draft model first. It's gonna give you back what is called candidate tokens. So you're

  35. 15:09

    not 100% sure all these tokens are right, but because, you know, often these have been fine-tuned or trained off of the full model, it's, it's approximately right. And you want to validate, okay, are these the tokens that I actually want to output? And so you'll actually run the next phase on that full model that's called the verify stage to validate, okay, which of these tokens are correct? And essentially, you can keep doing this until, you know, you've validated all these tokens from the draft model. And at the end of the day, you can see here on the top, the standard way of running it, you

  36. 15:39

    needed to run that forward pass on your full model nine times to get those nine tokens. On the other hand, with speculative decode, you actually only needed to run it three times on that full model. And if you can get that draft model to run really, really quickly, then that time is minimal, and you can really shorten the amount of time it takes to get your tokens. And looking at some more concrete results, so this is essentially that Pareto frontier that Daniel was showing earlier, where X-axis is the speed at which you're getting the tokens, and the Y-axis is

  37. 16:09

    the throughput. And so the baseline case we're comparing to here is prefill decode disagg across homogenous GPUs. And you can see that, you know, throughput is pretty good, but as soon as you're pushing on that speed, that throughput drops pretty drastically. So what if you then run speculative decode across those same GPUs? So now you're running that draft model, and you're able to see-- you're able to get that curve to the right. And the reason for that is because you're running the decode on that full model less times. But we can push that even farther, right? Like, going

  38. 16:39

    back to our theme of running those workloads on the hardware that can run it best on something such as, you know, d-Matrix or Cerebras, where you're able to run small models very, very quickly, you see drastic performance improvements. So here, this is where you're seeing those numbers. For that same throughput, right, you're able to get 10X the interactivity compared to if you're just running it on homogenous machines.

  39. 17:05

    The final form of disagg we wanted to talk about is called attention FFN disagg, and this one gets pretty exciting when you think about serving large models, and I'm saying like 3 trillion parameter models, where these models are so large that even just running one layer, it can be pretty resource intensive. And so the concept is essentially the same thing, right? Like for that particular task that you need to do, whether it's that attention layer or the feed forward FFN network layer, then you are essentially trying to figure out, okay, what are the resource

  40. 17:34

    characteristics that what is the best hardware to map it to? And so the attention layer, that's gonna be more memory bound. It's doing a lot of KV cache accesses. The FFN layer, that's doing a lot of dense matrix multiplications. And so then it makes sense, right? You're gonna run the attention on the machine that has memory bandwidth, the FFN layer on the machines that can run those matrix multipli- multiplications as quickly as possible. And essentially what happens here is even within the model, you're ping-ponging across, you know, many different machines in order to, to get the inference from that

  41. 18:04

    model and just really disaggregating every single layer. And one thing that we really wanted to note here is that there is no best form of disagg. There is actually no best hardware. It really depends on the trade-offs that you have for, you know, depending on what your model is, your workload, and what you need for latency and what you need for throughput guarantees.

  42. 18:26

    And as we look towards the future, we see that agents are only becoming more and more incorporated into our everyday life. It's incorporated into our work, everyone is using it, and it's continuing to push that need for more and faster tokens.

  43. 18:40

    Yeah, it's really getting yeeted to the right.

  44. 18:42

    I, I told Daniel not to say that. Um, but the good thing about this is that even though, you know, this seems like a crazy, crazy target, we can actually use agents to help us solve these problems and keep pushing the frontier. And so one of the things that we're doing at Gimlet is actually using an agent to generate optimized kernels. Especially for our use case where we wanna support such a wide range of different kinds of hardware, we need to figure out how do you make that problem a lot more tractable? 'Cause right now, how people generate and, or how people

  45. 19:12

    optimize kernels is that there's a lot of people sitting there hand tuning and figuring out how to optimize these kernels. And the thing is that these optimizations can vary pretty drastically based on, you know, the model that you're trying to run, the hardware that you're running on, even within generations of the hardware, and, you know, the workload shape itself. And so what we do at Gimlet is we built KForge, which is an agent for generating these kernels. It takes in a bunch of information like your hardware profiles, your workload profiles, basically anything that you

  46. 19:42

    can use to figure out how to optimize kernels, and we solve it as a brute force problem, right? And so here's an example, right? We have a forward pass, and the kernel that, um, KForge optimized from it, and we're seeing pretty interesting results. So last week, you know, we're running the agent for probably less than the span of a week, and within that time, it was able to speed up GPT-OSS 120B on AMD hardware by 33% end to end. And the interesting thing to note here is that this is building on top of kernels that have already

  47. 20:12

    been optimized.

  48. 20:15

    And you can go and take, you know, agents to the next level and use them to help us build and design custom silicon that is hyper-tuned for specific models or your specific workload. This can then be used to train even better and smarter and faster AI, which then can also be used then to design the next generation of the custom silicon. And, you know, this loop keeps going on and on, and it's a recursive loop. Like, shout out to the folks at Recursive.

  49. 20:42

    And I wanna end the talk by saying that we're just getting started in our journey to optimize throughput and speed on inference. Because at the very top of the stack, you don't think really about inference optimization when you talk about, like, incident response, right? But when you have agents that are making our systems much more reliable and increasing uptime, we're getting more throughput, and we can get more tokens.

  50. 21:06

    Or you can apply agents to the problem of bringing up models. As soon as a model drops on the market, getting it running on all the different kinds of hardware on day one.

  51. 21:15

    You can even go a little bit crazier with compilers. Imagine a world where y- an inference stack can be custom-built for your workload and the model that you're running. This is already being demonstrated by folks at Anthropic, right? That built a compiler in two weeks. So I think there's a lot of optimizations that you can do when you're building just-in-time custom software to support the model you wanna run on the workload you wanna run on your custom hardware.

  52. 21:39

    And referring back to the previous slide, using agents to continue to help us to build, you know, more custom silicon and helping speed up the tape-out process.

  53. 21:49

    And finally, this is the non-very technical part, but all of the things that surround what it takes to serve inference, all the procurement, all the legal, all of the things that are in the back office, all of these things combined with agentic workflows are able to be optimized. So when we do all of this, I'm really optimistic about the future and all the things we can accomplish to serve tokens faster and cheaper. So next slide, please. Thank you so much for coming to our talk. Uh, we are working both very, very hard to give you faster and cheaper tokens.

  54. 22:19

    And yeah, let us know if you have any questions. We'll be around after the talk.

  55. 22:22

    Yeah, and go eat tokens.

  56. 22:23

    Yay.

  57. 22:24

    We're making more tokens for you so you can also generate gifs like this.

  58. 22:27

    Yeah.