华为盘古大模型微调实践

1. 什么是大模型

2. 指令微调介绍

3. 盘古大模型指令微调实践

4. Q&A

分享嘉宾|吴章淋 华为技术有限公司 nlp算法研究工程师

编辑整理|Tony Wang

内容校对|李瑶

出品社区|DataFun

01

什么是大模型

首先来介绍一下什么是大模型,主要从四个方面来衡量。

首先是参数规模。大模型通常是指参数量在亿级到万亿级,以及更大参数规模的模型,比如 GPT-3 的参数量就达到了 1750 亿,华为盘古 Sigma 大模型最大一个型号的参数量已经达到了 1 万亿的规模。

第二,从模型架构来看,Transformer 架构是参数量在100 亿以上的大模型的基本框架,其中 decoder only 的 transformer 架构是目前大模型的一个主流技术路线,其结构主要是下图左边框出来的两部分,即除了输入输出以外,其中间每一层都是由一个掩码多头注意力层加上一个前馈网络层组成的。

第三,从任务解决能力方面看,大语言模型是从统计语言模型发展到神经语言模型,再到预训练的语言模型,然后到现在的大语言模型。其任务解决能力已经从特定任务的助手,演变成通用任务的求解器。

最后,从研究领域看,随着大模型从一个专才成长为一个通才,它的研究领域也不再是按照以前的任务来划分,而是可以按照训练流程来重新划分预训练、指令微调和基于人类反馈的强化学习。本次分享主要聚焦于指令微调领域。

02

02

指令微调也被称为有监督的微调,即 SFT。大模型的指令微调,即用有监督的指令数据对大模型做微调,让大模型来学习特定的知识,以释放潜在的能力。大模型从指令中学习要做什么事,也就是当前要做的任务,然后从数据中去学习,根据不同的输入生成相应的输出反馈。在下图例子中,大模型通过指令微调,可以从这个指令中理解到是要做一个情感分类的任务,然后根据不同的输入文本输出相应的情感标签。

为什么要做大模型的指令微调呢?因为大模型在预训练阶段的训练任务是去学习预测下一个 token,这种形式的训练无法让大模型做对话式的问答。引入大模型指令微调的一个作用就是让大模型去学会理解和遵循人类的指令,并具备一定的泛化能力。在下面的这个例子中,我们用摘要、情感分析、问答这三种指令的数据对大模型做指令微调,大模型不仅可以覆盖到这三种类型的任务,还可以泛化到其他领域去做其他一些 NLP 相关的任务,比如自然语言的推理,这就是泛化的能力。

03

03

下面正式介绍盘古大模型上的指令微调实践。

1. 算力基础和训练策略

在算力基础方面,主要依托于 MindSpore 框架加上昇腾 910 芯片集群对盘古大模型做指令微调。其中,MindSpore 框架是华为自研的一款 AI 全场景框架,其与 PyTorch 等框架对标。昇腾 910 芯片是华为自研的一款高性能芯片,其性能介于 V100 和 A100 GPU 之间。MindSpore 主要提供神经网络的推理与训练的基础功能,并支持 CPU、GPU 和 NPU 等芯片计算。

下图是昇腾 910 与 V100、A100 的算力对比,其中昇腾 910 的单精度浮点算力是 256TFlops,是 V100 的两倍,但略低于 A100 的算力,即 312TFlops。TFlops 是指每秒 1 万亿次的浮点计算。

在训练策略方面,如果是对盘古大模型进行全参数微调或增量预训练,通常采用混合并行的训练策略,因为这个时候模型和数据都比较大。如果是对盘古大模型进行高效的参数微调,则会根据数据的大小和模型大小选择相应的并行策略。当数据量比较大时,会选择数据并行,如果是模型比较大时,可以考虑流水线并行或者张量并行。在这几种训练策略中,混合并行是指用这三种策略做组合,比如以 GPT-3.5 的训练策略为例,它是先进行流水线并行,再数据并行和张量并行。

