简介

vLLM是一个开源的大模型推理加速框架,通过PagedAttention高效地管理attention中缓存的张量,实现了比HuggingFace Transformers高24倍的吞吐量。

PagedAttention

作者发现大模型推理的性能瓶颈主要来自于内存。一是自回归过程中缓存的K和V张量非常大,在LLaMA-13B中,单个序列输入进来需要占用1.7GB内存。二是内存占用是动态的,取决于输入序列的长度。由于碎片化和过度预留,现有的系统浪费了60%-80%的内存。

PagedAttention灵感来自于操作系统中虚拟内存分页的经典思想,它可以允许在非连续空间立存储连续的KV张量。具体来说,PagedAttention把每个序列的KV缓存进行了分块,每个块包含固定长度的token,而在计算attention时可以高效地找到并获取那些块。

KV缓存分片的过程

每个固定长度的块可以看成虚拟内存中的页,token可以看成字节,序列可以看成进程。那么通过一个块表就可以将连续的逻辑块映射到非连续的物理块,而物理块可以根据新生成的token按需分配。

通过PagedAttention生成序列的过程

所以序列在分块之后,只有最后一个块可能会浪费内存(实际中浪费的内存低于4%)。高效利用内存的好处很明显:系统可以在一个batch中同时输入更多的序列,提升GPU的利用率,显著地提升吞吐量。

PagedAttention的另外一个好处是高效内存共享。例如,在并行采样的时候,一个prompt需要生成多个输出序列。这种情况下,对于这个prompt的计算和内存可以在输出序列之间共享。

并行采样的例子

通过块表可以自然地实现内存共享。类似进程之间共享物理页,在PagedAttention中的不同序列通过将逻辑块映射到一样的物理块上可以实现共享块。为了确保安全共享,PagedAttention跟踪物理块的引用计数,并实现了Copy-on-Write机制。
同一个输入采样生成多个输出的例子

内存共享减少了55%内存使用量,大大降低了采样算法的内存开销,同时提升了高达2.2倍的吞吐量。

LMSYS早期使用基于Huggingface Transformers的服务后端代码:https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/model_worker.py

使用vLLM部署的代码(FastChat-vLLM:FastChat作为模型聊天服务前端,vLLM作为推理后端):https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/vllm_worker.py

吞吐量测试的代码:https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/test_throughput.py

早期的测试结果显示vLLM提升了30倍以上的吞吐量。vLLM的使用也大大降低了运营成本,LMSYS使用vLLM减少了50%gpu数量。同时每天可以平均处理30K请求,峰值为60K,证明了vLLM的鲁棒性。

快速使用

安装vLLM:

$ pip install vllm

导入vLLM并在Python脚本中使用LLM类:

from vllm import LLM

prompts = ["Hello, my name is", "The capital of France is"]  # Sample prompts.
llm = LLM(model="lmsys/vicuna-7b-v1.3")  # Create an LLM.
outputs = llm.generate(prompts)  # Generate texts from the prompts.

要使用vLLM进行在线服务,可以通过以下方式启动与OpenAI api兼容的服务:

$ python -m vllm.entrypoints.openai.api_server --model lmsys/vicuna-7b-v1.3

可以使用与OpenAI API相同的格式查询服务器:

$ curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "lmsys/vicuna-7b-v1.3",
        "prompt": "San Francisco is a",
        "max_tokens": 7,
        "temperature": 0
    }'

[1] vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention