Nano-vllm 项目学习
Nano-vllm 项目学习
项目地址:https://github.com/GeeeekExplorer/nano-vllm
vllm介绍:https://zhuanlan.zhihu.com/p/693279132
paged attention:https://zhuanlan.zhihu.com/p/691038809
nano vllm: https://zhuanlan.zhihu.com/p/1923689524778766954
-
请求(request)可理解为操作系统中的一个进程
-
逻辑内存(logical KV blocks)可理解为操作系统中的虚拟内存,每个block类比于虚拟内存中的一个page。每个block的大小是固定的,在vLLM中默认大小为16,即可装16个token的K/V值
-
块表(block table)可理解为操作系统中的虚拟内存到物理内存的映射表
-
物理内存(physical KV blocks)可理解为操作系统中的物理内存,物理块在gpu显存上,每个block类比于虚拟内存中的一个page
vLLM节省KV cache显存的核心思想是,对于相同数据对应的KV cache,能复用则尽量复用;无法复用时,再考虑开辟新的物理空间。
vLLM对请求的调度处理流程:
- 当一堆请求来到vLLM服务器上时,按照**First-Come-First-Serve(FCFS)**原则,优先处理那些最早到来的请求。
- 当gpu资源不足时,为了让先来的请求能尽快做完推理,vLLM会对那些后到来的请求执行“抢占”,即暂时终止它们的执行。
- 一旦vLLM决定执行抢占操作,它会暂停处理新到来的请求。在此期间,它会将被抢占的请求相关的KV block全部交换(swap)至cpu上。等交换完成后,vLLM才会继续处理新到来的请求。
- 部分情况下,对于一些seq,vllm会抛弃它的kv cache,将它重新放入等待队列中,后续重新做prefill(recomputation)
可以看这个公众号的这篇:
https://mp.weixin.qq.com/s/KxRWSAjw8r_9GkVP-skbZg
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Roger-Lv's space!
评论