链载Ai

标题: 大模型量化实操--基于Qwen3-1.7B做int4量化 [打印本页]

作者: 链载Ai    时间: 1 小时前
标题: 大模型量化实操--基于Qwen3-1.7B做int4量化

大模型量化,就是将模型权重和激活从高精度(如 FP32, FP16)转换为低精度(如 INT8, INT4, FP8)。量化后的模型会显著减少尺寸大小、内存占用和带宽需求,提高计算速度(尤其是利用 INT8 Tensor Core)。

常见的量化方法有:GPTQ和AWQ,其中GPTQ量化速度快,推理性能好,支持Hugging Face生态,但需要校准数据集,对某些任务精度损失略大。AWQ精度通常比GPTQ更高,但量化过程稍慢,需要更多显存。

今天这篇文章,我将使用AWQ方法量化Qwen3-1.7B模型。

1)硬件要求:

2)下载Qwen3-1.7B大模型

在modelscope社区下载大模型,首先安装魔搭(modelscope)模块

pipinstallmodelscope下载模型
mkdir-p/models/modelscopedownload--modelQwen/Qwen3-1.7B--local_dir/models/Qwen3-1.7B4)AWQ量化软件环境(Ubuntu2204、AutoDL)
创建虚拟环境,若系统默认python版本为3.12,则无需创造虚拟环境condacreate-nqwen_quantpython=3.12condaactivateqwen_quant安装PyTorchpipinstalltorchtorchvisiontorchaudio--index-urlhttps://download.pytorch.org/whl/cu128说明:注意cuda的版本,这个cu128指的是12.8安装基础依赖pipinstalltransformers==4.51.3acceleratedatasetsAWQ量化pipinstallautoawqautoawq-kernels

5)AWQ量化

下载数据集: https://github.com/Tencent/AngelSlim/blob/main/dataset/sharegpt_gpt4_qwen/sharegpt_gpt4-qwen3_a22B_output.jsonl

编辑量化脚本:

fromawqimportAutoAWQForCausalLMfromtransformersimportAutoTokenizermodel_path="/models/Qwen3-1.7B"quant_path="/models/Qwen3-1.7B-AWQ"quant_config={"zero_point":True,"q_group_size":128,"w_bit":4,"version":"GEMM"}#Loadmodelmodel=AutoAWQForCausalLM.from_pretrained(model_path)tokenizer=AutoTokenizer.from_pretrained(model_path,trust_remote_code=True,device_map="auto",safetensors=True)#Thepatternofdata"""msg=[{"role":"system","content":"YouareQwen,createdbyAlibabaCloud.Youareahelpfulassistant."},{"role":"user","content":"Tellmewhoyouare."},{"role":"assistant","content":"IamalargelanguagemodelnamedQwen..."}]data=[]formsgindataset:print(msg)text=tokenizer.apply_chat_template(msg,tokenize=False,add_generation_prompt=False)data.append(text.strip())returndata"""#!!!!!!!!!Customizethecodehereforcalib_dataprocessing!!!!!!!!!!!!!!defdata_gen():importjsondata=[]withopen("sharegpt_gpt4-qwen3_a22B_output.jsonl","r",encoding="utf-8")asfile:forlineinfile:msg=json.loads(line)["messages"]text=tokenizer.apply_chat_template(msg,tokenize=False,add_generation_prompt=False)data.append(text.strip())returndata#!!!!!!!!!Customizethecodehereforcalib_dataprocessing!!!!!!!!!!!!!!#Quantizemodel.quantize(tokenizer,quant_config=quant_config,calib_data=data_gen(),n_parallel_calib_samples=1,max_calib_samples=256,max_calib_seq_len=1024,)#Savequantizedmodelmodel.save_quantized(quant_path)tokenizer.save_pretrained(quant_path)print(f'Modelisquantizedandsavedat"{quant_path}"')6)测试AWQ量化后的模型

脚本如下:

importtorchfromtransformersimportAutoModelForCausalLM,AutoTokenizer#加载量化后的模型(以AWQ为例)model_path="/models/Qwen3-1.7B-AWQ"tokenizer=AutoTokenizer.from_pretrained(model_path,trust_remote_code=True)model=AutoModelForCausalLM.from_pretrained(model_path,device_map="auto",trust_remote_code=True).eval()#测试推理prompt="你好,请介绍一下你自己。"inputs=tokenizer(prompt,return_tensors="pt").to(model.device)#生成回答withtorch.no_grad()utputs=model.generate(inputs.input_ids,max_new_tokens=200,do_sample=True,temperature=0.7,top_p=0.9,)response=tokenizer.decode(outputs[0],skip_special_tokens=True)print(response)最后介绍下我的大模型课:我的运维大模型课上线了,目前还是预售期,有很大优惠。AI越来越成熟了,大模型技术需求量也越来越多了,至少我觉得这个方向要比传统的后端开发、前端开发、测试、运维等方向的机会更大,而且一点都不卷!






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5