文本生成推理文档

量化

Hugging Face's logo
加入Hugging Face社区

并获得增强型文档体验

开始

量化

TGI 提供多种量化方案,以便根据您的用例有效且快速地运行大型语言模型。TGI 支持 GPTQ、AWQ、bits-and-bytes、EETQ、Marlin、EXL2 和 fp8 量化。

要利用 GPTQ、AWQ、Marlin 和 EXL2 量化,您必须提供预先量化的权重。而对于 bits-and-bytes、EETQ 和 fp8,权重由 TGI 即时量化。

我们建议使用官方量化脚本创建您的量化。

  1. AWQ
  2. GPTQ/Marlin
  3. EXL2

对于即时量化,您只需传递其中一种受支持的量化类型,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:2.3.1 --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:2.3.1 --model-id $model --quantize bitsandbytes-nf4

您可以阅读这篇博文以获取有关 8 位量化的更多信息,并阅读这篇博文以获取有关 4 位量化的更多信息。

类似地,您可以传递 --quantize eetq--quantize fp8 以分别使用相应的量化方案。

此外,TGI 允许通过传递模型权重和校准数据集直接创建 GPTQ 量化。

使用GPTQ进行量化

GPTQ 是一种训练后量化方法,用于缩小模型尺寸。它通过找到权重的压缩版本来量化层,该版本将产生最小的均方误差,如下所示 👇

给定一个层ll使用权重矩阵WlW_{l}和层输入XlX_{l},找到量化的权重hatWl\\hat{W}_{l}: (W^l=argminWl^WlXW^lX22)({\hat{W}_{l}}^{*} = argmin_{\hat{W_{l}}} ||W_{l}X-\hat{W}_{l}X||^{2}_{2})

TGI 允许您同时运行已经使用 GPTQ 量化的模型(请参阅此处提供的可用模型 here)或使用量化脚本量化您选择的模型。您可以通过简单地传递 —quantize 来运行量化模型,如下所示 👇

docker run --gpus all --shm-size 1g -p 8080:80 -v $volume:/data ghcr.io/huggingface/text-generation-inference:2.3.1 --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 集成的更多信息 here。您可以在 paper 中了解更多关于 GPTQ 的信息。

< > GitHub 上的更新