楼主: i10015407
412 0

[其他] 部署大语言模型:vLLM 与量化 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

小学生

14%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
40 点
帖子
3
精华
0
在线时间
0 小时
注册时间
2018-10-18
最后登录
2018-10-18

楼主
i10015407 发表于 2025-12-1 17:34:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

大语言模型加速部署的实践指南

towardsdatascience.com/deploying-large-language-models-vllm-and-quantizationstep-by-step-guide-on-how-to-accelerate-becfe17396a2?source=collection_archive---------1-----------------------#2024-04-05

近年来,大语言模型(LLMs)如 ChatGPT、GPT-4 和 Claude 展现出强大的能力,在教育、医疗、商业和艺术等多个领域显著提升了服务效率。随着 Llama、Mistral、Falcon 和 Gemma 等一系列优秀开源模型的发布,公众获得了更多可自由使用的资源。然而,这些模型在实际部署时往往面临性能瓶颈——运行速度慢、对 GPU 资源需求高,难以实现高效的实时响应。为此,多种优化工具和技术应运而生,旨在提升推理效率。

为了加快大型语言模型的推理过程,业界开发了诸如 vLLM、c2translate、TensorRT-LLM 和 llama.cpp 等专用服务框架。同时,量化技术也被广泛应用于压缩模型体积、降低硬件负载,从而更高效地在有限算力下运行大模型。本文将重点介绍如何结合 vLLM 与量化策略来优化大语言模型的部署表现。

衡量性能的关键指标:延迟与吞吐量

影响大语言模型运行效率的核心因素主要包括模型规模与所依赖的 GPU 硬件配置。通常情况下,模型参数越多,所需的计算资源越庞大。评估其性能表现时,两个核心指标被广泛采用:

  • 延迟(Latency):指从输入请求发出到生成完整响应所需的时间,单位一般为秒或毫秒。
  • 吞吐量(Throughput):表示单位时间内模型能够生成的 token 数量,常以 tokens/秒 或 tokens/毫秒 来衡量。

基础环境搭建:安装必要依赖

要运行并测试大语言模型的基本推理能力,首先需要安装以下两个关键 Python 包:

  • Hugging Face 的 transformers
  • accelerate 库,用于优化多设备推理流程
pip3 install transformers
pip3 install accelerate

关于 Phi-2 模型的简要介绍

Phi-2 是由微软研发的一款先进小型基础模型,具备 27 亿参数。该模型通过融合教科书内容、代码片段等多种高质量数据进行预训练,在逻辑推理与编程任务中表现出色。其紧凑结构使其成为边缘部署和快速实验的理想选择。

使用 Hugging Face Transformers 测试 LLM 性能

以下是一个基于 Hugging Face transformers 对 Phi-2 模型进行延迟与吞吐量基准测试的示例流程:

输出结果:
Latency: 2.739394464492798 seconds
Throughput: 32.36171766303386 tokens/second

提示词:
Generate a python code that accepts a list of numbers and returns the sum. [1, 2, 3, 4, 5]

模型输出:
A: def sum_list(numbers):
    total = 0
    for num in numbers:
        total += num
    return total
print(sum_list([1, 2, 3, 4, 5]))

代码执行解析

第 6–10 行:
加载 Phi-2 模型,并对用户提示“生成一个接受数字列表并返回其和的 Python 代码”进行分词处理,准备输入模型。

第 12–18 行:
启动文本生成流程,记录从开始到完成响应生成所耗费的时间,以此计算出延迟值。

第 21–23 行:
统计生成文本的总 token 数量,将其除以之前测得的延迟时间,得出每秒可生成的 token 数,即吞吐量

测试环境为配备 A100(16GB 显存)GPU 的系统,最终实测结果显示:延迟约为 2.7 秒吞吐量达到约 32 tokens/秒

利用 vLLM 提升大语言模型部署效率

vLLM 是一个开源的大语言模型服务库,专为实现低延迟、高吞吐量的模型推理而设计。它通过改进内存管理机制,显著提升了批量请求下的响应效率。

vLLM 的核心技术原理

Transformer 架构是当前大多数大语言模型的基础组成部分,其核心在于注意力机制。该机制使模型能够分析词语之间的上下文关系,但同时也带来了高昂的内存开销。具体而言,注意力机制中的键(Key)和值(Value)张量在推理过程中需持续保存,占用大量显存。

为解决这一问题,vLLM 引入了一项创新性技术——分页注意力(PagedAttention)。这项机制借鉴操作系统的虚拟内存分页思想,将注意力缓存按块管理,动态分配与释放内存空间。这使得在生成 token 的过程中,系统可以更加灵活高效地调度显存资源。

得益于 PagedAttention 的内存优化能力,vLLM 在保持高并发处理的同时大幅降低了延迟,特别适用于需要实时响应或多用户共享的部署场景。

vLLM:基于分页注意力机制,高效部署大型语言模型

GitHub | 文档 | 论文
blog.vllm.ai

