background picture of the home page

Hi,Friend

从零实现一个mini vLLM--PagedAttention

实现教学版 PagedAttention:从 block table 读取历史 KV cache 前面两篇文章,我们已经把问题推进到了 vLLM 最核心的部分。 第九篇里,我们解释了为什么 KV cache 需要分页式管理。在线 LLM serving 中,请求会不断进入、增长和结束。如果每个请求都

thumbnail of the cover of the post

从零实现一个mini vLLM--Block Manager

Block Manager:让 KV cache 变成可管理的资源 上一篇文章里,我们讨论了为什么 vLLM 要把 KV cache 做成分页式管理。 核心问题是:在线 LLM serving 里的 KV cache 不是一个固定张量,而是一种动态增长、动态释放、会被大量请求同时占用的显存资源。 如

thumbnail of the cover of the post

从零实现一个mini vLLM--KVcache 显存管理

KV cache 显存管理:为什么 PagedAttention 是 vLLM 的核心 到目前为止,我们已经搭出了一个可以持续推进多个请求的推理引擎。 一个请求进入系统后,会被抽象成 Sequence。Scheduler 决定它什么时候 prefill,什么时候 decode。ModelRunner

thumbnail of the cover of the post

从零实现一个mini vLLM--流式输出和异步 Engine

流式输出和异步 Engine:让推理引擎真正像一个在线服务 前面几篇文章里,我们已经把 mini vLLM 的核心执行链路搭了起来。 一个请求进入系统后,会被抽象成 Sequence。Scheduler 负责决定哪些 Sequence 做 prefill,哪些 Sequence 做 decode。M

thumbnail of the cover of the post

从零实现一个mini vLLM--PD分离

Prefill 和 Decode 分离:LLM 推理引擎里的两种工作负载 1. 这一篇要解决什么问题 前面几篇文章里,我们已经逐步搭出了 mini vLLM 的核心骨架。 我们先理解了一个 token 是如何被生成出来的,然后引入 KV cache,避免每一轮 decode 都重复计算完整上下文。接

thumbnail of the cover of the post

从零实现一个mini vLLM--Scheduler

实现一个 Scheduler:让多个请求在同一个推理引擎里流动起来 1. 这一篇要解决什么问题 上一篇文章里,我们讨论了静态 batching 为什么不适合直接用于在线 LLM serving。 单请求推理吃不满 GPU,所以我们需要

thumbnail of the cover of the post

从零实现一个mini vLLM--从单请求推理走向调度器

静态 batching 为什么不够:从单请求推理走向调度器 1. 这一篇要解决什么问题 前面几篇文章里,我们已经完成了从单请求生成到请求状态抽象的过渡。 我们知道了一个 token 是如何生成出来的,也知道了 KV cache 为什么可以避免重复计算历史 token。随后,我们把一个请求封装成了

thumbnail of the cover of the post

从零实现一个 mini vLLM--Sequence

把请求抽象成 Sequence:从单请求 generate 到推理引擎状态机 1. 这一篇要解决什么问题 前面几篇文章里,我们已经走过了三个阶段。 第一篇,我们从整体上看了一个 LLM 请求在推理系统里的生命周期。 第二篇,我们手写了一个最小版本的

thumbnail of the cover of the post

从零手搓一个mini vLLM--KV cache

KV cache 到底缓存了什么:让 decode 不再重复计算历史 token 1. 这一篇要解决什么问题 上一篇文章里,我们手写了一个最小版本的 generate 函数。 它的核心循环大概是这样的: for s

thumbnail of the cover of the post

从零实现一个mini vLLM--LLM 推理的最小闭环

从 model.generate 到手写 generate 1. 这一篇要解决什么问题 在上一篇文章里,我们从整体上看了一个 LLM 请求在推理系统里的生命周期。 一个请求会从 API 层进入系统,经过 tokenizer,变成内部 Request 对象,再进入 waiting 队列。调度器会决定它

thumbnail of the cover of the post