使用Intel Extension for Transformers加速Qwen2模型
Qwen2是阿里巴巴推出的新一代大语言模型系列,覆盖从0.5B到72B的参数规模,甚至包含混合专家模型。今天我们聚焦一个具体场景:如何借助Intel Extension for Transformers,在英特尔至强处理器上高效运行低比特量化的Qwen2模型。整个流程并不复杂——先用Intel Extension for Transformers自带的AutoRound算法把模型压缩到4位,然后无缝衔接推理。下面直接看实操。
先说量化结果。我们用AutoRound对Qwen2-1.5B和Qwen2-7B做了INT4权重量化,采用group size=128、对称量化。表1展示了BF16基准与INT4的准确率对比。

表1.
如果你不想自己跑量化流程,可以直接从Hugging Face下载我们已经量化好的INT4模型:
Qwen2–0.5B-instuct-int4-inc
Qwen2–1.5B-instuct-int4-inc
Qwen2–7B-int4-inc
下面给出两段关键代码,一段是量化,一段是推理,都用到了Intel Extension for Transformers的Neural Speed后端。
量化代码(基于AutoRound):
##pip install auto-round
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen2-1.5B"
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
from auto_round import AutoRound
bits, group_size, sym = 4, 128, True
device="cpu"
autoround = AutoRound(model, tokenizer, bits=bits, group_size=group_size, sym=sym, device=None)
autoround.quantize()
output_dir = "./qwen2_7b_autoround"
autoround.sa ve_quantized(output_dir)
推理代码(加载量化模型并生成):
from transformers import AutoTokenizer
from intel_extension_for_transformers.transformers import AutoModelForCausalLM, GPTQConfig
# Auto Round 量化模型
model_name = "./qwen2_7b_autoround"
prompt = "Once upon a time, a little girl"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
inputs = tokenizer(prompt, return_tensors="pt").input_ids
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)
outputs = model.generate(inputs)
再说长上下文表现。Qwen2的指令微调模型都是在32K上下文长度下训练的,并采用了YARN、Dual Chunk Attention等技术来支持更长的推理。实测表明,当输入长度达到32K时,下一个令牌的延迟依然能控制在50毫秒以内:

总之,Intel Extension for Transformers提供了丰富的优化手段:除了本文展示的INT4量化,还有流式LLM、张量并行、甚至低至1位的压缩技术。API风格贴近Transformers,迁移成本很低。更详细的技术细节和最新版本可以查阅官方文档和GitHub仓库。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名