这里简单说明下这三种并行策略的基本概念。流水线并行是指把模型的网络参数按层划分到不同的计算设备上,各个计算设备以接力的方式去完成训练。数据并行是指把数据分发到不同的设备上,且每个设备上的模型参数是完整的,需要在各个设备上进行梯度计算再做一个聚合才能完成训练。张量并行是指每个设备上的数据是完整的,需要把模型的参数矩阵拆分到不同的计算设备上,然后对各个设备的输出结果进行合并才能获取到真正逻辑意义上的一个输出。

2. 中英翻译全参数微调项目

接下来分享两个在盘古大模型上做指令微调实践的具体项目。指令微调方法按照参数规模可以分为全参数微调和高效参数微调两种方法,首先分享的是一个全参数微调的项目。

盘古大模型在 L0 层有五种大模型。这里选择的是盘古自然语言大模型,具体来讲,是以盘古-Sigma 大模型作为基座,并使用中英双语数据来构建翻译指令,对基座大模型做全参数微调,以提升盘古大模型的中英翻译能力。并且在华为翻译和同城会议等业务场景做了落地。该项目主要在数据格式、数据质量、数据大小和模型大小这四个方面进行了实践。

在数据格式方面,通常一个指令微调的数据格式如下图左侧所示,上面是指令,下面是输入和输出,中间有时会在指令中增加几个示例。我们在构建中英翻译示例时,将指令构建成一个翻译的指令,把原文作为输入、译文作为输出,并会随机选择一些双语作为可选的翻译示例。

在数据部分,我们探索了在指令中增加一个或者多个翻译示例带来的影响。我们采用不同的翻译指令对盘古大模型做全参数微调,下图中展示了对模型在中英医疗翻译测试集上翻译质量进行的评测,主要采用自动评测指标 BLEU、人工评测指标 COMET-DA 来进行分析。从实验结果可以看到,在翻译中增加一个示例能够带来明显的提升,增加多个示例就没有再进一步的提升了。因此结论为,在指令中增加一个示例时有助于提升盘古大模型的翻译能力,即提升微调效果。

在数据质量方面,对于大模型而言,不管是预训练还是指令微调,数据质量过滤是数据处理环节中必不可少的一个环节。我们在去重和基于一定规则的数据质量过滤的基础上,探索了基于相似度对数据进行筛选。

具体的实验为:选择了一个 20 万的中英双语数据集,基于语义相似度对该数据进行打分排序,并选择不同的 top-K 数据分别对盘古大模型做全参数微调,之后评测微调后的模型在中英医疗翻译测试机上自动测评指标 BLEU 的变化。从实验结果中可以看到,只需要使用 25% 的全量数据就能达到最优的性能,也就是仅使用高质量的数据更有助于提升微调后的盘古大模型的翻译能力。

在数据大小和模型大小方面,之前已经有论文提出了幂律,也就是当计算量固定的时候,数据大小应该随模型大小一起增长,模型的训练才能达到更好的效果。从实验结果来看,先看横坐标,随着数据量的增长,模型训练的 loss 是更低的,也就说明了它的训练效果是更好的。再从纵坐标来看,模型的参数量在增长,模型的损失也在下降,这也说明了训练效果是更好的。最后综合来看,数据量越大,模型越大,训练效果越好。

针对不同数据我们也展开了一系列实践,选择不同的数据大小(500 万、2000万、1 亿及全量的中英双语数据),对盘古大模型做全参数微调。从实验结果可以看到,更多的高质量的训练数据,更有助于盘古大模型提升翻译能力。

