Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从0到1!得物如何打造通用大模型训练和推理平台

从0到1!得物如何打造通用大模型训练和推理平台

原创
作者头像
得物技术
发布于 2023-07-31 09:22:39
发布于 2023-07-31 09:22:39
1.4K0
举报
文章被收录于专栏:得物技术得物技术

1.背景

近期,GPT大模型的发布给自然语言处理(NLP)领域带来了令人震撼的体验。随着这一事件的发生,一系列开源大模型也迅速崛起。依据一些评估机构的评估,这些开源模型大模型的表现也相当不错。一些大模型的评测情况可以去这里查询:Huggingface的Open LLM排行榜,UC伯克利发布大语言模型排行榜等。

随着大模型的发展,大模型的训练与部署技术变的非常重要了。我们调研了LORA与QLORA等微调训练技术,以及GPTQ量化部署技术。在跑通最小Demo并验证效果后,把这些技术集成到KubeAI平台(得物AI平台),提供给大家去快速上手。

本篇主要分为技术理论与技术实战两个部分去讲解。

技术理论主要讲解微调训练与量化推理的理论部分,微调训练包括LoRA,QLoRA, 部署包括GPTQ量化推理等,并针对关键代码进行走读,针对部署进行性能测试

技术实战部分我们把这些技术集成到KubeAI平台上,供大家可以快速上手实战。依据前面同学的反馈情况,大约一天内可以完成大模型训练并部署推理上线。

2.LoRA与QLoRA训练技术

2.1 LoRA技术介绍

LoRA,英文全称 Low-Rank Adaptation of Large Language Models(中文为大语言模型的低阶适应)。

这是微软的研究人员为了解决大语言模型微调而开发的一项技术,

其 github 地址为 https://github.com/microsoft/LoRA ,

当前已经得到HuggingFace 的 PEFT库 https://github.com/huggingface/peft 的支持。

对于大语音模型来说,其参数量非常多。GPT3有1750亿参数,而且LLAMA系列模型包括 7B,13B,33B,65B,而其中最小的7B都有70亿参数。要让这些模型去适应特定的业务场景,需要对他们进行微调。如果直接对这些模型进行微调,由于参数量巨大,需要的GPU成本就会非常高。LoRA就是用来解决对这些大语言模型进行低成本微调的技术。

LoRA的做法是对这些预训练好的大模型参数进行冻结,也就是在微调训练的时候,这些模型的参数设置为不可训练。然后往模型中加入额外的网络层,并只训练这些新增的网络层参数。这样可训练的参数就会变的非常少,可以以低成本的GPU微调大语言模型。

参照 https://arxiv.org/abs/2106.09685

LoRA在Transformer架构的每一层注入可训练的秩分解矩阵,与使用Adam微调的GPT-3 175B相比,LoRA可以将可训练参数数量减少10000倍,GPU内存需求减少3倍,并且在效果上相比于传统微调技术表现的相当或更好。

下面以Transformer的线性层为例,讲解下LoRA具体是如何操作的。

在Transformer模型中的线性层,通常进行矩阵乘法操作,如Y = XW,其中X是输入矩阵,W是权重矩阵,也是模型训练求解的参数。

对于LoRA方法在Transformer的线性层中的操作步骤:

  • 在每个线性层旁边增加一个"旁路",由降维矩阵A和升维矩阵B构成。低秩分解在这里发挥作用,例如我们有一个100x100的矩阵C,我们可以通过低秩分解将其分解为A和B(假设秩设置为1),其中A是100x1的矩阵,B是1x100的矩阵。这样,原本10000个参数的矩阵C被分解为总共200个参数的矩阵A和B。
  • 训练过程中,原线性层的权重矩阵W保持不变,只训练降维矩阵A和升维矩阵B。
  • 在推理时,将矩阵B和A的乘积加到原始线性层的权重矩阵W上。因为A和B的秩较低,这个操作不会增加额外的推理延迟。
  • 对于一般的任务,秩选取1,2,4,8,16足矣。

2.2 LoRA关键代码走读

上面讲解了LoRA的关键,接下来我们针对最新的版本PEFT中的LoRA实现,进行关键代码走读。LoRA的核心代码逻辑在:https://github.com/huggingface/peft/blob/main/src/peft/tuners/lora.py

其中有两个核心的类,一个是LoraConfig,另一个是LoraModel。

LoraConfig是LoRA的核心配置类,它是用于配置LoRAModel的类,其中包含了一些用于控制模型行为的参数。

