网易首页 > 网易号 > 正文 申请入驻

使用 NVIDIA TensorRT-LLM 支持 int4 量化和推理优化实践

0
分享至

使其可部署在 24GB 显存的单张 NVIDIA A10 Tensor Core GPU

概述

CodeFuse(https://github.com/codefuse-ai)是由蚂蚁集团开发的代码语言大模型,旨在支持整个软件开发生命周期,涵盖设计、需求、编码、测试、部署、运维等关键阶段。

为了在下游任务上获得更好的精度,CodeFuse 提出了多任务微调框架(MFTCoder),能够解决数据不平衡和不同收敛速度的问题。

通过对比多个预训练基座模型的精度表现,我们发现利用 MFTCoder [1,2] 微调后的模型显著优于原始基座模型。其中,尤为值得关注的是采用了 MFTCoder 框架,并利用多任务数据集进行微调的 CodeFuse-CodeLlama-34B [3] 模型,在 HumanEval 评估数据集中取得了当时的最好结果。具体来说,基于 CodeLlama-34b-Python 模型进行微调的 CodeFuse-CodeLlama-34B 在 HumanEval-python 上实现了 74.4% 的 pass@1(贪婪解码)。以下是完整的代码能力评估结果 :

在代码补全、text2code、代码翻译、单测生成以及代码生成任务上,CodeFuse-CodeLlama-34B 全面超过 GPT-3.5;CodeFuse-CodeLlama-34B 能够在单测生成和代码补全(HumanEval )任务上超过 GPT-4。同时,上述微调模型、MFTCoder 训练框架和高质量代码数据集已经开源(github: https://github.com/codefuse-ai)。

然而,CodeFuse-CodeLlama-34B 的部署遇到了如下两个挑战:

1)数据类型为 fp16 的 34B 模型,显存占用为 68 GB,至少需要 3 张 A10 才能加载模型,部署成本很高;

2)在模型推理的生成阶段,通常伴随着长条形的矩阵运算,此时计算量较小,不足以掩盖 GPU 的访存延迟,即 memory bound 问题,此时程序的性能受限于 GPU 带宽。

为了解决上述问题,我们利用 GPTQ 量化技术,在降低了部署成本的同时,也缓解了 GPU 的带宽压力 ,从而显著提升了推理速度。最终,CodeFuse-CodeLlama-34B 的 int4 量化模型可以部署在单张 A10 显卡上,推理速度可以达到 20 tokens/s (batch_size=1)。同时,相较于 fp16 数据精度的模型,通过算法上的优化,int4 量化引入的精度下降可以控制在 1% 以内。下面,我们从模型量化和测试两个方面展示我们是如何实现 CodeFuse-CodeLlama-34B 模型的 int4 量化部署的。另外,TensorRT-LLM 也支持了 CodeFuse 中基于 MFTCoder 训练的开源模型部署。

CodeFuse-CodeLlama-34B int4 量化

这里我们使用 GPTQ [4] 技术对模型进行 int4 量化。GPTQ 是对逐层量化范式经典框架 OBQ(Optimal Brain Quantization)[5] 的高效实现,能够利用单张 A100-80G 在 4 小时内完成 OPT-175B 模型的量化,并且可以获得较好的准确率。

另外,我们这里采用了静态量化方式,即通过矫正数据离线地进行量化,得到诸如缩放因子和零点的量化参数,在推理时不再进行量化参数的更新。与之对应的是动态量化,会在模型推理的同时根据输入进行量化参数的调整。最后,我们这里进行的是 int4-weight-only 量化,即只对权重进行量化而不对层输入进行量化,即 W4A16 量化。

GPTQ 算法

为了量化权重

,OBQ 框架对层重建损失函数

进行二阶泰勒级数展开,同时假设在未量化的权重值处一阶梯度为零,从而得到如下优化问题:

其中,

是所有未量化权重对应的 Hessian 矩阵。那么,量化误差以及权重更新值分别为

上面的两个公式意味着所有未量化权重需要

通过

