Transformers 文档

最优量子

最佳量子

尝试使用这个notebook来体验optimum-quanto + transformers!

🤗 optimum-quanto 库是一个多功能的pytorch量化工具包。使用的量化方法是线性量化。Quanto提供了几个独特的功能,例如:

  • 权重量化 (float8,int8,int4,int2)
  • 激活量化 (float8,int8)
  • 模态无关(例如 CV, LLM)
  • 设备无关(例如 CUDA, XPU, MPS, CPU)
  • torch.compile的兼容性
  • 易于为特定设备添加自定义内核
  • 支持量化感知训练

在开始之前,请确保已安装以下库:

pip install optimum-quanto accelerate transformers

现在你可以通过在from_pretrained()方法中传递QuantoConfig对象来量化模型。这适用于任何模态的任何模型,只要它包含torch.nn.Linear层。

与transformers的集成仅支持权重量化。对于更复杂的用例,如激活量化、校准和量化感知训练,您应该使用optimum-quanto库。

默认情况下,权重以全精度(torch.float32)加载,无论权重实际存储的数据类型是什么,例如torch.float16。设置torch_dtype="auto"以加载模型config.json文件中定义的数据类型,以自动加载内存最优的数据类型。

from transformers import AutoModelForCausalLM, AutoTokenizer, QuantoConfig

model_id = "facebook/opt-125m"
tokenizer = AutoTokenizer.from_pretrained(model_id)
quantization_config = QuantoConfig(weights="int8")
quantized_model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="auto", device_map="cuda:0", quantization_config=quantization_config)

请注意,目前还不支持使用transformers进行序列化,但很快就会推出!如果你想保存模型,可以使用quanto库代替。

Optimum-quanto 库使用线性量化算法进行量化。尽管这是一种基本的量化技术,但我们得到了非常好的结果!请看以下基准测试(llama-2-7b 在困惑度指标上的表现)。你可以找到更多基准测试 这里

llama-2-7b-quanto-perplexity

该库功能多样,足以兼容大多数PTQ优化算法。未来的计划是以尽可能无缝的方式集成最流行的算法(AWQ、Smoothquant)。

< > Update on GitHub