这个类的主要参数有:

  • r:LoRa(低秩逼近)注意力维度,就是前面所说的秩。默认值是8。
  • target_modules:要应用LoRa的模块名列表。
  • lora_alpha:LoRa的alpha参数。默认值是8。
  • lora_dropout:LoRa层的dropout概率。默认值是0.0。
  • bias:LoRa的偏置类型。可以是'none'、'all'或'lora_only'。

LoraModel是LoRA模块的核心类,冻结base model的参数,旁路低秩矩阵的创建,替换,合并等逻辑都在这个类中。下面我们把他的关键逻辑结合上面的介绍走读一下。

2.2.1 初始化函数

从初始化函数中我们看到LoraModel也是继承torch.nn.Module,相当于pytorch的一个网络模块。传入参数中base_model相当于被用来微调的基础大模型,config包含LoraConfig。在初始化中LoraModel把自己的前向传播函数forword设置为大模型的forward方法。

2.2.2 初始化:使用新的LoraLayer替换target_modules中配置的Layer,实现上面所说的添加旁路低秩矩阵的功能。

上述代码的主要功能:

  • 依据LoraConfig中配置的tagetModules,在base_model(大模型)中找到这些Module
  • 创建新的LoraLayer,新的LorayLayer中会包含原来target_module的layer,并在其旁边并行旁路,旁路主要是低秩矩阵Lora_A与Lora_B组成的低秩两个低秩矩阵的加法
  • 使用新创建的LoraLayer替换原来的target_module的layer。

通过这一步实现了在大模型的target_modules的layer中增加旁路低秩矩阵。

2.2.3 初始化:冻结大模型的参数

可见除了新增的LoraLayer的模块外,其他所有参数都被冻结。

2.2.4 前向传播:添加了旁路低秩矩阵后的运算逻辑(以LineLayer为例)

在上述代码中:

  • 使用大模型target_module中线性层进行计算,得出结果result。
  •   使用lora_A与lora_B的低秩矩阵进行计算   并把计算结果加到result上。

以上是主要逻辑,其他逻辑可以深入代码去了解。PEFT库中Lora的实现与论文中所述一致。

2.3 QLORA技术介绍

LoRA技术虽然可以在一定程度上节省显存,提升训练速度,但是把大模型以float16的方式运行,还是会占用很多显存。比如:在batch size开到极小的情况下,单卡A100(80G显存)只能微调7B系列的模型,13B模型在正常情况下需要120G显存,微调65B模型需要超过780G的显存。

为此华盛顿大学的研究者提出了QLoRA技术,极端情况下单个24GB GPU上实现33B的微调,可以在单个48Gi显存微调65B模型。当然这种情况下微调会变得比较慢

论文参考 https://arxiv.org/abs/2305.14314。

上图中描述了LoRA与QLoRA在微调训练的时候的区别,从QLoRA的名字可以看出,QLoRA实际上是Quantize+LoRA技术,简单的说就是把大模型(Base Model)在训练的时候从16bit压缩到4bit。从而降低训练的显存。

  • 4位NormalFloat,QLoRA使用NF4(Normal Float 4)bit来量化压缩预训练模型。这是一种优化的4位量化方法,它针对神经网络权重通常遵循零中心正态分布的特性进行优化。使用标准正态分布函数将权重缩放到[-1, 1]的范围内。相比传统的4位量化,它的权重信息损失少,从而提高了模型量化的整体精度。
  • 双重量化,双重量化是一种内存优化策略,它对量化所使用的常数进行二次量化,进一步减小内存占用。这意味着我们可以在保持精度的同时,降低了内存需求。
  • Page Optimizer,这是一种内存管理技术,利用了NVIDIA的统一内存特性,在CPU和GPU之间进行自动page对page传输,它在GPU内存不足时,可以将一部分数据暂时移到CPU内存,需要时再移回。这降低了在大型模型训练时由于内存不足而造成的问题。

在我们的平台经过实测,训练33B的模型最低需要26G显存。但是需要把batch-szie设置为1,这样训练速度会比较慢。在实际操作中可以再适当加大batch size的值,配合4bit量化,就可以在少量GPU资源情况下训练33B大模型了,当然13B的大模型使用QLORA同样效果不错。

目前最新版本的PEFT库也添加了对QLoRA的支持,喜欢代码的同学可以去深入了解下。

3.量化推理介绍

3.1 GPTQ量化介绍

