2

News

地址:

电话:

j9九游会体育
当前位置: > j9九游会体育 >

使用NVIDIA TensorRT-LLM支持CodeFuse-CodeLlama-34B上的int4量

日期:2024-08-24     浏览: 次   编辑:admin

  CodeFuse是由蚂蚁集团开发的代码语言大模型,旨在支持整个软件开发生命周期,涵盖设计、需求j9九游会体育、编码、测试、部署、运维等关键阶段。

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

  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 数据精度的模型,通过算法上的优化j9九游会体育,int4 量化引入的精度下降可以控制在 1% 以内。下面,我们从模型量化和测试两个方面展示我们是如何实现 CodeFuse-CodeLlama-34B 模型的 int4 量化部署的。另外,TensorRT-LLM也支持了 CodeFuse 中基于 MFTCoder 训练的开源模型部署。

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

  为了量化权重,OBQ 框架对层重建损失函数进行二阶泰勒级数展开,同时假设在未量化的权重值处一阶梯度为零,从而得到如下优化问题:

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

  上面的两个公式意味着所有未量化权重需要通过更新以补偿量化带来的量化误差。同时,层重建损失函数可以按照输出通道(output channel, OC)分解为独立的子问题,例如:

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

  所有输出通道共享相同的量化顺序,从而使得行间共享同一份 Hessian 矩阵,大大减少了算法计算量。

  使用一次 Cholesky 分解代替了在 GPTQ 每次迭代中对整个 Hessian 矩阵的逆矩阵的高斯消元迭代更新方式。既大大减少了计算量,又得以利用成熟 GPU 矩阵库中的 Cholesky 算法,且避免了迭代更新方式在矩阵运算中所带来的数值不稳定问题。

  通过将整个计算过程由对单个输入通道进行更新,等效转变为划分 batch 并逐 batch 更新的方式,避免了每次量化对整个 Hessian 与权重矩阵的 GPU 读写操作,大大降低了 GPU 访存数量。

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

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

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

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

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

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

  在这篇文章中,我们介绍了如何使用TensorRT-LLM来加速 CodeFuse 的推理性能。具体而言,我们按照顺序展示了如何使用 GPTQ Int4 量化方法j9九游会体育、增强 GPTQ 量化算法精度的自动对齐技术、TensorRT-LLM int4 量化模型的使用方法以及相应的评估过程。通过 TensorRT-LLM 的支持,CodeFuse 实现了较低的推理延迟和优化的部署成本。

  文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

  “魔搭社区是中国最具影响力的模型开源社区,致力给开发者提供模型即服务的体验。魔搭社区利用

  性能,方便了模型应用部署,提高了大模型产业应用效率,更大规模地释放大模型的

  加速是当前人工智能领域的一个研究热点,旨在提高模型在处理复杂任务时的效率和响应速度。以下是对

  呢?Torch是我们大家聚在一起的原因,它是一个端到端的机器学习框架。而

  性能的工具 /

  OpenVINO™ 2023.2 发布:让生成式AI在实际场景中更易用

  背景介绍 大语言模型正以其惊人的新能力推动人工智能的发展,扩大其应用范围。然而,由于这类模型具有庞大的参数规模,部署和

  Qwen 模型 /

  微软 Ignite 2023 技术大会发布的新工具和资源包括 OpenAI Chat API 的

  封装接口、RTX 驱动的性能改进 DirectML for Llama 2

  运行新模型 /

  初探(一)运行llama /

  Hackathon 2023 决赛圆满收官,26 支 AI 团队崭露头角

  Hackathon 2023 决赛圆满收官,26 支 AI 团队崭露头角 /

  比如RWKV和给定的device信息一起编译为TVM中的runtime.Module(在linux

  方案 /

  的卷积神经网络 /

  【书籍评测活动NO.42】 嵌入式Hypervisor:架构、原理与应用

  串口发送中断中对发送I/O口定义为GPIO输出,出现发送数据不完整,缺少2个字节,求解答

  [2K系列] 【龙芯2K0300蜂鸟板试用】第六篇 龙芯2K0300蜂鸟板--用QT点灯高压脚踏气筒方园磨刀棒逆矩阵j9九游会体育表面形貌转子双曲面齿轮烧烤架车削金属切削