安装 vLLM:
pip3 install vllm==0.3.3

使用 vLLM 运行 Phi-2 模型

执行生成任务后的性能表现如下:

  • 延迟:1.218436622619629 秒
  • 吞吐量:63.15334836428132 tokens/秒
[1, 2, 3, 4, 5]

对应输出的 Python 代码为:

A: def sum_list(numbers):
    total = 0
    for num in numbers:
        total += num
    return total

numbers = [1, 2, 3, 4, 5]
print(sum_list(numbers))

代码执行流程解析

第 1–3 行:
导入 vLLM 中运行 Phi-2 所需的核心模块。

第 5–8 行:
加载 Phi-2 模型实例,设定输入提示内容,并配置关键推理参数。

第 10–16 行:
调用 llm.generate 方法获取模型响应,同时记录整个过程所消耗的时间以计算延迟。

第 19–21 行:
统计生成结果中的总 token 数量,结合延迟时间计算出每秒可处理的 token 数,即吞吐量。

第 23–24 行:
提取并展示最终生成的文本内容。

pip3 install bitsandbytes

性能对比分析

在相同提示词“生成一个接受数字列表并返回其和的 Python 代码。”下,于同一硬件环境(A1000 GPU,16GB 显存)中测试:

  • vLLM:延迟为 1.2 秒,吞吐量达 63 tokens/秒
  • Hugging Face Transformers:延迟为 2.85 秒,吞吐量仅为 32 tokens/秒

可见,vLLM 在保持输出质量一致的前提下,显著降低了响应延迟并提升了处理效率。根据官方报告,在生产级设备如 A100 上部署时,vLLM 的吞吐能力最高可达 Hugging Face 的 24 倍

关于实时性能基准的说明

上述对 Phi-2 的延迟与吞吐量测量属于实验性评估,旨在展示 vLLM 对大模型推理速度的优化潜力。在实际应用场景中,例如聊天系统,token 是逐步流式输出的,因此性能指标更为复杂。

影响 LLM 实时表现的关键因素包括:

  • 首次 token 生成时间(Time to First Token)
  • 每个后续 token 的生成间隔
  • 输入序列长度
  • 预期输出 token 总数
  • 模型规模

通常情况下,整体延迟 ≈ 首次 token 时间 + (单个 token 生成时间 × 输出 token 总数)。随着输入长度增加,模型响应速度会下降。为了提升吞吐,常见的做法是将多个请求进行批处理并发执行推理。

综合来看,借助高性能 GPU 和高效推理引擎(如 vLLM),能够有效改善大型语言模型在实时服务中的延迟与吞吐表现。

在 Google Colab 上部署 vLLM

链接:
colab.research.google.com

大型语言模型的量化技术

量化是一种将模型权重从高精度(如 float16)压缩至低精度(如 int8 或 int4)的技术,用于减少内存占用和计算开销。常见形式为 8-bit4-bit 量化。

vLLM 等现代推理框架配合量化手段,可在有限资源下实现低延迟、高吞吐的 LLM 服务。

Phi-2 为例,该模型仅有 27 亿参数,可在 Google Colab 提供的 T4 GPU 上顺利运行,无论是使用 Hugging Face 还是 vLLM。然而,对于参数量更大的模型,如 Mistral 7B(约 70 亿参数),标准方式无法在 Colab 环境中加载。

此时,量化成为关键解决方案——它能显著降低显存需求,使大模型得以在资源受限设备上运行。

BitsandBytes 库介绍

BitsandBytes 是一个支持 8-bit 和 4-bit 量化的 Python 工具库,内置多种定制化量化策略,广泛应用于大模型压缩场景。

安装命令:

towardsdatascience.com/deploying-large-language-models-vllm-and-quantizationstep-by-step-guide-on-how-to-accelerate-becfe17396a2?source=collection_archive---------1-----------------------#2024-04-05

Mistral 7B 模型的量化实践

通过 BitsandBytes 对 Mistral 7B 实施量化后,可成功将其部署于 Colab 等轻量级 GPU 环境中,从而实现原本不可行的大模型本地推理。

这是 vLLM 工作机制的高层概述。更多技术细节请参考 vLLM 官方文档。

由 MistralAI 推出的 Mistral 7B 是一个具备 70 亿参数的语言模型,属于当前最先进的开源大语言模型之一。本文将详细介绍如何在 Google Colab 的 T4 GPU 环境中,利用多种量化技术成功运行该模型。

首先介绍的是 8-bit 量化方法。这一过程指的是将模型权重从原始精度转换为 8 位整数表示,从而显著降低内存占用并提升推理效率。
BitsandBytes 库已经与 Hugging Face 的 Transformers 框架实现深度集成,允许开发者使用几乎相同的加载代码来实现量化模型的部署,仅需进行少量配置修改即可。