GPTQ(Generative Pretrained Transformer Quantization)是一种新的后训练量化方法,可以有效地执行对有数百亿参数的模型的量化,并且能够将这些模型压缩到每个参数3或4位,而不会有显著的精度损失,论文参考https://arxiv.org/abs/2210.17323。

所谓后训练量化是指在模型训练完成之后进行量化,模型的权重会从32位浮点数(或其他较高精度格式)转换为较低精度格式,例如4位整数。这种转换大大减小了模型的大小,并减少了运行模型所需的计算量。但是,这也可能会导致一定程度的精度损失。

3.2 GPTQ量化数据对比

目前业界有几种量化方法,包括GGML,GPTQ等,经过实测,我们发现GPTQ量化部署精度损失少,性能也不错。

我们通过对13B的模型进行4bit量化测试,发现经过GPTQ量化后的对比如下:

4.实战:kubeai平台大模型训练与推理

前面我们介绍了大模型的训练技术:LoRA与QLoRA的工作原理,介绍了通过GPTQ量化部署的步骤。我们把这些步骤集成在KubeAI的训练推理平台中,供大家研究,并同时提供7B,13B,33B大模型备选。KubeAI中选择GPT服务/定制版(Finetune)即可体验。

4.1 kubeAI平台的训练与推理工作流程

  • 大模型选型支持,kubeAI平台提供(7B,13B,33B)三种类型,后续逐渐增加更多支持。
  • 大模型微调训练,现在支持LoRA,QLoRA两种方式,后续会增加其他方式。
  • 训练后,会产生两个大模型,一个是16Bit的原始模型,一个是GPTQ4bit量化后的模型(配合QLoRA)。
  • 我们提供一键部署的功能,用户选择对应的模型后,可以一键部署成服务,并提供页面与API接口供用户体验效果。

4.2 用户在kubeAI进行训练与推理部署大模型的步骤

  • 选择大模型,目前提供(7B,13B,33B)三个版本。
  • 上传训练数据,目前支持alpaca数据格式。
  • 配置训练参数,只需要依据GPU情况配置batch size与训练步骤,大部分使用默认参数即可。
  • 点击开始训练。
  • 训练结束后选择模型,点击部署,即可一键部署成服务。
  • 部署服务后,点击访问链接,会有一个访问页面,页面上会提供相应的API调用接口。

4.3 kubeAI平台基于知识库的推理功能

  • 推理大模型实现,可离线部署,可以针对专业场景做训练优化。
  • 文本向量模型,可离线部署,还可以针对局部场景做训练优化。
  • 可快速实现接入多种数据源,支持pdf、txt、md、docx、csv等文件类型接入。
  • 在分句、文档读取等方面,针对中文使用场景优化。

5.总结

我们调研了大模型的微调训练方法LoRA与QLoRA,以及大模型的推理部署GPTQ量化部署。把上面的微调训练到推理部署的整个链路集成到kubeAI平台上,提供给大家快速实验。此外还集成了以文档形式上传到知识库,配合知识库进行推理的场景。

大模型的训练与推理方法除了以上所提LORA、QLORA、GPTQ外,还有其他技术。因为大模型社区比较火爆,后面肯定会有更优的微调训练与量化部署技术。后续我们会持续跟踪,如果在效果与性能上优于当前支持的方法,平台也将及时基于目前的框架继续集成这些新的方法。

*文/linggong

本文属得物技术原创,更多精彩文章请看:得物技术官网