在模型大小方面,我们采用相同的全量数据,对两个不同参数规模的盘古大模型(38B 和 2.6B)做了全参数微调,并与线上的华为翻译做了对比。从对比结果上看,更大参数量的模型的翻译质量更优,最终超越了华为翻译的线上模型。但从训练成本的角度来看,更大的参数量意味着训练成本更高。例如对 38B 的一个盘古–Sigma 模型全参数微调,26B token 的数据,需要在 128 张 D910 上训练 11 天,而如果是相同数据量在对 2.6B 的盘古 –alpha 大模型做全参数微调,则只需要在 8 张 A100 上训练 9 天。

该项目的工作可以总结为以下四个方面:

首先,在数据格式上探索了在指令中加入示例的影响,发现加入一个翻译示例对指令微调的效果是更好的。

第二,在数据质量方面,采用不同的数据质量进行微调,发现仅使用高质量的数据指令微调的效果是更好的。

第三,在数据大小方面,使用不同的数据对盘古大模型做了微调,发现使用更多的高质量数据指令微调的效果更好。

第四,在模型大小方面,通过实验证明了更大的模型指令微调的效果更好,但训练成本也会更大一些。在实际业务中需要权衡训练成本和最终预期的效果。

第二个分享的项目是泰语大模型的一个高效参数微调项目,它同样是以盘古–Sigma 大模型作为基座模型,不同的是它以泰语为切入点,主要进行高效参数微调,聚焦于扩展盘古-Sigma 大模型的多语言能力。

在这个项目上我们主要针对三个难点问题展开实践:

第一个难点问题是词表问题,因为基座模型是只在中英上训练的,采用的是中英混合词表,泰语字符是不在这个词表里面的,所以没有直接训练,如何对它进行训练是需要考虑的问题;

第二个难点问题是方法选型的问题,现在有很多高效参数微调的方法,需要选择一种比较合适的方法;

第三个问题是数据的问题,泰语的指令数据相对较少,且质量参差,如何对其进行筛选与扩充也是值得探索的。

针对第一个问题,即词表问题,我们参考了 Chinese LLaMA,它的训练策略就是选择扩充词表来增加模型的参数,然后进行增量预训练。具体的过程分为三步,第一步是训练泰语分词器,统计泰语的词表,与基座大模型的词表进行融合;第二步是扩充基座大模型的输入输出层,及其关联模块的参数矩阵,具体来说就是复制已有的参数矩阵,去随机初始化新增的一些参数;最后,收集泰语的数据与中英数据做混合,用于对基座大模型做增量预训练。

下面是对泰语分词进行优化的效果展示。对一个 139 个字符的泰语句子,在对泰语分词优化前,因为 SPM 分词器是不支持泰语分词的,所以分的很乱。我们重新训练了一个泰语分词器后,把 139 个字符的一个泰语句子切成了 21 个 token 的一个序列,这样更加合理。最终,将词表扩充了 1 万左右。

在介绍方法选型之前,先来介绍一下什么是高效微调的方法。其基本思想就是引入一些额外的参数,保持大模型原有的参数不变,通过微调新增的参数来适配下游任务。有几种典型的高效参数微调方法,第一种是 Adapter 微调,即在掩码多头注意力和前馈网络层后加一个轻量级的 adapter 组件。第二种方法是 prefix 微调,在中间每一层增加一段与任务相关联的 tokens。第三种,prompt 微调,是只在输入的 embedding 层增加一些提示的 token。第四种,LoRA 微调,是在模型的中间层,基于大模型的内在低秩特性,去增加一个小的旁路矩阵来模拟全参数微调。

下面是几种典型的高效参数微调方法在摘要任务和机器翻译任务上的对比评测结果。从实验结果可以看出,Adapter 方法和 LoRA 方法的效果相对较好,可以做到只微调少量参数即可接近全参数微调的性能。在这两种方法中,因为 Adapter 方法增加的组件是与模型串联的,会增加模型的深度,因此会引入额外的推理时延。而 LoRA 增加的是一个并联的旁路矩阵,不会增加额外的推理时延,所以我们最终采用了 LoRA 方法去做高效参数微调。

