vLLM简介

vLLM 是一个快速、易用但LLM推理和服务库。最初由加州大学伯克利分校但Sky计算机实验室开发,目前已经发展成一个社区驱动的项目,得到学术界和业界的广泛贡献。

vLLM快速的原因如下:

  • 领先的服务吞吐量

  • 使用 PagedAttention 高效管理注意力机制的键值内存(Efficient management of attention key and value memory with PagedAttention)

  • 持续批处理传入请求(Continuous batching of incoming requests)

  • 使用 CUDA/HIP graph 实现模型加速

  • 支持量化(Quantization): GPTQ, AWQ, INT4, INT8, 和 FP8

  • 优化的 CUDA 内核: 可与 FlashAttention 和 FlashInfer 集成

  • 推测解码(Speculative decoding)

  • 分块预填充(Chunked prefill)

vLLM 灵活易用的原因如下:

  • 与流行的 HuggingFace 模型无缝集成

  • 高吞吐量服务,支持各种解码算法,包括并行采样(parallel sampling)、波束搜索(beam search)等

  • 支持分布式推理(distributed inference)的张量(Tensor)、流水线(pipeline、数据和专家并行性(data and expert parallelism)

  • 流式输出

  • 兼容 OpenAI 的 API 服务器

  • 支持 NVIDIA GPU、AMD CPU 和 GPU、Intel CPU、Gaudi 加速器和 GPU、IBM Power CPU、TPU 以及 AWS Trainium 和 Inferentia 加速器

  • 前缀缓存(Prefix Caching)支持

  • 多 LoRA 支持

备注

前缀缓存(Prefix Caching):

一种大语言模型推理优化技术,它的核心思想是缓存历史对话中的KV Cache,以便后续请求能直接重用这些中间结果。 这样可以显著降低首token 延迟,提升整体推理效率。 Prefix Caching 尤其适用于多轮对话、长文档问答等高前缀复用场景。

备注

LoRA(Low-Rank Adaptation):

大模型参数高效微调的一种方法,通过在预训练模型的基础上,添加低秩矩阵来适应特定任务,从而减少了需要训练的参数数量,降低了计算和存储需求,同时保持了模型性能。

vLLM和其他LLM工具对比

Ollama vs. vLLM

  • Ollama可以易于使用,几乎不需要配置

  • Ollama支持不同架构,可以使用GPU也可以使用CPU; vLLM 只支持GPU 主要支持GPU,但是也可以使用CPU( AVX(Advanced Vector Extensions) 512)

    • 如果有合适的GPU硬件,使用vLLM效率更高

    • vLLM主要使用 Python 编写,核心则使用CUDA编程,代码据说非常高效整洁(待验证学习)

  • vLLM速度快于Ollama

Llama.cpp vs. vLLM

在运行 LLaMa(Large Language Model Meta AI) , Qwen 这样的大语言模型时,需要使用合适的工具, vLLMllama.cpp 是两个非常流行的工具:

  • vLLM是一个 Python 库,设计用于服务于大语言模型,高速处理请求分发给GPU运行:

    • 高吞吐服务( High Throughput Serving ): vLLM擅长同时处理批量请求,即使上百个用户同时提交请求也能快速处理

    • 分页注意力机制( Paged Attention ): 只能的内存管理技术,不会一次性将所有内容加载到GPU内存中(可能导致系统崩溃),而是在需要时分页加载和调出数据

    • GPU 优化( GPU Optimization ): 支持不同厂商GPU,最大限度提高GPU效率,使其成为处理高负载任务的理想选择

    • 可扩展性( Scalability ): 适合企业级应用,可以支撑起整个公司的AI客户服务系统

  • llama.cpp 是一个在日常硬件上高效运行LLM的轻量级C++框架:

    • 轻量级高效推理( Lightweight and Efficient Inference ): llama.cpp 专为消费级设备(如笔记本电脑或小型边缘设备,如 Raspberry Pi )上进行推理而设计

    • 混合CPU/GPU支持( Hybrid CPU/GPU Support ): llama.cpp 可以同时使用计算机的CPU和GPU,或者哎没有GPU的情况下只使用CPU

    • 灵活量化( Flexible Quantization ): llama.cpp 通过压缩数据(例如,从32位压缩微4位)来减小模型的大小,节约内存并使其运行在低资源配置下

    • 跨平台兼容性( Cross-Platform Compatibility ): llama.cpp 支持各种系统,包括使用GPU的NVIDIA CUDA,或者使用Mac的Apple Metal,甚至使用普通的CPU

总之:

  • vLLM 适合大型企业级环境(云计算服务、企业应用),需要强大的GPU硬件来运行,并且通过批量处理能够获得2-3倍吞吐量(在GPU服务器上加载模型,部署为API,能够并发处理100+请求)

  • llama.cpp 则非常适合个人项目或者性能有限的设备,非常灵活但是不具备伸缩性,所以无法像 vLLM 处理规模化服务(在本地运行量化模型,能够测试单个查询)

参考