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

news2024/11/17 4:54:47

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外,还有其他技术。因为大模型社区比较火爆,后面肯定会有更优的微调训练与量化部署技术。后续我们会持续跟踪,如果在效果与性能上优于当前支持的方法,平台也将及时基于目前的框架继续集成这些新的方法。

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

在这里插入图片描述

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1692975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MSSQL】因为数据库正在使用,所以无法获得对数据库的独占访问权” 解决方案汇总

文章目录 前言一、事故现场方案一:设置数据库再单用户模式下工作:方案二:利用SQL语句,断开所有用户连接,并回滚所有事务,具体SQL语句如下:方案三:利用SQL语句,杀死正在使用该数据库的所有进程方案四:修改数据库的登录密码或重启数据库服务(不太建议)二、结尾日志备份…

MDS800-16-ASEMI整流模块800A 1600V

编辑:ll MDS800-16-ASEMI整流模块800A 1600V 型号:MDS800-16 品牌:ASEMI 封装:MDS 批号:2024 分类:整流模块 特性:整流模块、整流桥 平均正向整流电流(Id)&#…

C语言实现Hash Map(2):Map代码实现详解

在上一节C语言实现Hash Map(1):Map基础知识入门中,我们介绍了Map的基础概念和在C中的用法。但我写这两篇文章的目的是,能够在C语言中实现这样的一个数据结构,毕竟有时我们的项目中可能会用到Map,但是C语言库中并没有提…

香蕉成熟度检测YOLOV8NANO

香蕉成熟度检测YOLOV8NANO,采用YOLOV8NANO训练,得到PT模型,然后转换成ONNX模型,让OEPNCV调用,从而摆脱PYTORCH依赖,支持C。python,安卓开发。能检测六种香蕉类型freshripe freshunripe overripe…

下载CentOS系统或者下载Ubuntu系统去哪下?

因为Centos官网是挂在国外的服务器上,下载镜像时相比于国内的下载速度会慢很多,分享国内的镜像站去阿里巴巴下载Centos镜像。 首先分享两种下载方式,如果只想下载Centos那么就访问方式一的下载地址即可,如果还想下载其他的系统&a…

Xfce4桌面背景和桌面图标消失问题解决@FreeBSD

问题:Xfce4桌面背景和桌面图标消失 以前碰到过好几次桌面背景和桌面图标消失,整个桌面除了上面一条和下面中间的工具条,其它地方全是黑色的问题,但是这次重启之后也没有修复,整个桌面乌黑一片,啥都没有&am…

[书生·浦语大模型实战营]——第二节:轻松玩转书生·浦语大模型趣味 Demo

1. 部署InternLM2-Chat-1.8B 模型进行智能对话 1.1配置环境 创建开发机 Intern Studio 官网网址:https://studio.intern-ai.org.cn/ 进入官网后,选择创建开发机,填写 开发机名称 后,点击 选择镜像 使用 Cuda11.7-conda 镜像&am…

楼房vr安全逃生模拟体验让你在虚拟环境中亲身体验火灾的紧迫与危险

消防VR安全逃生体验系统是深圳VR公司华锐视点引入了前沿的VR虚拟现实、web3d开发和多媒体交互技术,为用户打造了一个逼真的火灾现场应急逃生模拟演练环境。 相比传统的消防逃生模拟演练,消防VR安全逃生体验系统包含知识讲解和模拟实训演练,体…

码蹄集部分题目(2024OJ赛16期;单调栈集训+差分集训)

&#x1f9c0;&#x1f9c0;&#x1f9c0;单调栈集训 &#x1f96a;单调栈 单调递增栈伪代码&#xff1a; stack<int> st; for(遍历数组) {while(栈不为空&&栈顶元素大于当前元素)//单调递减栈就是把后方判断条件变为小于等于即可{栈顶元素出栈;//同时进行其他…

C语言笔记22 •结构体•

C语言结构体 1.结构体类型的声明 struct Stu { char name[ 20 ]; // 名字 int age; // 年龄 char sex[ 5 ]; // 性别 char id[ 20 ]; // 学号 }; 2.结构体变量的创建和初始化 #include <stdio.h>// 定义一个结构体类型 Point struct Point {int x;int y; };i…

【三个数的最大乘积】python

三层循环必然超时&#xff0c;是的 hhh,换种思路&#xff0c;就很巧 class Solution:def maximumProduct(self, nums: List[int]) -> int:nums.sort()mxnums[-1]*nums[-2]*nums[-3]if nums[0]*nums[1]*nums[-1]>mx:mxnums[0]*nums[1]*nums[-1]return mx

装修:尽显个性品味

家&#xff0c;是心灵的港湾&#xff0c;也是生活的舞台。装修&#xff0c;不仅是对空间的改造&#xff0c;更是对生活态度的诠释。无论是温馨的北欧风&#xff0c;还是华丽的欧式古典&#xff0c;或是简约的现代感&#xff0c;我们的专业团队都能为您量身打造。每一个细节&…

分布式数据库HBase入门指南

目录 概述 HBase 的主要特点包括: HBase 的典型应用场景包括: 访问接口 1. Java API: 2. REST API: 3. Thrift API: 4. 其他访问接口: HBase 数据模型 概述 该模型具有以下特点&#xff1a; 1. 面向列: 2. 多维: 3. 稀疏: 数据存储: 数据访问: HBase 的数据模型…

01-02.Vue的常用指令(二)

01-02.Vue的常用指令&#xff08;二&#xff09; 前言v-model&#xff1a;双向数据绑定v-model举例&#xff1a;实现简易计算器Vue中通过属性绑定为元素设置class 类样式引入方式一&#xff1a;数组写法二&#xff1a;在数组中使用三元表达式写法三&#xff1a;在数组中使用 对…

YOLOv10尝鲜测试五分钟极简配置

最近清华大学团队又推出YOLOv10&#xff0c;真是好家伙了。 安装&#xff1a; pip install supervision githttps://github.com/THU-MIG/yolov10.git下载权重&#xff1a;https://github.com/THU-MIG/yolov10/releases/download/v1.0/yolov10n.pt 预测&#xff1a; from ult…

2024年最全的信息安全、数据安全、网络安全标准分享(可下载)

以上是资料简介和目录&#xff0c;如需下载&#xff0c;请前往星球获取&#xff1a;https://t.zsxq.com/Gz1a0

基于SpringBoot+Vue的人事管理系统

引言 目前,人事管理的系统大都是CS架构的大型系统,很少有面向机关,事业单位内部的基于BS架构的微型人事系统,因此.开发一个基于BS架构的人事信息管理系统是非常必要的.但是基于BS架构的人事系统对于安全是一个大的考验点.在人事信息系统中,功能需简单清晰,可操作性强,其次安全…

结构化开发方法(数据流图)

一、系统设计基本原理 二、系统总体结构设计 三、数据流图 数据流图

数据库(4)——DDL数据库操作

SQL标准没有提供修改数据库模式定义的语句&#xff0c;用户想修改次对象只能将它删除后重建。 查询 查询所有数据库&#xff1a; SHOW DATABASES; 在安装完MySQL数据库之后&#xff0c;自带了4个数据库&#xff0c;如下图&#xff1a; 创建数据库 数据库的创建语言为 CREATE…

web学习笔记(五十六)

目录 1.绑定类名和style 1.1 绑定类名 1.1.1 绑定单个类名 1.1.2 绑定多个类名 1.2 style相关知识 2. vue的响应式原理 3. v-once 4.本地搭建Vue单页应用 4.1 安装Vue脚手架 4.2 安装对应的包文件 4.3 运行项目 1.绑定类名和style 1.1 绑定类名 1.1.1 绑定单个类名…