针对数据问题,一方面要筛选高质量的指令数据,我们引入了一种自引导的数据选择方法,主要分为三步,第一步是随机挑选一些指令数据去微调大模型,然后再去用这个微调后的大模型来计算指令数据的学习难度,最后选择那些学习难度排在前面的指令数据去重新微调大模型。在这个论文中,只需要用到 10% 的数据就能达到最优的性能,我们在实践过程中也是参考了这样的做法。

另一方面,还需要扩充数据的大小,所以我们采用了指令反译的方法,类似于机器翻译里面的 TAGBT 方法,即加标签的反向翻译方法,同样也是分为三步,第一步是先训练指令生成模型,然后基于无标签的数据生成伪指令数据,第二步用真实数据微调大模型来对这个伪指令数据打分,挑选出更高质量的伪指令数据,最后再以加标签的方式来混合使用高质量的伪指令数据和真实数据去重新微调大模型。在实践过程中,我们发现这种方法可以增加指令数据的多样性,会生成一些新的动词和名词。

在评测中,针对第一阶段,为了评价 LoRA 方法微调的效果,我们先构建了一个基线。这个基线是采用微调前的一个盘古大模型来做的。因为微调前的这个盘古大模型是不支持泰语的,所以我们引入了一种翻译桥接的方法来近似模拟它在泰语上的标签。

具体的做法是先用华为翻译把泰语测试集的输入翻译成英文,然后喂给盘古大模型,让它去输出相应的结果。拿到结果后把它转换成泰语,这样就可以测出一个基线的性能,再与 LoRA 微调后的效果进行对比。我们从泰语的一些公开测试集,包括 NLG 和 NLU 任务中选取了几个常用的问答、摘要、常识推理、阅读理解等任务来做性能评测。最后发现我们的 LoRA 微调方法会比基线效果更好。训练成本方面,LoRA 增量预训练的成本会更高一些,因为其训练数据更大,比如 11B 的 token 和 38B 的模型做增量预训练时需要在 32 张 D910 上训练 8 天,而如果是 1B 的 token 做 LoRA 微调时只需要在 4 张 A100 上训练 5 天。

对该项目进行一个小结,我们针对三个难点问题展开了一些实践:

针对词表问题,通过词表扩充和增量预训练来适配新语言。

在方法选型上,选择 LoRA 微调方法,因为其效果相对较好,且不会引入额外的推理时延。

在数据问题上,一方面选择采用自引导的数据选择方法来筛选高质量的数据,另一方面通过指令反译来扩充数据大小。

最后,总结一下盘古大模型指令微调实践中获得的经验:

首先,数据是知识的载体,数据的质和量都至关重要,一方面我们要做好严格的质量把关,另一方面要尽可能获取更多的高质量数据。

第二点是在模型方面,模型越大,潜力越大,但是训练成本也越高,在业务落地时要做好权衡。

第三点是在算力方面,大模型的算力需求高,如何利用好有限的算力很关键,比如在选择微调方法的时候,如果算力充足,而且追求在当前任务上更好的性能,那么可以选择全参数微调的策略;如果算力有限,也可以选择高效微调策略,微调少量参数即可达到不错的性能。在选择训练策略时,要考虑数据大小和模型大小,如果只是数据量比较大,那么可以采用数据并行的策略;如果模型比较大,可以采用张量并行或者流水线并行的策略;如果两者都比较大,则应采用混合并行的训练策略。

以上就是本次分享的内容,谢谢大家。

Q:第一个项目涉及到的机器翻译,机器翻译作为一个非常传统的 NLP 项目,GPT-3.5 对于此类项目已经非常出色。文中第一个项目其实是做了一个专用领域的 SFT,是否与 GPT-3.5 进行过对比?两者的翻译效果有多大的差距,或者这种专用的 SFT 能否解决一些通用无法解决的 case?

A:我们确实是对 ChatGPT 包括 GPT-4 做过一个在中英翻译任务上的对比评测,主要采用自动测评的 BLEU 指标,我们也有一些专业的译员对大模型的翻译结果做过人工评测。从对比结果来看,在 BLEU 指标方面其实大家的差距很小,但是大模型主要强在它的人工感受这块,也就是大模型的翻译结果是更好的,因为它更地道一些、更自然一些。我们最终的盘古大模型的微调效果在人工评测上还是会比ChatGPT 和 GPT-4 略差一些。

以上就是本次分享的内容,谢谢大家。

分享嘉宾

INTRODUCTION

南京邮电大学硕士研究生毕业,目前就职于华为,从事 nlp 算法研究工作,研究方向主要包括大模型、机器翻译、语音翻译和知识图谱等领域,相关研究成果发表于 ACL,EMNLP 和 IJCKG 等会议,发表论文共计 10 余篇,也参加过近两年的 WMT、CCMT、IWSLT、NLPCC、CCKS 比赛,并拿下了多个赛道的第一。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「漏洞复现」通天星CMSV6车载定位监控平台 point_manage/merge SQL注入致RCE漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

二叉树 | Java | LeetCode 235 701 450 做题总结,BST特性、 调整二叉树结构(增+删)

235. 二叉搜索树的最近公共祖先 思路:要利用二叉搜索数的性质。当前遍历节点 cur 的数值大于p q时,说明 p q 的父节点在 cur 的左子树。当前遍历节点 cur 的数值小于p q时,说明 p q 的父节点在 cur 的右子树。当前遍历节点 cur 的数值在 p q…

记录一个前端axios传参格式的问题

今天改造一个其他系统的页面,直接把原来系统的接口拿过来复用,发现怎么传参都报400,地址参数都一样,怎么就报错了呢,报错原因大概是后台无法解析出参数(后台属于其他平台,无法测试)。…

python 中关于无法导入自己写的类

python 中关于无法导入自己写的类。解决方法 - Jc_code - 博客园 (cnblogs.com)https://www.cnblogs.com/jc-home/p/12098065.html 加个.就挺好

无中心化崛起:Web3对传统互联网的冲击与重构

随着Web3技术的兴起,传统互联网面临着前所未有的挑战和重构。本文将深入探讨Web3的无中心化特性如何对传统互联网产生冲击,以及其可能带来的重大影响和未来发展趋势。 1. 传统互联网的局限与问题 传统互联网,通常称为Web2,主要依…

利用maven命令往本地仓库添加jar包

一:遇到问题 有些jar包在中央仓库没有,需要手动往本地仓库添加,方便以后打包使用。 比如:添加红框这个依赖,现在爆红 二:解决办法 **第一步:**打开idea,找到运行按钮旁边的框&am…

Guitar Pro如何只播放低声部 Guitar Pro乐队总谱怎么看

在音乐制作与学习过程中,熟练掌握音乐编曲和练习工具至关重要。Guitar Pro作为一款深受吉他爱好者喜爱的专业软件,其强大的功能之一便是能够独立播放乐谱中的各个声部,这对于细致研究和练习低音线条如贝斯线极为有用。下面我们来看看Guitar P…

Flutter 像素编辑器#05 | 缩放与平移

theme: cyanosis 本系列,将通过 Flutter 实现一个全平台的像素编辑器应用。源码见开源项目 【pix_editor】。在前三篇中,我们已经完成了一个简易的图像编辑器,并且简单引入了图层的概念,支持切换图层显示不同的像素画面。 《Flutt…

AVI 是什么格式,AVI 格式用什么播放器打开?

AVI 是什么格式?提到 AVI 格式想必大家多数会想到在 DVD 横行的年代,光盘中所包含的媒体视频格式多是以 AVI 格式存储。AVI 是一个非常通用的容器格式,支持多种视频和音频编解码器。这意味着从DVD中提取视频内容时,可以通过转码为…