代码实现如下:

  • 第 1 行:导入必要的依赖包,其中包括用于量化配置的 BitsandBytesConfig 模块。
  • 第 3–4 行:创建量化配置对象,并将 load_in_8bit 参数设为 True,指示系统以 8-bit 精度加载模型权重。
  • 第 7–9 行:在调用模型加载函数时传入上述配置,同时设置 device_mapbitsandbytes,以便自动管理 GPU 内存分配。随后完成分词器的加载工作。
towardsdatascience.com/deploying-large-language-models-vllm-and-quantizationstep-by-step-guide-on-how-to-accelerate-becfe17396a2?source=collection_archive---------1-----------------------#2024-04-05

接下来是更进一步的 4-bit 量化方案。相比 8-bit,该方法将权重压缩至 4 位精度,在保持较高性能的同时大幅减少显存消耗。
其代码结构与 8-bit 方案相似,但存在几项关键调整:

  • 将原先的 load_in_8bit 更改为 load_in_4bit
  • 新增参数 bnb_4bit_compute_dtype 并设置为 bfloat16,用于指定模型计算过程中所使用的数据类型。

bfloat16 是一种高效的浮点格式,常用于加速推理阶段的运算,适用于 4-bit 和 8-bit 两种量化模式。若使用 8-bit 量化,则对应参数应为 bnb_8bit_compute_dtype

为了获得更优的量化效果,可采用 QLoRA 论文中提出的 NF4(4 位标准浮点)方法结合双重量化策略。
NF4 是一种经过优化的 4 位量化格式,相较于传统方法能提供更高的精度保留能力。而双重量化则通过两阶段量化机制——即对第一次量化的残差再次进行量化——进一步提升了权重表示的准确性。
根据 QLoRA 的研究结果,这种组合方式在显著降低内存需求的同时,并不会引起明显的准确率下降。

pip3 install transformers
pip3 install accelerate

具体配置细节如下:

  • 第 4–9 行:BitsandBytesConfig 中设定以下参数:
    • load_in_4bit = True:启用 4 位精度加载;
    • bnb_4bit_quant_type = 'nf4':选择 NF4 作为量化类型;
    • bnb_4bit_use_double_quant = True:开启双重量化功能;
    • bnb_4bit_compute_dtype = bfloat16:使用 bfloat16 数据类型进行计算,加快推理速度。

第 11–13 行:基于上述配置加载模型权重及分词器组件,完成整个模型初始化流程。

pip3 install bitsandbytes

以下是完整的模型量化实现代码示例及其输出结果:

<s> [INST] What is Natural Language Processing? [/INST] Natural Language Processing (NLP) is a subfield of artificial intelligence (AI) and computer science that deals with the interaction between computers and human language. Its main objective is to read, decipher, understand, and make sense of the human language in a valuable way. It can be used for various tasks such as speech recognition, text-to-speech synthesis, sentiment analysis, machine translation, part-of-speech tagging, name entity recognition, summarization, and question-answering systems. NLP technology allows machines to recognize, understand, and respond to human language in a more natural and intuitive way, making interactions more accessible and efficient.</s>

量化是一种高效的技术,能够显著优化大型语言模型在小型 GPU 上的运行效率。该方法适用于多种主流大模型,例如 Llama 70B、Falcon 40B 和 mpt-30b 等。根据 LLM.int8 论文的研究结果,经过量化处理后,超大规模语言模型的精度损失非常有限,远优于小型模型的表现。因此,量化技术尤其适合应用于参数量极大的模型;而对于规模较小的模型,由于其在量化过程中更容易出现明显的准确率下降,效果则相对较差。

在实际应用中,Google Colab 提供了便捷的环境来运行量化后的模型,比如 Mixtral 7B 的量化版本,使得研究人员和开发者可以在资源受限的设备上进行高效的推理任务。
[## Google Colaboratory
编辑描述
colab.research.google.com]

本文介绍了一种系统性的方法,用于评估大型语言模型在推理过程中的速度性能。文中详细阐述了 vLLM 的工作原理,并说明其如何有效提升模型的推理吞吐量并降低延迟。此外,还深入探讨了量化技术的核心机制及其在小型 GPU 上部署大型语言模型时所发挥的关键作用。

www.linkedin.com/in/ayoola-olafenwa-003b901a9/

参考文献

  • [## vLLM:使用 PagedAttention 轻松、快速、低成本地提供 LLM 服务
    GitHub | 文档 | 论文
    blog.vllm.ai]
  • [## 使用 bitsandbytes、4 位量化和 QLoRA 使 LLM 更加易用
    我们正在通过开源和开放科学的方式推进并普及人工智能
    huggingface.co]
  • [## 理解 LLM 推理性能基准
    本指南帮助你解读 LLM 性能指标,直接对比延迟、吞吐量和成本。
    www.baseten.co]
  • [## 什么是量化的 LLM?
    发现量化 LLMs 的强大功能!了解模型量化如何减少模型大小,提升硬件使用效率,以及…
    www.tensorops.ai]
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:LLM Transformers step-by-step Intelligence interactions

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-5 12:50