text-generation-inference 文档
量化
并获得增强的文档体验
开始入门
量化
TGI 提供了许多量化方案,以便根据您的用例有效且快速地运行 LLM。TGI 支持 GPTQ、AWQ、bits-and-bytes、EETQ、Marlin、EXL2 和 fp8 量化。
要利用 GPTQ、AWQ、Marlin 和 EXL2 量化,您必须提供预量化的权重。而对于 bits-and-bytes、EETQ 和 fp8,权重由 TGI 动态量化。
我们建议使用官方量化脚本来创建您的量化模型
对于动态量化,您只需传递一种受支持的量化类型,TGI 将负责其余的工作。
使用 bitsandbytes、EETQ 和 fp8 进行量化
bitsandbytes 是一个用于对模型应用 8 位和 4 位量化的库。与 GPTQ 量化不同,bitsandbytes 不需要校准数据集或任何后处理——权重在加载时自动量化。但是,使用 bitsandbytes 进行推理比 GPTQ 或 FP16 精度慢。
8 位量化使数十亿参数规模的模型能够适应更小的硬件,而不会过度降低性能。在 TGI 中,您可以通过添加 --quantize bitsandbytes
来使用 8 位量化,如下所示 👇
docker run --gpus all --shm-size 1g -p 8080:80 -v $volume:/data ghcr.io/huggingface/text-generation-inference:3.2.2 --model-id $model --quantize bitsandbytes
4 位量化也可以通过 bitsandbytes 实现。您可以选择以下 4 位数据类型之一:4 位浮点数 (fp4
) 或 4 位 NormalFloat
(nf4
)。这些数据类型是在参数高效微调的背景下引入的,但您可以通过在加载时自动转换模型权重来将它们应用于推理。
在 TGI 中,您可以通过添加 --quantize bitsandbytes-nf4
或 --quantize bitsandbytes-fp4
来使用 4 位量化,如下所示 👇
docker run --gpus all --shm-size 1g -p 8080:80 -v $volume:/data ghcr.io/huggingface/text-generation-inference:3.2.2 --model-id $model --quantize bitsandbytes-nf4
您可以通过阅读这篇博客文章了解有关 8 位量化的更多信息,并通过阅读这篇博客文章了解 4 位量化。
同样,您可以传递 --quantize eetq
或 --quantize fp8
以分别用于相应的量化方案。
除此之外,TGI 允许通过传递模型权重和校准数据集来直接创建 GPTQ 量化模型。
使用 GPTQ 进行量化
GPTQ 是一种后训练量化方法,用于缩小模型尺寸。它通过找到权重压缩版本来量化层,这将产生最小均方误差,如下所示 👇
给定一个层具有权重矩阵和层输入,找到量化权重:
TGI 允许您运行已 GPTQ 量化的模型(请参阅此处提供的模型)或使用量化脚本量化您选择的模型。您可以通过简单地传递 —quantize 来运行量化模型,如下所示 👇
docker run --gpus all --shm-size 1g -p 8080:80 -v $volume:/data ghcr.io/huggingface/text-generation-inference:3.2.2 --model-id $model --quantize gptq
请注意,TGI 的 GPTQ 实现未使用底层的 AutoGPTQ。但是,使用 AutoGPTQ 或 Optimum 量化的模型仍然可以由 TGI 提供服务。
要使用 GPTQ 和校准数据集量化给定模型,只需运行
text-generation-server quantize tiiuae/falcon-40b /data/falcon-40b-gptq
# Add --upload-to-model-id MYUSERNAME/falcon-40b to push the created model to the hub directly
这将创建一个包含量化文件的新目录,您可以将其与以下命令一起使用:
text-generation-launcher --model-id /data/falcon-40b-gptq/ --sharded true --num-shard 2 --quantize gptq
您可以通过运行 text-generation-server quantize --help
了解有关量化选项的更多信息。
如果您希望对 GPTQ 模型执行更多操作(例如,在其上训练适配器),您可以阅读有关 transformers GPTQ 集成的此处内容。您可以从论文中了解有关 GPTQ 的更多信息。
< > 在 GitHub 上更新