第二证券炒股技巧:什么是pe估值法,有哪些优缺点?

1、pe估值法是指即市盈率估值法,是一种上市公司常用的股票估值办法。它通过比较公司的股价与其盈余能力来评估股票的价值,从而判别股票是高估还是轻视。假定公司的盈余能力不再改动,以当时的股价/市值买入这家公司,单纯靠赢利需求…

计算机网络 —— 网络字节序

网络字节序 1、网络字节序 (Network Byte Order)和本机转换 1、大端、小端字节序 “大端” 和” 小端” 表示多字节值的哪一端存储在该值的起始地址处;小端存储在起始地址处,即是小端字节序;大端存储在起始地址处,即是大端字节…

【嵌入式Linux】i.MX6ULL IRQ中断服务函数的编写

文章目录 IRQ中断服务函数流程解释0. 基本流程步骤1. 入口部分2. 读取中断号3. 切换模式并调用C语言处理函数4. 清理和恢复环境5. 完整代码 本文章结合了正点原子的 i.mx6u嵌入式Linux开发指南和笔者的理解。 IRQ中断服务函数流程解释 IRQ Interrupt Request 外部中断 0. 基本…

深度解析:开关电源(DC/DC)与线性电源(LDO)的技术特性与应用差异

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/139955493 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

VS Code 使用 Makefile 运行 CPP项目

Installing the MinGW-w64 toolchainCMake Toolsmakelist.txt报错 1报错 2报错 3生成了 Makefile ,如何使用 make 命令 Installing the MinGW-w64 toolchain 参见文档 将 GCC 与 MinGW 结合使用 CMake Tools 参见文档 Linux 上的 CMake 工具入门 CMake 的使用 …

Excel 宏录制与VBA编程 —— 14、使用VBA处理Excel事件

简介 若希望特定事件处理程序在触发特定事件时运行,可以为 Application 对象编写事件处理程序。 Application 对象的事件处理程序是全局的,这意味着只要 Microsoft Excel 处于打开状态,事件处理程序将在发生相应的事件时运行,而不…

AI降痕工具:论文AI率的智能解决方案

告诉大家一个非常残忍的答案,以后所有论文都会被查ai率的。 学术界不仅关注传统的抄袭问题,还增加了一项名为“AIGC检测”的指标。例如知网、维普等平台都能检测论文AI率。 用GPT写论文虽然重复率基本不用担心,但是AI率基本都较高&#xff…

vue3组件通讯-介绍

简介 Vue 3 引入了多种强大的功能和改进,其中包括增强的组件通信机制。了解这些机制对于构建复杂、可维护的应用程序至关重要。下面,我们将介绍在 Vue 3 中组件通信的几种方法。 通讯类型 父子组件通信上下级通信(不仅父子级)兄…

通用大模型VS垂直大模型——最后还是要双赢

大模型的江湖争霸:通用与垂直,谁会先“拿下一城”? 哎呀,在人工智能这片神奇的沃土上,大模型(咱们说的可是那些超级聪明的“大脑”哦)正上演着一场别开生面的“武林大会”。一方是全能型选手—…

Java字符串处理深度解析:String、StringBuffer与StringBuilder的奥秘

摘要: 本文将深入探讨Java语言中处理字符串的基础构件:String、StringBuffer和StringBuilder。我们将详细讲解它们的内部原理、适用场景、性能对比以及在现代开发实践中的使用策略。同时,结合当下编程行业的热点技术,如微服务架构…

80、443端口不能开放也能为IP地址申请SSL证书!

IP地址证书作为一种特定的证书,不同于传统的域名验证证书,IP地址证书是通过验证IP地址来确保安全连接。在证书申请过程中,往往要求短暂开放80或者443端口,如果不能开放,IP地址证书则不能签发。 JoySSL提供的IP地址证书…