大模型vllm总结与代码理解

vllm

vllm特点

  • 最先进的服务吞吐量
  • 有效管理的注意力机制的K-V记忆与PagedAttention
  • 连续批处理传入请求
  • 快速模型执行与CUDA/HIP图形
  • 量化:GPTQ、AWQ、INT4、INT8和FP8。
  • 优化CUDA内核,包括集成FlashAttention和FlashInfer。
  • 投机解码

处理主要问题

  • llm随着生成token的增多,kv-cache长度也变大,对gpu显存造成压力

  • llm生成的token长度无法预知,因此不能提前预知kv-cache所需的存储空间,给推理工作造成很大不确定性

PagedAttention

KV Cache的核心思想是缓存并重用之前计算过的Key和Value,从而避免重复计算

注意力机制的核心概念是Query(查询)、Key(键)和Value(值) 。在生成新 token 时,其需要新的"问题"(Query)来查询所有历史"信息"(Key)并获取相关的"内容"(Value)。注意力机制允许模型动态地"查阅"之前的信息。不同的信息源(早先的词)会根据其相关性获得不同程度的"注意力"。最终的表示是多个信息源的加权组合。

PagedAttention:被称为vllm管理kv-cache的技术,原理类似于虚拟内存分页管理技术。将需要用到的KV Cache拆分成多个Block进行存储,每个Block内有多个KV,不管Batch内每个请求的输入输出序列多长,都可以按需申请Block存储,不过申请太多多余的空间。

关键特点:

  1. 非连续内存访问和查询机制
  2. 动态内存管理和生成过程
  3. 内存共享

其他优化技术

  1. 连续批处理:传入的请求被连续批处理在一起,以最大限度地提高硬件利用率并减少计算浪费,最大限度地减少空闲时间。

  2. 量化:vLLM 利用 FP16 等量化技术,通过以较低的精度表示 KV 缓存来优化内存使用,从而减少内存占用并加快计算速度。

  3. 优化的 CUDA 内核:vLLM 手动调整在 GPU 上执行的代码以实现最佳性能。例如,对于融合重塑和块写入,开发了优化的内核,将新的 KV 缓存拆分为块,重塑它们以实现高效的内存访问,并根据块表保存它们,所有这些都融合到单个内核中以减少开销。

代码理解

vllm是在llm基础上对于方法复写,其入口为vllm/entrypoints/llm.py。该文件运行流程主要为通过__init__()f方法对于代码初始化,之后运行数据预处理方法validate_and_add_requests(),实际推理run_engine()方法。

在这里插入图片描述

通过LLMEngine产生对象llm_engine以执行llm中的方法,执行vllm/engine/llm_engine.py中的step()方法逐步处理请求。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值