更新以补偿量化带来的量化误差。同时,层重建损失函数可以按照输出通道(output channel, OC)分解为独立的子问题,例如:

其中 Hessian 矩阵为

。为了充分利用 GPU 的能力,GPTQ 做了如下三个改进:

  1. 所有输出通道共享相同的量化顺序,从而使得行间共享同一份 Hessian 矩阵,大大减少了算法计算量。
  2. 使用一次 Cholesky 分解代替了在 GPTQ 每次迭代中对整个 Hessian 矩阵的逆矩阵的高斯消元迭代更新方式。既大大减少了计算量,又得以利用成熟 GPU 矩阵库中的 Cholesky 算法,且避免了迭代更新方式在矩阵运算中所带来的数值不稳定问题。
  3. 通过将整个计算过程由对单个输入通道进行更新,等效转变为划分 batch 并逐 batch 更新的方式,避免了每次量化对整个 Hessian 与权重矩阵的 GPU 读写操作,大大降低了 GPU 访存数量。

上述的改进使得 GPTQ 可以有效提升 GPU 利用率,从而能够对大模型进行高效量化。

int4-weight-only 量化

这里我们利用开源工具 AutoGPTQ(https://github.com/PanQiWei/AutoGPTQ)进行量化,工具超参数如下;

利用 AutoGPTQ 进行模型加载和推理的例子如下:

import osimport torchimport timefrom modelscope import AutoTokenizer, snapshot_downloadfrom auto_gptq import AutoGPTQForCausalLMos.environ["TOKENIZERS_PARALLELISM"] = "false"def load_model_tokenizer(model_path): """ Load model and tokenizer based on the given model name or local path of downloaded model. """ tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True, use_fast=False, lagecy=False) tokenizer.padding_side = "left" tokenizer.pad_token_id = tokenizer.convert_tokens_to_ids("") tokenizer.eos_token_id = tokenizer.convert_tokens_to_ids("") model = AutoGPTQForCausalLM.from_quantized(model_path, inject_fused_attention=False, inject_fused_mlp=False, use_cuda_fp16=True, disable_exllama=False, device_map='auto' # Support multi-gpus ) return model, tokenizerdef inference(model, tokenizer, prompt): """ Uset the given model and tokenizer to generate an answer for the speicifed prompt. """ st = time.time() inputs = prompt if prompt.endswith('\') else f'{prompt}\' input_ids = tokenizer.encode(inputs, return_tensors="pt", padding=True, add_special_tokens=False).to("cuda") with torch.no_grad(): generated_ids = model.generate( input_ids=input_ids, top_p=0.95, temperature=0.1, do_sample=True, max_new_tokens=512, eos_token_id=tokenizer.eos_token_id, pad_token_id=tokenizer.pad_token_id ) print(f'generated tokens num is {len(generated_ids[0][input_ids.size(1):])}') outputs = tokenizer.batch_decode(generated_ids, skip_special_tokens=True) print(f'generate text is {outputs[0][len(inputs): ]}') latency = time.time() - st print('latency is {} seconds'.format(latency)) if __name__ == "__main__": model_dir = snapshot_download('codefuse-ai/CodeFuse-CodeLlama-34B-4bits', revision='v1.0.0') prompt = 'Please write a QuickSort program in Python' model, tokenizer = load_model_tokenizer(model_dir) inference(model, tokenizer, prompt)

在做静态量化时,GPTQ 使用矫正数据集作为输入计算 Hessian 矩阵,从而更新未量化权重进而补偿量化带来的误差。如果推理阶段的输入和矫正数据集有偏差(bias),那么量化时用矫正数据得到的 Hessian 矩阵就无法完全反映推理输入,这会导致 GPTQ 的误差补偿失效(失效的程度和偏差成正比),出现量化模型在推理输入上量化误差变大的情况,进而导致量化模型的精度下降。

为了解决上述问题,对于微调模型,我们使用了一种数据分布对齐技术减少模型量化带来的损失。通过抽取训练数据(CodeFuse 开源的高质量代码数据集 evol)中的 Question 作为引导方式,利用原始模型生成 Answer,将 Question 和 Answer 拼接起来作为矫正数据;最终在 HumanEval Benchmarks 的 Python pass@1 取得了 73.8% 的准确率,相较于 bf16 模型仅有 0.6% 的精度损失。同时,在 CMNLI 和 C-Eval 两个数据集的精度损失也比较少。

构建 TensorRT 引擎

在通过 AutoGPTQ 可以得到 safetensors 格式的 int4 量化模型 [6] 后,我们的目标是构建单卡 TensorRT 引擎,同时保证 activation 是 fp16 的数据精度。通过 examples/llama/build.py 进行 TensorRT 引擎构建时,需要关注如下参数:

  • dtype:设置为 fp16
  • use_gpt_attention_plugin:设置为 fp16,构建引擎时利用 gpt a ttention plugin 并且数据精度为 fp16
  • use_gemm_plugin:设置为 fp16,构建引擎时利用 gemm_plugin 并且数据精度为 fp16
  • use_weight_only:触发 weight only 量化
  • weight_only_precision:设置为 int4 _gptq,表示构建 W4A16 的 GPTQ 量化模型引擎
  • per_group:gptq 为group-wise 量化,所以需要触发 per-group
  • max_batch_size: TensorRT 引擎最大允许 batch size
  • max_input_len:TensorRT 引擎最大允许输入长度
  • max_output_len:TensorRT 引擎最大允许输出长度

综上,我们在单卡 A10/A100 上构建 TensorRT 引擎的命令如下:

python build.py --model_dir "${model_dir}" \\ --quant_safetensors_path "${quant_safetensors_path}" \\ --dtype float16 \\ --use_gpt_attention_plugin float16 \\ --use_gemm_plugin float16 \\ --use_weight_only \\ --weight_only_precision int4_gptq \\ --max_batch_size 1 \\ --max_input_len 2048 \\ --max_output_len 1024 \\ --per_group \\ --output_dir "${engin_dir}" 2>&1 | tee dev_build.log

测试

性能

下面,我们主要测试了 batch size 为 1 时,不同的输入输出长度和量化精度情况下,TensorRT-LLM 在 A10/A100 上的推理速度表现。可以看到,在 A100 上,TensorRT-LLM 的 int4 相对 fp16,最高能够带来 2.4 倍的加速,相对 int8 最高也能带来 1.7 倍的加速。

注意:以上性能测试均基于 TensorRT-LLM 的 0.6.1 版本

显存占用和结果测试

我们测量了模型加载后占用的显存占用情况,以及输入 2048/1024 tokens 并输出 1024/2048 tokens 时的显存使用情况;同时我们也测试了量化前后的精度情况,如下表所示:

可见,4bit 量化后,显存占用大幅缩小,在一张 A10(24GB 显存)上就能部署 34B 的大模型,具备非常好的实用性。

模型演示

我们通过终端命令行 [7] 以及网页聊天机器人 [8] 两种不同的方式,展示我们最终的推理效果,具体细节可以访问开源的链接。

Cli Demo

Webui Demo

总结

在这篇文章中,我们介绍了如何使用 TensorRT-LLM 来加速 CodeFuse 的推理性能。具体而言,我们按照顺序展示了如何使用 GPTQ Int4 量化方法、增强 GPTQ 量化算法精度的自动对齐技术、TensorRT-LLM int4 量化模型的使用方法以及相应的评估过程。通过 TensorRT-LLM 的支持,CodeFuse 实现了较低的推理延迟和优化的部署成本。欢迎大家关注 CodeFuse 获取最新发布的更高准确率的微调大模型。

参考资料:

[1] Liu, B., Chen, C., Liao, C., Gong, Z., Wang, H., Lei, Z., Liang, M., Chen, D., Shen, M., Zhou, H., Yu, H., & Li, J. (2023). MFTCoder: Boosting Code LLMs with Multitask Fine-Tuning. ArXiv, abs/2311.02303.

[2] Zhang, Z., Chen, C., Liu, B., Liao, C., Gong, Z., Yu, H., Li, J., & Wang, R. (2023). Unifying the Perspectives of NLP and Software Engineering: A Survey on Language Models for Code.

[3] https://huggingface.co/codefuse-ai/CodeFuse-CodeLlama-34B

[4] Frantar, E., Ashkboos, S., Hoefler, T., & Alistarh, D. (2022). GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers. ArXiv, abs/2210.17323.

[5] Frantar, E., Singh, S. P., Alistarh, D. (2022). Optimal Brain Compression: A Framework for Accurate Post-Training Quantization and Pruning. Advances in Neural Information Processing Systems, 35, 4475-4488.

[6] https://huggingface.co/codefuse-ai/CodeFuse-CodeLlama-34B-4bits

[7] Codefuse-ai: https://github.com/codefuse-ai

[8] Codefuse-chatbot: https://github.com/codefuse-ai/codefuse-chatbot

关于作者:

王智

蚂蚁集团技术专家,博士毕业于北京邮电大学。主要研究方向为强化学习和贝叶斯优化。目前主要关注 LLM 推理加速技术。

胡文

清华大学计算机专业,拥有工学博士学位。目前在蚂蚁集团担任算法专家,带领团队在算法层、软件层、服务层三个维度优化大模型推理部署性能。

邵将

NVIDIA DevTech 团队,动力工程及工程热物理专业博士学位,毕业于北京航空航天大学。主要负责 AI、HPC 等领域的 GPU 并行计算程序性能优化。

刘川

NVIDIA 解决方案架构经理,整体负责中国区云计算行业 GPU 解决方案。于南京大学获计算机科学与技术专业硕士学位。带领团队主要从事大语言模型、生成式 AI 以及搜索推荐等重点 AI 任务的 GPU 适配、优化和加速方案的设计、部署和落地,帮助多家头部互联网公司在诸多业务中大幅降本增效。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
再打假!耿同学发视频称北航杰青副院长Nature论文漏洞百出,共同通讯作者单位已删除宣传稿

再打假!耿同学发视频称北航杰青副院长Nature论文漏洞百出,共同通讯作者单位已删除宣传稿

TOP大学来了
2026-06-17 18:00:35
2-4!世界杯亚军神奇不再,FIFA第4太强了,凯恩超梅西历史第1人

2-4!世界杯亚军神奇不再,FIFA第4太强了,凯恩超梅西历史第1人

侃球熊弟
2026-06-18 04:30:56
37岁的大龄剩女参加相亲,被大爷吐槽:三婚都不要你!

37岁的大龄剩女参加相亲,被大爷吐槽:三婚都不要你!

尘埃里的看客
2026-06-16 15:12:32
SHE合体为Ella陈嘉桦庆生,任家萱穿条纹裙出镜,胖到140斤还最美

SHE合体为Ella陈嘉桦庆生,任家萱穿条纹裙出镜,胖到140斤还最美

小疯子耶
2026-06-18 10:25:02
以色列发动多次袭击

以色列发动多次袭击

第一财经资讯
2026-06-17 14:15:14
零跑朱江明:智驾芯片实在是太过剩了 全年芯片仅一两千万片 市场多达14款

零跑朱江明:智驾芯片实在是太过剩了 全年芯片仅一两千万片 市场多达14款

快科技
2026-06-18 08:33:11
内马尔4个孩子3个妈,如今喜迎第五胎,现女友是千万粉丝级大网红

内马尔4个孩子3个妈,如今喜迎第五胎,现女友是千万粉丝级大网红

白面书誏
2026-06-17 23:22:42
瓦良格号给了中国多大震撼?我国专家:苏联的钢材与技术太先进

瓦良格号给了中国多大震撼?我国专家:苏联的钢材与技术太先进

抽象派大师
2026-06-17 04:57:17
民主刚果进球让国足更尴尬,世界杯史上0分0进球国家仅剩2个

民主刚果进球让国足更尴尬,世界杯史上0分0进球国家仅剩2个

米修体育
2026-06-18 04:02:49
现实版“低智商犯罪”:上海一男子凌晨5点用瓦斯罐炸ATM机,机内34万余元现金分文未得,还甩锅“无名朋友”,最终获刑6年

现实版“低智商犯罪”:上海一男子凌晨5点用瓦斯罐炸ATM机,机内34万余元现金分文未得,还甩锅“无名朋友”,最终获刑6年

极目新闻
2026-06-17 20:00:43
晚饭七分饱被推翻了?医生:过了65岁,吃饭尽量要做到这5点

晚饭七分饱被推翻了?医生:过了65岁,吃饭尽量要做到这5点

健康科普365
2026-06-14 18:10:08
为什么感觉身边的女生思维都非常浅薄?网友:太炸了!

为什么感觉身边的女生思维都非常浅薄?网友:太炸了!

夜深爱杂谈
2026-05-28 07:52:42
谁造成今天日本社会整体“右”转?看完才知,冰冻三尺非一日之寒

谁造成今天日本社会整体“右”转?看完才知,冰冻三尺非一日之寒

棠棣说史
2026-06-17 07:05:05
6月18日24时油价大跌超4毛/升,第三大下跌,92号汽油跌回7元时代

6月18日24时油价大跌超4毛/升,第三大下跌,92号汽油跌回7元时代

油价早知道
2026-06-18 09:13:44
伊朗议长:霍尔木兹海峡“永远不会回到以前的状态”

伊朗议长:霍尔木兹海峡“永远不会回到以前的状态”

界面新闻
2026-06-18 07:07:02
别不信!普通老百姓家庭,如果存款能到这个数,妥妥的天花板级别

别不信!普通老百姓家庭,如果存款能到这个数,妥妥的天花板级别

巢客HOME
2026-06-18 05:30:03
娶日本公主要付出惨痛代价?爱子公主若下嫁平民:丈夫将处处受限

娶日本公主要付出惨痛代价?爱子公主若下嫁平民:丈夫将处处受限

世界王室那些事
2026-06-17 19:05:52
寒武纪盘中涨超15%

寒武纪盘中涨超15%

每日经济新闻
2026-06-18 11:06:05
又美又飒!中国20岁游泳女神破亚洲纪录夺冠:大蜕变迫近奥运冠军

又美又飒!中国20岁游泳女神破亚洲纪录夺冠:大蜕变迫近奥运冠军

李喜林篮球绝杀
2026-06-18 11:28:53
图赫尔拿世界杯作死!放着皇马王牌不用,宁要边缘人凑数!

图赫尔拿世界杯作死!放着皇马王牌不用,宁要边缘人凑数!

澜归序
2026-06-18 01:03:12
2026-06-18 13:11:00
NVIDIA英伟达中国 incentive-icons
NVIDIA英伟达中国
英伟达(中国)官方账号
3576文章数 1459关注度
往期回顾 全部

科技要闻

库克承认扛不住了,苹果涨价“不可避免”

头条要闻

曹炯芳被点名:违规新增举债435亿 留下33个烂尾工程

头条要闻

曹炯芳被点名:违规新增举债435亿 留下33个烂尾工程

体育要闻

英格兰4比2克罗地亚:本届迄今,最佳比赛

娱乐要闻

60岁巩俐近况曝光!

财经要闻

沃什“首秀”:刻意的模糊?

汽车要闻

强化运动属性/1.6T版本动力升级 艾瑞泽8征服版限时售10.29万起

态度原创

本地
数码
房产
公开课
军事航空

本地新闻

世界杯黑马佛得角:河北人开超市,温州人当老板

数码要闻

1699元起:猫头鹰首款处理器AIO液冷散热器NL-LC1国行发售

房产要闻

最新房价:海口、三亚;新房、二手房全线下跌!

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

伊朗外交部:美伊已签署谅解备忘录

无障碍浏览 进入关怀版