LLaMaの量化部署

本文比较了几种部署LLaMa模型的量化方案,如Huggingface的LLM.int8、GPTQ、GPTQ-for-LLaMa、exllama和llama.cpp,着重介绍了GPTQ带来的显著速度提升,尤其是在大规模模型上。同时,探讨了不同工具的优缺点和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文导论部署 LLaMa 系列模型常用的几种方案,并作速度测试。包括 Huggingface 自带的 LLM.int8(),AutoGPTQ, GPTQ-for-LLaMa, exllama, llama.cpp。

总结来看,对 7B 级别的 LLaMa 系列模型,经过 GPTQ 量化后,在 4090 上可以达到 140+ tokens/s 的推理速度。在 3070 上可以达到 40 tokens/s 的推理速度。

LM.int8()

来自论文:LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

https://arxiv.org/pdf/2208.07339.pdf

LM.int8() 时 Hugingface 集成的量化策略(https://huggingface.co/docs/transformers/main_classes/quantization)。能够通过在 .from_pretrain() 时候传递 load_in_8bit 来实现,针对几乎所有的 HF Transformers 模型都有效。大致方法是,在矩阵点积计算过程中, 将其中的 outliers 参数找出来(以行或列为单位),然后用类似 absolute maximum (absmax) quantization 的方法,根据行/列对 Regular 参数做量化处理,outlier 参数仍然做 fp16 计算,最后相加。根据 huggingface 的博客 (https://huggingface.co/blog/hf-bitsandbytes-integration), LLM.INT8() 能够再模型性能不影响很多的前提下,让我们能用更少的资源进行 LLM 推理。但 LLM.int8() 普遍的推理速度会比 fp16 慢。博客中指出,对于越小的模型, int8() 会导致更慢的速度。

结合论文中的实验结果,模型越大,int8() 加速越明显,个人猜测是由于非 outlier 数量变多了,更多的参数进行了 int8 计算,抵消了额外的量化转化时间开销?GPTQ

GPTQ: ACCURATE POST-TRAINING QUANTIZATION FOR GENERATIVE PRE-TRAINED TRANSFORMERS

使用 GPTQ 量化的模型具有很大的速度优势,与 LLM.int8() 不同,GPTQ 要求对模型进行 post-training quantization,来得到量化权重。GPTQ 主要参考了 Optimal Brain Quanization (OBQ),对OBQ 方法进行了提速改进。有网友在 文章 中对 GPTQ, OBQ, OBS 等量化策略进行了整理,这里就不多赘述了。

以下对几个 GPTQ 仓库进行介绍。以下所有测试均在 4090 上进行,模型推理速度采用 oobabooga/text-generation-webui (https://github.com/oobabooga/text-generation-webui) 提供的 UI。

GPTQ-for-LLaMa

专门针对 LLaMa 提供 GPTQ 量化方案的仓库,如果考虑 GPU 部署 LLaMa 模型的话,GPTQ-for-LLaMa 是十分指的参考的一个工具。像 http://huggingface.co 上的 Thebloke 很大部分模型都是采用 GPTQ-for-LLaMa 进行量化的。

Post Training Quantization:GPTQ-for-LLaMa 默认采用 C4 (https://huggingface.co/datasets/allenai/c4) 数据集进行量化训练(只采用了 C4 中英文数据的一部分进行量化,而非全部 9TB+的数据):

CUDA_VISIBLE_D
llama2是一款AI模型部署引擎,可以将训练好的模型应用到实际的生产环境中。与在线部署不同,离线部署是指将模型部署到本地设备,使其可以在没有网络连接的情况下运行。 llama2离线部署的主要优点之一是保护模型的私密性和安全性。由于模型和数据都存储在本地,而不是通过网络传输,因此可以有效地防止未经授权的访问和攻击。此外,离线部署还可以提高模型的响应速度,因为数据不需要通过网络传输。 离线部署过程相对较为简单。首先,需要将训练好的模型从云端或其他地方导出为可用于离线部署的格式,如TensorFlow SavedModel或ONNX。接下来,在目标设备上安装llama2,并将模型文件传输到该设备上。然后,使用llama2提供的命令行工具或API调用去加载模型,创建推理引擎,并开始进行推理操作。 离线部署的一个挑战是设备的计算资源限制。由于离线部署通常在资源有限的设备上进行,如边缘设备或移动设备,因此需要对模型进行优化,以在有限的资源下实现高性能。这可以通过量化模型、裁剪冗余参数和使用硬件加速等方法来实现。 总之,llama2离线部署提供了一种安全、高效的方式,将训练好的AI模型部署到本地设备上。这种部署方式在一些特定的场景中非常有用,尤其是对于需要保护私密数据和实现低延迟的应用程序。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值