.. _intro_vllm:
===================
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 支持
.. note::
前缀缓存(Prefix Caching):
一种大语言模型推理优化技术,它的核心思想是缓存历史对话中的KV Cache,以便后续请求能直接重用这些中间结果。 这样可以显著降低首token 延迟,提升整体推理效率。 Prefix Caching 尤其适用于多轮对话、长文档问答等高前缀复用场景。
.. note::
LoRA(Low-Rank Adaptation):
大模型参数高效微调的一种方法,通过在预训练模型的基础上,添加低秩矩阵来适应特定任务,从而减少了需要训练的参数数量,降低了计算和存储需求,同时保持了模型性能。
vLLM和其他LLM工具对比
========================
.. _ollama_vs_vllm:
Ollama vs. vLLM
-------------------
- Ollama可以易于使用,几乎不需要配置
- Ollama支持不同架构,可以使用GPU也可以使用CPU; vLLM :strike:`只支持GPU` 主要支持GPU,但是也可以使用CPU( :ref:`avx` 512)
- 如果有合适的GPU硬件,使用vLLM效率更高
- vLLM主要使用 :ref:`python` 编写,核心则使用CUDA编程,代码据说非常高效整洁(待验证学习)
- vLLM速度快于Ollama
.. _llama.cpp_vs_vllm:
Llama.cpp vs. vLLM
-----------------------
在运行 :ref:`llama` , :ref:`qwen` 这样的大语言模型时,需要使用合适的工具, ``vLLM`` 和 :ref:`llama.cpp` 是两个非常流行的工具:
- vLLM是一个 :ref:`python` 库,设计用于服务于大语言模型,高速处理请求分发给GPU运行:
- 高吞吐服务( **High Throughput Serving** ): vLLM擅长同时处理批量请求,即使上百个用户同时提交请求也能快速处理
- 分页注意力机制( **Paged Attention** ): 只能的内存管理技术,不会一次性将所有内容加载到GPU内存中(可能导致系统崩溃),而是在需要时分页加载和调出数据
- GPU 优化( **GPU Optimization** ): 支持不同厂商GPU,最大限度提高GPU效率,使其成为处理高负载任务的理想选择
- 可扩展性( **Scalability** ): 适合企业级应用,可以支撑起整个公司的AI客户服务系统
- :ref:`llama.cpp` 是一个在日常硬件上高效运行LLM的轻量级C++框架:
- 轻量级高效推理( **Lightweight and Efficient Inference** ): ``llama.cpp`` 专为消费级设备(如笔记本电脑或小型边缘设备,如 :ref:`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`` 处理规模化服务(在本地运行量化模型,能够测试单个查询)
参考
======
- `docs.vllm.ai `_
- `Ollama vs VLLM: Which Tool Handles AI Models Better? `_
- `Ollama or vllm for serving `_
- `Which Performs Better for LLMs, VLLM or Llama.cpp? `_