今天,我要给大家介绍一款名为vLLM的神奇工具。它的主要功能是加速大型语言模型(如OpenAI的GPT-3)的推理速度。如果你是NLP(自然语言处理)领域的研究员或开发者,我相信这个工具可能会对你的工作有所帮助。
为什么我们需要vLLM?
在大规模语言模型运行时,我们常常遇到一个问题:显存不足。这是因为在生成新的单词或者词语(token)时,我们需要存储一些称为 keys 和 values的数据(我们可以把它们看作是模型用来生成新token的”记忆”)在GPU的显存中。然而,这些数据通常非常大,而且大小也会不断变化,这使得显存管理变得困难。传统的管理方式往往会造成显存的60%-80%的浪费。
这就是vLLM要解决的问题。它引入了一种名为PagedAttention的新技术,可以有效地管理这些keys和values,使得显存的使用效率接近最优(浪费比例低于4%)。这样一来,我们就可以使用更大的数据批次进行运算,从而提高GPU的并行计算能力。
vLLM的核心技术:PagedAttention
PagedAttention的工作原理受到了操作系统中虚拟内存和分页的启发。它将每个序列的数据划分为块,每个块包含固定数量的keys和values。这些块不需要连续的内存,因此可以更灵活地对它们进行管理。
此外,PagedAttention还支持内存共享,也就是说,当用一个提示生成多个不同的序列时,可以共享计算量和显存。这种内存共享机制可以大幅降低显存需求(最高可降低55%),从而进一步提升推理速度。
如何使用vLLM?
vLLM的使用非常简单。首先,使用pip命令安装vLLM:
pip install vllm
然后,你就可以使用vLLM来生成文本了:
from vllm import LLM
prompts = ["Hello, my name is", "The capital of France is"] # 提示
llm = LLM(model="lmsys/vicuna-7b-v1.3") # 创建一个LLM
outputs = llm.generate(prompts) # 从提示生成文本
vLLM也支持在线服务。你可以使用以下命令启动一个在线服务:
python -m vllm.entrypoints.openai.api_server --model lmsys/vicuna-7b-v1.3
然后,你就可以通过HTTP请求来调用这个服务了:
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
}'
如果你对vLLM感兴趣,可以在这里查阅更多信息。希望这个工具能对你的工作或学习有所帮助!