由于卡只有24G,qwen14b 原生需要 30GB,按照官方团队的说法,他们用的量化方案是基于AutoGPTQ的,而且根据评测,量化之后的模型效果在几乎没有损失的情况下,显存降低到13GB,妥妥穷狗福音,说干就干。
下载模型
现在huggingface只能通过科学的方式访问,而且如果一个个手动下载hin麻烦,还好阿里的魔搭做的不错,上面也有很多开源的中文模型,所以更推荐使用魔搭进行下载,速度杠杠的,最高可以达到73.6MB/s,等个几分钟就下完了:
pip install modelscope
from modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download('qwen/Qwen-14B-Chat-Int4',
cache_dir='model',
revision='master')
安装依赖包
比起原生的14b模型,这里需要安装相应的量化包auto-gptq
和optimum
,这两包安装不麻烦,但要版本对,不然就会报很多奇奇怪怪的错误,笔者在安装过程中就碰到过如下报错:
ModuleNotFoundError: No module named 'optimum.gptq'
exllama_kernels not installed.
其实就是包的版本要套上,笔者最终实验成功的版本答案如下:
torch 2.0.1+cu117
auto-gptq 0.4.2
transformers 4.33.3
optimum 1.12.0
如果想要推理更快一点,也可以安装flash_attn,不过这个安装也有挺多坑的,要看cuda驱动,torch版本,用pip安装容易报错,推荐直接去安装预编译的whl包,地址在GitHub上:https://github.com/Dao-AILab/flash-attention/releases
不过装完之后,还是报了个找不到包的警告,说明我们还没有完全安装成功:
import flash_attn rotary fail
import flash_attn rms_norm fail
去git上把源码clone下来,然后去对应的文件下安装好,这个编译过程有点长,特别是安装layer_norm的时候,笔者卡了大概个把小时,看issue上说cuda118会快很多,笔者环境是cuda117,真的3Q了,可以先去喝杯咖啡:
cd rotary/
pip install .
cd layer_norm
pip install .
成功安装之后,大概可以将推理速度缩短到原来的1/3,所以有耐心的还是推荐去安装一下。
推理
from transformers import AutoModelForCausalLM, AutoTokenizer
model_dir = "model/qwen/Qwen-14B-Chat-Int4"
# Note: The default behavior now has injection attack prevention off.
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_dir,
device_map="auto",
trust_remote_code=True
).eval()
response, history = model.chat(tokenizer, "你是谁", history=None)
print(response)
以上,就搞定Qwen-14B-Chat-Int4的推理部署了。
flash_attn 未生效前:
flash_attn 生效后: