首页 > 其他分享 >大模型入门(五)—— 基于peft微调ChatGLM模型

大模型入门(五)—— 基于peft微调ChatGLM模型

时间:2023-04-25 22:11:23浏览次数:45  
标签:ChatGLM 片段 模型 微调 chatglm peft 句子

  ChatGLM 是基于 General Language Model (GLM) 架构,针对中文问答和对话进行了优化。经过中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术,ChatGLM因为是中文大模型,在中文任务的表现要优于LLaMa,我在一些实体抽取的任务中微调ChatGLM-6B,都取得了很不错的效果。

GLM: General Language Model Pretraining with Autoregressive Blank Infilling

  在微调ChatGLM之前,先简单地了解下它的基础模型GLM,GLM也是基于transformer架构的,在训练任务上构造了自回归的空格填充任务,具体的训练流程如下图所示:

  a) 随机抽取句子中的一些片段。

  b) 将原句子和抽取的片段分离,并将原句子中被抽离的片段的位置用mask标记符替换。

  c) 将抽取的片段随机打乱拼接在原句子后面,句子和片段,片段和片段之间用起始符连接,使用自回归的训练方式去预测抽取的片段。

  d) 训练时原句子使用双向attention,如transformer encoder,图d中的蓝色部分,片段使用单向attention,如transformer decoder。

  从上面来看训练过程和之前的模型大同小异,不知道较现在大模型通用的decoder-only有没有什么优势。

ChatGLM微调

1、源代码准备

  ChatGLM目前的代码没有集成到transformers库中,作者将基于transformers实现的代码和模型文件放到了一起,模型文件和代码见https://huggingface.co/THUDM/chatglm-6b/tree/main,可以通过transformers中的Autoxxx类加载。也可以把代码直接拿出来调用,需要用到的代码有modeling_chatglm.py, tokenization_chatglm.py, configuration_chatglm.py。

2、数据和模型准备

使用的大模型:https://huggingface.co/THUDM/chatglm-6b

微调数据集:https://github.com/LC1332/Chinese-alpaca-lora/blob/main/data/trans_chinese_alpaca_data.json

微调的代码已上传到github:https://github.com/jiangxinyang227/LLM-tuning/tree/master/chatglm_tuning

3、训练方式

  训练方式参考大模型入门(四)—— 基于peft 微调 LLaMa模型

  值得注意的是,在使用deepspeed训练时,在加载chatglm模型时需要注意,chatglm模型加载默认是使用pytorch中的skip_init初始化,会将参数先加载到meta device上,这种情况就无法使用deepspeed。需要修改的代码是在加载模型时将empty_init设置为False即可。

model = ChatGLMForConditionalGeneration.from_pretrained(
            Config.base_model,
            empty_init=False,
            torch_dtype=torch.float16
        )

 

  

 

标签:ChatGLM,片段,模型,微调,chatglm,peft,句子
From: https://www.cnblogs.com/jiangxinyang/p/17353431.html

相关文章

  • 03-1 燃烧系统分析方法与着火理论:热自燃基本模型、影响热自燃的因素
    热自燃条件第一步:作出假设以封闭容器内可燃物质的着火过程为例,来分析热自燃问题。作出以下假设:只有热反应,不存在链式反应;容器的体积V和表面积F为定值;容器内的参数(如温度浓度等)处处相同;容器与环境之间仅存在对流换热,α为定值;可燃物质的反应热Q为定值;在整个着火过程中,可燃......
  • 【动手学深度学习】第四章笔记:多层感知机、权重衰减、暂退法、数值稳定性和模型初始化
    为了更好的阅读体验,请点击这里4.1多层感知机4.1.1隐藏层由于仿射变换中的线性是一个很强的假设,因此导致了线性模型可能会不适用。线性意味着单调假设:任何特征的增大都会导致模型输出的增大或者模型输出的减小。但是违反单调性的例子比比皆是。除此之外,分类任务中,仅依托像素......
  • 开源大模型(large language model, LLM)介绍
    作为如今LLM圈内绝对的领头羊,OpenAI并没有遵从其创立初衷,无论是ChatGPT早期所使用的的GPT3、GPT3.5还是此后推出的GPT4模型,OpenAI都因“暂无法保证其不被滥用”为由拒绝了对模型开源,开启了订阅付费模式。对于大型科技企业而言,不管是出于秀肌肉还是出于商业竞争目的,自研LLM都是一......
  • LLM(大语言模型)解码时是怎么生成文本的?
    Part1配置及参数transformers==4.28.1源码地址:transformers/configuration_utils.pyatv4.28.1·huggingface/transformers(github.com)文档地址:Generation(huggingface.co)对于生成任务而言:text-decoder,text-to-text,speech-to-text,andvision-to-textmodels,有以......
  • 大模型入门(四)—— 单张A100微调LLAMA-7B
    单张V100的GPU内存只有16G,LLAMA-7B模型大小就有约27G,在单张16G的V100上微调LLAMA-7B呢?这里需要用到几个技巧:1)lora微调;2)混合精度训练;3)梯度累积。目前github上已经有不少用lora微调llama的代码,但基本都是完全基于huggingface的库去实现的,本文训练阶段基于pytorch实现。1、模型......
  • BloombergGPT: 用于金融学的大型语言模型
    BloombergGPT是布隆伯格2023年3月30日公开在arXiv的一篇文章——BloombergGPT:ALargeLanguageModelforFinance中涉及到的语言模型,也是金融领域第一个公开发表文章的大语言模型(以下简称“LLM”)。在此我们就论文中涉及到各个章节的内容做一下介绍。文章较长,可选择关注章节查......
  • 中亿丰数字模型开发说明文档
    中亿丰数字模型控制器说明文档==>>入口文件ManewPage.vue(截图在文档末尾)发布的时候麻烦替换下资源路径模型控制器文件夹Viewers(截图在文档末尾)模型控制器index.ts文件部分截图如下部分方法有注释,没有注释的部分需要自行查找three.js文档即可创建一个场景(Creatingas......
  • matlab中通过ode函数求解常微分方程附加简单的钟摆模型
    求解常微分方程常用matlab中的ode函数,该函数采用数值方法用于求解难以获得精确解的初值问题。ODE是一个包含一个独立变量(例如时间)的方程以及关于该自变量的一个或多个导数。在时域中,ODE是初始值问题,因此所有条件在初始时间t=0指定。Matlab有几个不同的函数(内置)用于ODEs的解决方案。......
  • 【BI软件】零编程构建财务分析模型(行计算模型)
    上一讲和大家讲到,自定义SQL是用个性化的开发去满足个性化的需求,而分析模型则是用共性的开发去满足个性化的需求。而分析模型的好处显而易见,通过分析模型来开发报表,更灵活、更高效,而且开发及运维的成本非常低。同时,通过举例也让大家看到,构建分析模型并不复杂。今天我们再来讲一下分......
  • Java的多线程编程模型5--Java中的CAS理论
    CAS,compareandswap的缩写,中文翻译成比较并交换。我们都知道,在java语言之前,并发就已经广泛存在并在服务器领域得到了大量的应用。所以硬件厂商老早就在芯片中加入了大量直至并发操作的原语,从而在硬件层面提升效率。在intel的CPU中,使用cmpxchg指令。在Java发展初期,java语言是不能......