
人工智能大模型模型推理服务推理引擎本地部署模型量化【免费下载链接】lmdeployLMDeploy is a toolkit for compressing, deploying, and serving LLMs.项目地址https://gitcode.com/gh_mirrors/lm/lmdeploy点击查看免费下载本文以 LMDeploy 的 w4a16INT4 权重量化技术为主线完整讲解如何在当前开源仓库的 TurboMind 引擎上完成 4bit 模型的 AWQ 量化、量化后模型的命令行对话验证、离线 pipeline 推理、OpenAI 兼容 RESTful 服务部署以及 RTX 4090 上的真实吞吐表现。读完本文你将掌握从一条命令完成 INT4 量化到把量化模型封装为可对外服务的端到端方案并理解 AWQ 平滑量化在源码中的落地细节可直接复用于 InternLM、Llama、Qwen 等主流架构模型。一、概述什么是 w4a16TurboMind 引擎支持什么w4a16 是指权重以 4bit 整数存储、激活值仍保持 16bit 浮点精度的量化方案是当前在消费级 GPU 上部署大模型最主流的压缩手段之一。LMDeploy 的TurboMind 引擎支持推理由两种业界主流算法量化得到的 4bit 模型AWQActivation-aware Weight Quantization基于激活值分布感知的权重量化方法量化时利用校准数据集的激活统计信息对权重做平滑缩放从而显著降低 4bit 量化带来的精度损失GPTQGenerative Pre-trained Transformer Quantization基于二阶 Hessian 信息的逐层权重量化方法同样能产出 4bit 权重。需要注意一个关键前提LMDeploy 的量化模块目前仅内置 AWQ 量化算法。也就是说你可以用lmdeploy lite auto_awq一键产出 AWQ 4bit 模型也可以直接加载社区已有的 GPTQ 4bit 模型进行推理但仓库本身不提供 GPTQ 量化工具GPTQ 模型需通过 AutoGPTQ 等外部工具预先量化。这一边界在 lmdeploy/cli/lite.py 的 CLI 定义中体现得十分清楚auto_awq子命令对应 AWQ 算法实现而auto_gptq子命令仅作为入口存在实际调用 lmdeploy/lite/apis/gptq.py 中的auto_gptq封装。1.1 支持 AWQ/GPTQ INT4 推理的 NVIDIA GPUTurboMind 引擎对 INT4 推理的 GPU 架构支持范围如下对应 CUDA Compute CapabilityGPU 架构Compute Capability代表显卡Voltasm70V100Turingsm7520 系列RTX 2080 Ti 等、T4Amperesm80 / sm8630 系列、A10、A16、A30、A100Ada Lovelacesm8940 系列RTX 4090 等也就是说从 V100 到 RTX 40 系列均可运行 INT4 推理无需依赖最新的 Hopper 架构。进行量化和推理前请先按照 安装指南 完成 lmdeploy 的安装。二、模型量化一条命令完成 AWQ 4bit 压缩2.1 标准量化命令LMDeploy 将量化能力封装为lmdeploy lite auto_awq子命令。以量化internlm/internlm2_5-7b-chat为例完整命令如下export HF_MODELinternlm/internlm2_5-7b-chat export WORK_DIRinternlm/internlm2_5-7b-chat-4bit lmdeploy lite auto_awq \ $HF_MODEL \ --calib-dataset wikitext2 \ --calib-samples 128 \ --calib-seqlen 2048 \ --w-bits 4 \ --w-group-size 128 \ --batch-size 1 \ --work-dir $WORK_DIR量化结束后量化后的权重文件含模型配置、tokenizer 等会全部保存在$WORK_DIR指定的目录下。绝大多数情况下上述可选参数可以直接采用默认值。例如量化同一模型命令可以简化为lmdeploy lite auto_awq internlm/internlm2_5-7b-chat --work-dir internlm2_5-7b-chat-4bit2.2 量化参数详解默认值与取值范围从 lmdeploy/cli/lite.py 的 CLI 参数定义和 lmdeploy/cli/utils.py 的ArgumentHelper中可以确认各参数的默认值与语义参数默认值说明--calib-datasetwikitext2校准数据集名称。可选值wikitext2、c4、pileval、gsm8k、neuralmagic_calibration、open-platypus、openwebtext--calib-samples128用于校准的样本数。设置为0表示无数据量化data free quantization即不需要加载校准数据集--calib-seqlen2048校准时的序列长度--w-bits4权重量化位数--w-group-size128权重量化统计的分组大小per-group 量化粒度--batch-size1运行校准样本的 batch size。显存小则用小 batch-sizebatch-size 越大校准耗时越短但占用更多显存--search-scaleFalse是否搜索缩放比例smooth 系数。默认关闭此时仅以 0.5 的固定比例做平滑量化--work-dir./work_dir量化结果输出目录--devicecuda权重量化设备支持cuda与npu--dtypeauto加载权重与校准推理的数据类型可选auto、float16、bfloat16--revisionNone远程模型的版本号分支名、tag 或 commit id不指定则用默认版本--download-dirNone模型下载与加载目录默认使用 HuggingFace 默认缓存目录--trust-remote-codeFalse是否信任并执行远端自定义代码其中--calib-samples 0的无数据量化路径在 lmdeploy/lite/apis/auto_awq.py 中实现此时直接调用load_model_and_tokenizer加载模型跳过基于校准数据集激活统计的平滑步骤仅对权重做纯统计量化适合无法获取校准数据的场景。2.3 关键实践建议--work-dir参数务必包含模型名就像示例中internlm2_5-7b-chat-4bit这样。原因在于推理接口会以模糊搜索方式将--work-dir与内置对话模板chat template做匹配模型名携带在目录名中时推理时即可自动选中合适的对话模板无需手动指定。量化后精度有损时的处理建议开启--search-scale重新量化并把--batch-size调大例如 8。search_scale开启后量化过程会明显变慢--batch-size影响显存占用量可根据机器实际情况酌情调整。从源码看开启--search-scale后校准阶段会使用CalibrationContextV2并搜索每个线性层的最优平滑比例见 lmdeploy/lite/apis/calibrate.py而关闭时则使用固定 alpha0.5 的CalibrationContext。量化结果自带量化配置元数据量化完成后auto_awq会在模型 config 中写入quantization_config字段包含quant_methodawq、versiongemm、bits、group_size、zero_point等关键信息见 lmdeploy/lite/apis/auto_awq.py这使得推理端可以自动识别模型为 AWQ 格式。2.4 量化完成后快速验证对话量化完成后可以直接在控制台与量化模型对话快速验证效果lmdeploy chat ./internlm2_5-7b-chat-4bit --model-format awq注意这里必须显式指定--model-format awq让 TurboMind 引擎按 AWQ 4bit 权重格式加载模型。三、AWQ 量化原理与源码实现解读理解 AWQ 在 LMDeploy 中的落地方式有助于你判断量化结果异常时该如何调整参数。整个流程在 lmdeploy/lite/quantization/awq.py 中实现核心有三步第一步层结构映射。文件头部定义了NORM_FCS_MAP与FC_FCS_MAP两张映射表覆盖 Llama、InternLM、Qwen、Phi-3、GLM、Mixtral、Qwen2-VL 等主流架构。例如对 Llama 系列input_layernorm对应self_attn.k_proj/q_proj/v_projself_attn.v_proj对应self_attn.o_proj。这张表告诉量化器哪些 LayerNorm 后的线性层、哪些相邻线性层之间存在激活分布关联从而决定平滑量化的作用对象。当模型架构不在映射表中时check_awq_supported 会抛出NotImplementedError。第二步平滑smoothing。AWQ 的核心思想是把量化难度从激活迁移到权重。smooth_ln_fcs根据校准阶段收集到的激活尺度act_scales与权重尺度w_scales按scales act_scales^alpha / w_scales^(1-alpha)默认alpha0.5计算缩放系数对 LayerNorm 权重做除法、对后续全连接层权重做乘法从而在数学上等价地削平激活的极端值见 smooth_ln_fcs。smooth_fc_fcs处理 v_proj→o_proj 这类相邻线性层的平滑并针对 Llama-2 的 GQA 结构、Qwen 的融合 QKV 结构做了特判见 smooth_fc_fcs。第三步权重量化。平滑之后quant_weights对每个目标线性层调用pseudo_quantize_tensor做伪量化按group_size128分组每组计算 scale 与 zero-point将权重离散到 4bit 整数范围再用WeightOnlyQLinear替换原始nn.Linear见 quant_weights 与 pseudo_quantize_tensor。含lora的模块会被自动跳过量化SKIPPED_MODULE [lora]。从源码结构看量化全程遵循逐层加载到 GPU → 平滑/量化 → 释放回 CPU的流水线并在每层处理后调用torch.cuda.empty_cache()并打印峰值显存占用因此显存紧张时减小--batch-size和--calib-seqlen是有效的缓解手段。四、模型评测量化后的模型质量需要用权威评测体系验证。LMDeploy 官方推荐使用OpenCompass来评测量化模型在多个维度上的能力评测时通过 LMDeploy 提供的推理后端加载 4bit 模型。具体评测方法请参考 OpenCompass 官方文档中使用 LMDeploy 进行评测的指南章节其中给出了在 OpenCompass 中配置 LMDeploy 后端、指定model_formatawq等参数的方法。此外仓库内的 autotest/evaluate 目录提供了基于 LMDeploy API 的评测用例如 test_api_evaluate.py可作为自行搭建评测链路的参考。五、模型推理5.1 本地量化模型的离线推理量化完成后通过以下几行代码即可实现批量离线推理from lmdeploy import pipeline, TurbomindEngineConfig engine_config TurbomindEngineConfig(model_formatawq) pipe pipeline(./internlm2_5-7b-chat-4bit, backend_configengine_config) response pipe([Hi, pls intro yourself, Shanghai is]) print(response)要点说明必须通过TurbomindEngineConfig(model_formatawq)显式声明模型为 AWQ 格式TurboMind 引擎才会按 4bit 分组量化权重加载model_format在 lmdeploy/cli/utils.py 中定义了hf、awq、gptq、compressed-tensors、fp8、mxfp4等取值pipeline返回的是一个包含多条回复的响应对象支持传入字符串列表做批量推理关于pipeline的完整参数说明请参考 pipeline.md。5.2 直接推理 HuggingFace Hub 上的 AWQ 4bit 模型除了本地量化模型LMDeploy 还支持直接推理 HuggingFace Hub 上已用 AWQ 量化好的 4bit 权重模型典型来源包括lmdeploy 官方空间和TheBloke 空间下发布的模型# 推理 lmdeploy 空间下的模型 from lmdeploy import pipeline, TurbomindEngineConfig pipe pipeline(lmdeploy/llama2-chat-70b-4bit, backend_configTurbomindEngineConfig(model_formatawq, tp4)) response pipe([Hi, pls intro yourself, Shanghai is]) print(response) # 推理 TheBloke 空间下的模型 from lmdeploy import pipeline, TurbomindEngineConfig, ChatTemplateConfig pipe pipeline(TheBloke/LLaMA2-13B-Tiefighter-AWQ, backend_configTurbomindEngineConfig(model_formatawq), chat_template_configChatTemplateConfig(model_namellama2) ) response pipe([Hi, pls intro yourself, Shanghai is]) print(response)两个示例体现了两种常见场景第一个示例中tp4表示 4 卡张量并行tensor parallelism用于 70B 级别的大模型tp取值应为 2 的幂次第二个示例中由于模型名中不携带可模糊匹配的模板信息因此通过ChatTemplateConfig(model_namellama2)手动指定对话模板这与 2.3 节建议work-dir 带模型名以自动匹配模板的机制形成互补。六、推理服务一键封装 OpenAI 兼容 RESTful APILMDeploy 的api_server支持把量化模型一键封装为服务对外提供的 RESTful API 与 OpenAI 接口兼容。启动命令如下lmdeploy serve api_server ./internlm2_5-7b-chat-4bit --backend turbomind --model-format awq服务默认监听端口为23333--backend turbomind指定使用 TurboMind 引擎--model-format awq指定量化格式二者缺一不可。服务启动后可以在终端通过api_client与 server 对话lmdeploy serve api_client http://0.0.0.0:23333通过 Swagger UI 在线阅读和试用各接口浏览器访问http://0.0.0.0:23333即可看到 Swagger UI在线调试/v1/chat/completions、/v1/models等接口查阅接口定义文档各接口的详细定义与使用方法见 api_server.md。七、推理性能LMDeploy 在NVIDIA GeForce RTX 4090上对 4bit 量化的 Llama-2-7B-chat 与 Llama-2-13B-chat 做了 token 生成速度对比。测试配置为 batch size 1(prompt_tokens, completion_tokens) (1, 512)即单条 prompt token、生成 512 个 token单位为 tokens/smodelllm-awqmlc-llmturbomindLlama-2-7B-chat112.9159.4206.4Llama-2-13B-chatN/A90.7115.8可以看到在相同的 4bit 量化与单 batch 条件下TurboMind 引擎在两个模型上的吞吐均高于对比方案。需要注意该数据是特定硬件RTX 4090与特定测试配置下的实测结果实际吞吐会随模型大小、输入输出长度、batch size、GPU 型号而变化不应外推为普适结论。如果你在自己的环境复测可以参照 benchmark 目录下的基准测试脚本如 benchmark_throughput.py搭建测试。八、快速问答FAQQ1量化时出现 Out of Memory显存不够怎么办可以通过以下组合手段降低显存占用减小传参--calib-seqlen例如从 2048 降到 1024 或更低增大传参--calib-samples用更多短样本替代长序列样本降低单次激活显存使用--batch-size为 1源码中 batch size 直接影响校准阶段送入模型的样本张量大小。Q2量化时无法连接 HuggingFace 并下载数据集/模型怎么办可以尝试使用 HuggingFace 镜像站加速下载在终端先执行export HF_ENDPOINThttps://hf-mirror.com再重新执行量化命令即可。此外auto_awq也支持通过--download-dir指定已下载模型的本地目录避免重复走网络下载见 lmdeploy/lite/apis/auto_awq.py本地路径存在时直接跳过下载。九、总结与延伸阅读至此你已经掌握 LMDeploy 从 AWQ 4bit 量化、精度验证、离线推理到在线服务的完整链路lmdeploy lite auto_awq负责量化压缩lmdeploy chat负责快速对话验证pipeline TurbomindEngineConfig(model_formatawq)负责批量离线推理lmdeploy serve api_server负责对外提供服务。核心要点可以概括为量化时通过--search-scale与更大的--batch-size挽回精度推理时务必声明model_formatawq服务化时同时指定--backend turbomind与--model-format awq。如需进一步深入仓库内以下文档与源码可供继续研究量化工具链完整 CLI 定义lmdeploy/cli/lite.pyAWQ 量化入口实现lmdeploy/lite/apis/auto_awq.pyAWQ 平滑与伪量化核心算法lmdeploy/lite/quantization/awq.py校准流程与层类型映射lmdeploy/lite/apis/calibrate.py安装指南docs/zh_cn/get_started/installation.mdpipeline 使用详解docs/zh_cn/llm/pipeline.mdapi_server 接口文档docs/zh_cn/llm/api_server.md相关量化主题W8A8 量化见 docs/zh_cn/quantization/w8a8.mdKV Cache 量化见 docs/zh_cn/quantization/kv_quant.md赞分享人工智能大模型模型推理服务推理引擎本地部署模型量化【免费下载链接】lmdeployLMDeploy is a toolkit for compressing, deploying, and serving LLMs.项目地址https://gitcode.com/gh_mirrors/lm/lmdeploy点击查看免费下载相关推荐LMDeploy W4A16 INT4 权重量化与推理实战AWQ/GPTQ 从量化、评估到服务部署完整指南LMDeploy W4A16 INT4 权重量化与推理实战AWQ/GPTQ 从量化、评估到服务部署完整指南 LMDeploy 的 TurboMind 引擎支持人工智能大模型模型推理服务推理引擎本地部署模型量化LMDeploy TurboMind 运行 llm-compressor INT4 量化模型指南AWQ/GPTQ 量化、部署与精度评测LMDeploy TurboMind 运行 llm compressor INT4 量化模型指南AWQ/GPTQ 量化、部署与精度评测 LMDeploy 的人工智能大模型模型推理服务推理引擎本地部署模型量化基于 AutoAWQ 的 Yi 模型 AWQ 量化实战从 INT4 权重量化到推理部署基于 AutoAWQ 的 Yi 模型 AWQ 量化实战从 INT4 权重量化到推理部署 本指南以开源仓库 quantization/awq/README.md大模型微调模型量化多模态本地部署上一篇告别繁琐DOM操作Knockout.js让你的界面交互设计提速3倍下一篇Minishift网络配置完全手册DNS、代理和容器通信的最佳实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考