部署文档和思考
硬件与部署平台、模型量化方式、量化精度之间的关系
GPTQ 和 AWQ 都是针对大型语言模型 (LLM) 的后训练量化方法,旨在减少模型大小并加速推理,同时尽量保持模型性能。这些方法通常将模型权重从 FP16/FP32 量化到更低的精度,如 INT4。对 SM(Streaming Multiprocessor,即 NVIDIA GPU 的计算能力)版本的要求主要取决于所使用的量化库和优化内核。
以下是关于 GPTQ 和 AWQ 混合精度对 SM 版本要求的一些总结:
- 常见的量化精度与混合精度概念:
W4A16 量化:这是 GPTQ 和 AWQ 的常见实现方式,意味着权重是 4 位量化 (INT4),而激活值通常保持 16 位浮点 (FP16 或 BF16)[1]。这种方法主要用于减少模型权重占用的 GPU 内存[1].
混合精度:广义上指在神经网络中使用不同精度的数据类型进行计算。在 GPTQ/AWQ 的上下文中,通常是指权重是低精度(如 INT4),而激活值或累加器是高精度(如 FP16)。AWQ 方法通过选择性地保持少量关键权重(例如 0.1%-1%)为 FP16,其余量化为 INT3/INT4,以进一步提升性能,但这种“混合精度数据类型”的系统实现可能更复杂[1][2][3]。
- SM 版本要求:
VLLM 和其他量化库(如 AutoAWQ、LMDeploy)的文档提供了明确的 SM 版本支持列表,因为它们的优化内核(如 Marlin、GEMM)依赖特定的 GPU 架构特性。
VLLM 的量化内核支持[3]:
Marlin (GPTQ/AWQ/FP8):通常需要较新的架构,例如:
Ampere (SM 8.0/8.6) ✅
Ada Lovelace (SM 8.9) ✅
Hopper (SM 9.0) ✅
INT8 (W8A8):支持范围更广,包括:
Volta (SM 7.0) ✅
Turing (SM 7.5) ✅
Ampere (SM 8.0/8.6) ✅
Ada Lovelace (SM 8.9) ✅
Hopper (SM 9.0) ✅
注意: 即使是较旧的 Volta 架构 (SM 7.0) 也可能支持 INT8 量化,但对于更高效的 INT4 甚至 FP8 量化内核(如 Marlin),通常需要 Turing (SM 7.5) 或更高版本[3]。
AutoAWQ 的要求[4]:
NVIDIA GPU:计算能力(Compute Capability)必须是 7.5 (Turing) 或更高版本。
CUDA 版本:CUDA 11.8 或更高版本。
LMDeploy 的要求[2]:
V100 (SM 7.0):支持 AWQ/GPTQ INT4 推理。
这一点决定了模型的选型。
Turing (SM 7.5):包括 20 系列显卡和 T4。
Ampere (SM 8.0, 8.6):包括 30 系列显卡、A10、A16、A30、A100。
Ada Lovelace (SM 8.9):包括 40 系列显卡。
总结表格 (基于 NVIDIA SM 版本):
SM 版本 架构代号 典型 GPU 系列 GPTQ/AWQ (INT4) 支持 (取决于内核和库)
7.0 Volta V100 ✅ (LMDeploy, VLLM的INT8,部分INT4)[2][3]
7.5 Turing RTX 20 Series, T4 ✅ (AutoAWQ, LMDeploy, VLLM)[2][3][4]
8.0 Ampere RTX 30 Series, A100 ✅ (AutoAWQ, LMDeploy, VLLM)[2][3][4]
8.6 Ampere RTX 30 Series (refresh), A10/A30/A40 ✅ (AutoAWQ, LMDeploy, VLLM)[2][3][4]
8.9 Ada Lovelace RTX 40 Series ✅ (AutoAWQ, LMDeploy, VLLM)[2][3][4]
9.0 Hopper H100 ✅ (VLLM Marlin, Machete)[1][3]
关键点:
计算能力 (Compute Capability) 是决定 GPU 能否有效运行特定量化内核的关键。
Marlin 内核 (一种用于 FP16xINT4 矩阵乘法的优化内核) 及其相关实现通常需要较新的 GPU 架构(Ampere、Ada Lovelace、Hopper),以实现最佳性能[1][3][4]。
虽然某些库可能在旧架构上支持 INT4,但性能可能不如较新架构上的优化内核。
对于量化过程本身,通常需要 GPU,并且耗时可能较长(例如 175B 模型在 A100 上需要 4 GPU 小时进行 GPTQ 量化)
系统环境驱动版本关系
NVIDIA驱动和CUDA驱动版本必须 >= CUDA ToolKit 驱动版本
安装好驱动后手动添加环境变量
使用miniconda隔离python包的冲突 指定python=3.11 稳定版本
部署平台之间的差异
GPUstack:不能支持像Qwen3那样新的模型,因为Vllm版本太旧了,更新版本慢,可以支持部署视觉多模态模型、embedding模型等等,优点是自带可视化页面以及api接入信息并且对于多模型的并行部署非常方便
LMDploy:优点是支持的模型更广、更新,并且优化好跑出的数据比GPUStack更漂亮,支持docker run 部署,多模型并行部署管理比GPUstack稍逊,缺点技术文档晦涩难懂、门槛较高。
VLLM:原生的部署平台,github上的分支更新迅速,合并后再install就是最新版。但是对于并性部署管理不太好,切换模型需要使用命令行操作。
经验总结
GPU底层SM架构决定计算能力 比如volta架构计算能力是7.0 部署平台/库(如vLLM、AutoAWQ、LMDeploy)本身不直接决定GPU能否运行模型,而是它们提供了高度优化的、针对特定GPU架构和特定量化方法的推理内核 如(只讨论volta架构) LMDploy只支持GPTQ的Int4量化版本
VLLM支持GPTQ和AWQ的部分Int8部分和部分Int4版本 这些可以在github对应的文档找到相关信息
再选取对应的模型版本进行部署
这里提供对应的技术文档
到这里终于弄明白为何4卡V100部署不支持的模型会出现异常情况的原因,本质是没弄懂架构跟库的关系。
并且对于较新的模型需要结合最新的github分支去进行部署,还是得多耐心看文档。
反思
1.尽量使用原生vllm库,不按文档干出现的问题千奇百怪。多看文档和Issues,是可以解决这次90%的问题。
2.关于硬件的底层知识要稍微懂