未经得物技术许可严禁转载,否则依法追究法律责任!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
大模型微调新手全流程友好指南
关于大模型微调的文章已经写过有两篇:大模型微调与RAG检索增强有何区别?从基础原理到案例分析全面详解和一文带你了解大模型微调的前世今生,基础概率和理论原理内容基本上都涵盖全面,因此本篇文件不做过多的原理解释说明,主要聚焦于大模型微调的实战和各个代码功能模块细节的讲解。
fanstuck
2025/04/30
2496
大模型微调新手全流程友好指南
【机器学习】QLoRA:基于PEFT亲手量化微调Qwen2大模型
之前陆续写了Qwen1.5、Qwen2.0、GLM-4等国产开源大模型的原理、训练及推理相关的文章,每一篇都拿到了热榜第一,但其中训练部分均基于Llama-factory框架,对于工程师而言,最喜欢的就是刨根问底,使用中间层的训练框架,还是少一些“安全感”。今天我们抛开中间框架,深入底层,一步一步带大家微调一个大模型。
LDG_AGI
2024/08/13
1.6K0
【机器学习】QLoRA:基于PEFT亲手量化微调Qwen2大模型
【LLM训练系列01】Qlora如何加载、训练、合并大模型
参考脚本:https://github.com/QwenLM/Qwen/blob/main/recipes/finetune/deepspeed/finetune_qlora_multi_gpu.ipynb
致Great
2024/11/23
2940
【LLM训练系列01】Qlora如何加载、训练、合并大模型
华为提出QA-LoRA:让微调大型语言模型‘轻装上阵’
近些年,大型语言模型(LLMs)表现出了强大的语言理解能力。但是,想要将这些模型应用到不同的场景,并部署到边缘设备(例如手机)上,我们还面临一个重要的问题:这些模型通常参数众多,计算负担重,如何在不损失性能的情况下让它们变得“轻量”并适应不同需求呢?
zenRRan
2023/10/09
1.3K0
华为提出QA-LoRA:让微调大型语言模型‘轻装上阵’
深度探索 DeepSeek 微调:LoRA 与全参数微调实战指南
DeepSeek 作为强大的大模型,提供了优质的基础能力,但在某些特定任务上,直接使用预训练模型可能无法满足需求。本篇文章将介绍 LoRA(Low-Rank Adaptation)、全参数微调 等微调策略,并提供详细的代码示例,帮助开发者高效定制 DeepSeek 以适应特定任务。
Swift社区
2025/02/07
6K0
深度探索 DeepSeek 微调:LoRA 与全参数微调实战指南
深度探索 DeepSeek 微调:LoRA 与全参数微调实战指南
DeepSeek 作为强大的大模型,提供了优质的基础能力,但在某些特定任务上,直接使用预训练模型可能无法满足需求。本篇文章将介绍 LoRA(Low-Rank Adaptation)、全参数微调 等微调策略,并提供详细的代码示例,帮助开发者高效定制 DeepSeek 以适应特定任务。
网罗开发
2025/02/18
7810
深度探索 DeepSeek 微调:LoRA 与全参数微调实战指南
机器学习|从0开始大模型之模型LoRA训练
继续《从0开发大模型》系列文章,上一篇用全量数据做微调,训练时间太长,参数比较大,但是有一种高效的微调方式LoRA。
用户1904552
2025/02/27
3240
机器学习|从0开始大模型之模型LoRA训练
谷歌Gemma介绍、微调、量化和推理
谷歌的最新的Gemma模型是第一个使用与Gemini模型相同的研究和技术构建的开源LLM。这个系列的模型目前有两种尺寸,2B和7B,并且提供了聊天的基本版和指令版。
deephub
2024/03/01
2.1K0
谷歌Gemma介绍、微调、量化和推理
单GPU实现99%ChatGPT性能,「原驼」火了:手机也能微调大模型
机器之心报道 编辑:小舟、泽南 「原驼」大模型输出的内容和 ChatGPT 比,人类也无法区分谁好谁坏。 用微调的方法,现在羊驼模型也可以打 ChatGPT 了,这不是随便说说,有测试结果为证。 最近,来自华盛顿大学的 QLoRA 成为了 AI 领域的热门,很多人把它形容为里程碑级、改变规则的技术。 新方法训练出的模型在评测基准上可以做到 ChatGPT 99% 的能力,而且 33B 的版本只需要在单块 24GB GPU 上进行微调,65B 的版本只需要 46GB 的 GPU。 现在用一块 RTX 409
机器之心
2023/05/31
6330
单GPU实现99%ChatGPT性能,「原驼」火了:手机也能微调大模型
了解大语言模型的参数高效微调(Parameter-Effcient Fine-Tuning)
大语言模型在众多应用领域实现了突破性的进步,显著提升了各种任务的完成度。然而,其庞大的规模也带来了高昂的计算成本。这些模型往往包含数十亿甚至上千亿参数,需要巨大的计算资源来运行。特别是,当需要为特定的下游任务定制模型时,尤其是在计算能力有限的硬件平台上,这一挑战尤为突出。
叶庭云
2024/05/25
1.2K0
了解大语言模型的参数高效微调(Parameter-Effcient Fine-Tuning)
用Kaggle免费GPU微调ChatGLM2
前方干货预警:这篇文章可能是你目前能够找到的可以无痛跑通LLM微调并基本理解整个流程的门槛最低的入门范例。
lyhue1991
2023/09/05
1.2K0
用Kaggle免费GPU微调ChatGLM2
QLoRa:在消费级GPU上微调大型语言模型
大多数大型语言模型(LLM)都无法在消费者硬件上进行微调。例如,650亿个参数模型需要超过780 Gb的GPU内存。这相当于10个A100 80gb的gpu。就算我们使用云服务器,花费的开销也不是所有人都能够承担的。
deephub
2023/08/30
1K0
QLoRa:在消费级GPU上微调大型语言模型
在消费级GPU调试LLM的三种方法:梯度检查点,LoRA和量化
LLM的问题就是权重参数太大,无法在我们本地消费级GPU上进行调试,所以我们将介绍3种在训练过程中减少内存消耗,节省大量时间的方法:梯度检查点,LoRA和量化。
deephub
2023/08/30
1.2K0
在消费级GPU调试LLM的三种方法:梯度检查点,LoRA和量化
【AI大模型】Transformers大模型库(八):大模型微调之LoraConfig
这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服务。
LDG_AGI
2024/08/13
3740
【机器学习】Google开源大模型Gemma2:原理、微调训练及推理部署实战
Gemma 是 Google 推出的轻量级、先进的开放模型系列,采用与 Gemini 模型相同的研究成果和技术构建而成。它们是仅使用解码器的文本到文本大型语言模型(提供英语版本),为预训练变体和指令调整变体具有开放权重。Gemma 模型非常适合各种文本生成任务,包括问题解答、摘要和推理。由于它们相对较小,因此可以将其部署在资源有限的环境(如笔记本电脑、桌面设备或您自己的云基础架构)中,让更多人能够使用先进的 AI 模型,并帮助促进每个人的创新。
LDG_AGI
2024/08/13
7460
【机器学习】Google开源大模型Gemma2:原理、微调训练及推理部署实战
使用QLoRA对Llama 2进行微调的详细笔记
使用QLoRA对Llama 2进行微调是我们常用的一个方法,但是在微调时会遇到各种各样的问题,所以在本文中,将尝试以详细注释的方式给出一些常见问题的答案。这些问题是特定于代码的,大多数注释都是针对所涉及的开源库以及所使用的方法和类的问题。
deephub
2023/09/22
6.2K0
使用QLoRA对Llama 2进行微调的详细笔记
微调 Zephyr 7B 量化模型,应用于客户聊天机器人的自定义任务
Huggingface 与 bitsandbytes 合作,将 AutoGPTQ[1] 库集成到了 Transformers 中。这一整合使用户能够以低至 8、4、3 或甚至 2 位的精度级别量化和操作模型,采用了 Frantar 等人在 2023 年[2] 引入的 GPTQ 算法。值得注意的是,使用 4 位量化几乎不会损失精度,同时在处理小批量数据时仍能保持与 fp16 基准相似的推理速度。值得一提的是,GPTQ 方法与 bitsandbytes 提出的训练后量化技术略有不同,因为它需要使用校准数据集。
山行AI
2023/12/28
6970
微调 Zephyr 7B 量化模型,应用于客户聊天机器人的自定义任务
解密Prompt系列6. lora指令微调扣细节-请冷静,1个小时真不够~
上一章介绍了如何基于APE+SELF自动化构建指令微调样本。这一章咱就把微调跑起来,主要介绍以Lora为首的低参数微调原理,环境配置,微调代码,以及大模型训练中显存和耗时优化的相关技术细节
风雨中的小七
2023/04/29
10.4K1
解密Prompt系列6. lora指令微调扣细节-请冷静,1个小时真不够~
AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用
贫富差距的产生是信息差,技术贫富差距的产生亦如此。如果可以自我发现或者在别人的指导下发现优秀的开源项目,学习或工作效率真的可以事半功倍。
LDG_AGI
2024/08/13
2.4K0
AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用
零门槛复现ChatGPT:预训练模型数据集直接用,包含完整RLHF流程,在线可体验
明敏 发自 凹非寺 量子位 | 公众号 QbitAI 这边ChatGPT、GPT-4等AI大模型和应用打得火热; 另一边“平替”开源复现方案也加紧更新迭代。 这不,“首个开源ChatGPT低成本复现流程”就来了波大更新! 现在,仅需不到百亿参数,利用RLHF简单微调,模型即可掌握中、英双语能力,达到与ChatGPT和GPT-3.5相当的效果。 中文对话效果如下: 这就是ColossalChat。 由Colossal-AI推出。一个月前,Colossal-AI乘着ChatGPT热潮火速开源了低成本复现流程。
量子位
2023/04/06
9740
零门槛复现ChatGPT:预训练模型数据集直接用,包含完整RLHF流程,在线可体验
推荐阅读
相关推荐
大模型微调新手全流程友好指南
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档