基于昇腾910B训练万亿参数的语言模型简介

 6a72080032cdc7fc6f07ca90a55dd1f4.jpeg

 

基于昇腾910B训练万亿参数的语言模型

   

f9c08d41c5a92ca138ee4ee25b139f10.jpeg

Abstract

在本工作中,作者开发了一个系统,该系统在Ascend 910 AI处理器集群和MindSpore框架上训练了一个万亿参数的语言模型,并提出了一个含有1.085T参数的语言模型,名为PanGu-。

从PanGu-[1]继承了参数,作者将密集的Transformer模型扩展为稀疏模型,采用_Random Routed Experts_(RRE)方法,并通过使用_Expert Computation and Storage Separation_(ECSS)高效地在329B个 Token 上训练模型。这导致了通过异构计算使训练吞吐量提高了6.3倍。

作者的实验发现表明,PanGu-在多种中文NLP下游任务的零样本学习中提供了最先进的表现。此外,在开放领域对话、问答、机器翻译和代码生成应用数据上的微调也展示了其强大的能力。

1 Introduction

大型语言模型(LLM)[2, 3, 1, 4, 5, 6, 7, 8, 9, 10等]在自然语言理解、生成和推理等领域展现了前所未有的能力和潜力。通过利用大量文本数据,语言模型的性能随着计算预算和模型参数的增加而提升,展示了强大的零样本/少样本学习能力甚至涌现能力[4, 11]。自GPT-3[2]以来,已有多个拥有数百亿参数的大型语言模型发布,包括但不限于Megatron-Turing NLG[12]、PanGu-[1]、ERNIE 3.0 Titan[8]、Gopher[5]、PalLM[4]、OPT[6]、Bloom[10]和GLM-130B[9]。研究行人开始构建拥有超过一万亿参数的更大语言模型。这通常是通过利用稀疏激活模型,如Mixture-of-Experts(MoE)[13]来实现的。在现有的万亿参数模型中,有几项值得注意的工作,如Switch-C[14]、GLaM[15]、MoE-1.1T[16]、Wu Dao 2.0[17]和M6-10T[18]。然而,只有少数发布了在广泛任务上的全面评估结果并同时实现了预期的性能。根据作者的经验,主要的困难在于扩展效率。

近期语言模型扩展研究[19, 20, 21]揭示,LLM的最佳性能需庞大训练数据与计算预算支撑。本研究致力于构建可扩展模型架构与高效分布式训练系统,实现高吞吐量数据消费,为模型训练提供强大动力。

  • 模型扩展。大型语言模型的性能预期会随着模型大小的增加而提升。与训练密集型Transformer模型的昂贵计算成本相比,如Mixture-of-Experts (MoE) [13, 14, 15, 22]这样的稀疏架构被认为是一个吸引人的选择,可以在不引起计算成本线性增长的情况下扩展模型大小。然而,MoE模型存在诸如工作负载不平衡和全局通信延迟等问题。此外,如何将现有密集模型与MoE结合,以及在每个层级分配多少专家仍然是待解决的问题。因此,设计一个既具有高性能又高效训练的万亿参数稀疏模型是一个重要但具有挑战性的任务。
  • 系统扩展。如DeepSpeed 4等框架已被提出以支持训练万亿参数模型。实际上,主要的障碍往往在于有限的计算预算,或者更具体地说,能够使用的加速设备(例如GPU、NPU、TPU)的数量。通过利用张量并行性[23]、流水线并行性[24]、零冗余优化器[25]和重物质化[26]等技术,实践者可以在数千个加速设备上以可行的批量大小的训练万亿参数模型。另外,实践者可以通过利用异构计算技术,例如将部分计算卸载到宿主设备[27],来减少计算资源的数量。然而,当前技术不可避免地因宿主设备与设备间缓慢的带宽以及与加速设备相比CPU较弱的计算能力而阻碍了训练吞吐量,这阻止了为大型语言模型提供合理数量的数据以及实现最佳性能。因此,如何在有限的计算预算下高效地扩展系统性能对大型语言模型的性能至关重要。

在本工作中,作者介绍了PanGu-,一个拥有1.085万亿参数的稀疏架构大型语言模型。作者在MindSpore 5框架下开发PanGu-模型,并在仅包含512个Ascend 910 AI加速器的集群上对其进行训练[28],在100天内使用了3290亿个 Token 。PanGu-从PanGu-[1]继承了参数,并采用Transformer解码器架构,通过随机路由专家(RRE)进行扩展。与传统的MoE不同,RRE采用两级路由。

在第一级,专家按领域或任务分组;在第二级, Token 随机且均匀地映射到每个组中的专家,而不使用MoE中的任何可学习门控函数。通过RRE的设计,可以轻松地从PanGu-中提取子模型,用于各种下游应用,如对话、翻译、代码生成或一般的自然语言理解。

为了使训练系统高效且可扩展,作者提出了专家计算与存储分离(ECSS)机制,该机制在512个Ascend 910加速器的集群上训练1.085万亿的PanGu-时,实现了69905 tokens/s的观察吞吐量,并且大幅减少了主机到设备和设备到主机的通信以及优化器更新计算。总体而言,与具有相同超参数但采用MoE架构的模型相比,训练吞吐量提高了6.3倍。通过消耗超过40种自然语言和编程语言的3290亿个 Token ,PanGu-在中文领域的子模型在零样本设置下,没有进行任何多任务微调或指令调整,就在六个类别的16个下游任务上显著优于包括拥有13B参数的PanGu-和拥有260B参数的ERNIE 3.0 Titan[8]在内的先前SOTA模型。

作者还对PanGu-在对话、机器翻译和代码生成等应用领域进行了微调后的性能进行了测试。PanGu-在相应领域优于SOTA模型。

技术报告精简概览:第2部分揭示PanGu-模型设计理念与架构;第3部分聚焦数据集收集与组织;第4部分详述系统设计与加速技术;第5部分展示PanGu-模型的卓越实验成果。

Design Principles

PanGu-旨在实现以下目标:

  • 性能:在多个领域和任务上达到最先进的NLP性能。
  • 效率:在适度的集群上以最大系统性能训练万亿参数模型。
  • 可用性:可扩展到各种领域或任务,无需从零开始重新训练模型。
  • 部署:易于定制,并在各种实际环境中部署。

达成上述目标极具挑战性。语言模型需广泛适应多领域,参数庞大,依赖大数据与规模法则[19, 20, 21]训练。但训练大型模型需高端集群,与成本效益目标相悖。此外,模型规模扩大增加部署成本,与成本最小化目标冲突。如何平衡各项挑战,是当前面临的关键问题。

面对训练阶段高昂的计算成本,作者追求实用高效的模型。为此,提出在多个领域训练模型,并借助持续学习模式,实现向任意领域扩展的潜力,虽受限于计算资源,但目标清晰,追求实际应用的高效性。

PanGu模型,坐拥万亿参数,在训练中融合多元数据。然而,部署时携带庞大参数对每应用并非必要,甚至难以实现。为此,该模型能灵活分组与分离参数,适配各种训练与部署需求,优势显著。

2.2.1 Overview

盘古运用自回归语言建模,搭载堆叠Transformer解码层与独特Query层。其架构灵活多变,M层全局共享,N层(含Query层)按需激活。每层RRE配备G组K位专家,每组专家数量各异。这种创新设计赋予盘古三种工作模式,展现其卓越性能与广泛适应性。

图1:盘古架构,融合密集与稀疏Transformer层。下部M层为跨领域共享密集层,上部N层通过随机路由专家(RRE)激活稀疏前馈部分。各领域标记独特嵌入,实现高效跨领域学习与处理,引领架构创新潮流。

0d36e8082be1e66c0a6c85d4da82e0d9.jpeg

  • 混合模式:当,且时,模型包含稀疏RRE层和密集层。
  • 密集模式:当或时,架构将简化为密集的盘古-模型。
  • 稀疏模式:当且时,架构将是一个稀疏模型。

在万亿参数建模实践中,作者巧妙运用混合配置,将共享参数置于输入层附近,专家参数则置于输出层顶端,形成层次分明的结构。经过基准测试,此策略实现了最低的语言建模困惑度。作者认为,底层捕捉一般知识,而顶层则专注于具体知识的抽象学习。在标记嵌入层,作者根据领域差异选择不同嵌入矩阵,确保模型的高效性与专业性。

2.2.2 Random Routed Experts

在顶层结构中,作者运用多条件激活的前馈子层(专家)替代传统层,遵循专家混合(MoE)模式,实现高效模型设计。

在设计MoE架构时,如何有效将标记分配给专家是核心挑战。PanGu-采用的随机路由专家(RRE)机制,灵感源自哈希层,通过两级路由策略实现。首先,标记按域映射至候选专家组;随后,基于随机初始化的标记-专家路由图,从中挑选特定专家处理。此策略确保每层独立初始化映射,以实现计算资源的均衡分配。

RRE与常用的可学习路由器相比具有几个优点。

图2展示PanGu-中的随机路由专家(RRE):标记先按域路由至专家组,随后在域内随机分配至一专家,无需学习路由器,实现高效路由分配。

a977eb17f37960bc4c087fb1e5e82883.jpeg

  • 在训练期间,PanGu-允许在不影响其他专家的情况下,增加、修改或移除特定域的专家。这个属性使得PanGu-在解决常见的大灾难性遗忘问题上非常灵活,这对于终身学习或连续学习至关重要。* 在大多数实际部署环境中,部署具有一万亿个参数的模型是不必要或不可行的。PanGu-允许根据实际需求提取特定域的子模型,并且只部署子模型。子模型可能包含数十亿个参数,但仍然保持原始模型在目标域上的预测能力。使用这种提取和部署操作,作者可以轻松地为多个工业应用部署模型。
  • 传统MoE模型依赖全局通信操作以传输数据。通过引入两级路由,我们实现了专家间的域内通信,避免了跨域数据交换。此举显著减少了全局通信操作,节省通信量,并大幅降低了端到端训练延迟,提升了模型效率。
  • 可学习路由器因计算量大及专家间负载不平衡,训练过程易不稳定。RRE优化方案无需额外参数,通过随机初始化的路由表平衡专家负载,有效解决上述问题,确保训练稳定高效。

RRE需要一个在预训练之前初始化的路由图,算法1描述了作者如何构建路由表。

412b6c93d7343f40d6d8961fff66ef3b.jpeg

算法1随机路由专家(RRE)机制中的路由表构建过程。

Collection

为彰显PanGu-模型多领域高效独立学习力,我们集纳了40个领域数据集。其中,中文、英文、双语及代码四大主流领域数据丰富,另有26种单语自然语言、6种编程语言及金融、健康、法律、诗歌等多样数据,充分展现模型广泛适应能力。

对于中文文本,作者收集了WuDaoCorpora 2.0 [30](包含200GB)和CLUECorpus2020 [31](包含100GB)。对于英文文本,作者收集了Pile数据集[32](包含800GB)和C4数据集[3](包含750GB)。对于代码,作者使用了在PanGu-Coder [33]中使用的Python代码(147GB),以及来自GHTorrent [34]的Java代码(161GB),这些代码通过文件大小(小于1MB)、每行平均字符数(小于200)、每行最大字符数(小于1000)和它们的可编译性进行了过滤。

然后,这些收集的英文、中文和代码文本数据被采样并分配到四个主要领域。最终,作者在四个主要领域获得了超过3000亿个标记。四个主要领域的数据分布和数据源的详细统计在表1中呈现。

0f79162b20a91726ed5d4a9e0bcc958c.jpeg

对于剩余的36个领域,26个单语领域的数据主要来自CCAligned [35]和CCMatrix [36]。与上述代码领域类似,6个编程语言领域的数据通过GHTorrent [34]收集,并通过类似的方式进行过滤。金融领域的数据通过标签从WuDaoCorpora 2.0 [30]中过滤得到。健康领域的数据来自Chinese MedDialog Dataset [37]。法律领域的数据是从CAIL2018 [38]中采样的。诗歌领域的数据集来自Wernero-Poetery 6。最终,作者为这36个领域采样了超过250亿个标记。

Format

四大领域均可灵活适应多元下游任务。为精准支持特定领域,本文依据领域特性定制数据格式。针对中英文领域,我们在训练样本末尾增设标记,清晰界定文本训练边界。

在双语领域,依据训练样本源自中文或英文数据集,于样本开头添加或标记,并于结尾处插入统一标记,以提升数据处理效率。

在其余36个领域中,金融、健康、法律和诗歌的26个单语领域数据格式与中文英文一致,而6个编程语言领域则与代码领域保持相同的数据格式。

对于一个格式化数据集,假设它包含n个训练样本。为了充分利用Ascend 910集群的计算能力,并在预训练阶段加速训练,作者将数据集中的所有样本拼接成一个序列,然后根据固定长度(1024)从拼接的序列中截取训练实例,如图6所示。

在微调阶段,对于格式化数据集中的每个训练样本,如果长度小于固定长度,作者使用特殊标记将样本填充到固定长度。如果长度大于固定长度,则截断多余的部分。图7展示了这个过程。与PanGu-模型不同,PanGu-模型的每个训练样本包含两个字段:训练实例的标记ID输入序列及其领域ID。领域ID表示训练实例属于哪个领域。PanGu-模型的RRE层通过领域ID决定将训练标记路由到哪个专家。

8cb1dc51b6613f29642137d90081ba6e.jpeg8106c96488e294032d1cf47181bc5183.jpeg

4 System

盘古-Σ是使用MindSpore 1.6框架7实现的,并在512个Ascend 910加速器(也称为Ascend 910 NPU)上进行训练。训练一个万亿参数的语言模型提出了多个挑战。首先,它在训练过程中需要巨大的内存。尽管稀疏架构可以有效节省计算量,但它并没有减少内存消耗,作者仍然需要在加速器内存中存储所有参数和优化状态。假设使用Adam优化器[39]和混合精度训练[40],一个1T模型通常仅用于参数、梯度和优化器状态就需要总共16TB的内存。

在训练过程中,模型还需要额外的内存用于输入数据、网络激活、通信缓冲区和临时变量。作者估计,使用合理的批处理大小训练一个拥有1万亿参数的盘古-Σ模型需要超过32TB的内存,并需要超过1000个Ascend 910加速器或配备32GB高带宽内存(HBM)的NVIDIA V100 GPU。

作者没有将大量硬件资源用于扩大模型规模,而是致力于使用512个Ascend加速器合理大小的集群来训练盘古-Σ。为此,作者采用了异构训练,并将优化器状态卸载到CPU[27]。启用异构训练后,所有优化器状态从加速器移动到具有750GB主机内存和鲲鹏920 CPU 8的主机,作者可以将整个训练过程放入集群中。其次,在启用原始优化器卸载后,系统吞吐量是不可接受的。

根本原因仍然是大量的参数。梯度和更新的参数需要通过缓慢的主机到设备和设备到主机的通信进行交换,CPU需要遍历所有参数并更新它们。为了提高训练吞吐量,作者利用了盘古-Σ架构的稀疏特性。由于盘古-Σ使用稀疏架构,其大部分参数是条件激活的,优化器在一个迭代中只需要更新部分专家。因此,作者提出了图8所示的专家计算与存储分离(ECSS)方法。

8c54f5ac3ccabf2734530c06aefc7648.jpeg

在专家计算与存储分离中,作者将专家视为知识数据库,用于存储不同任务或领域的特定知识。在每次迭代中,具有特定领域的不同 Token ID会稀疏激活专家。在MindSpore中,作者使用查找操作符来选择被激活的专家的部分,并在反向计算中稀疏更新它们的参数。在优化器CPU卸载计算中,MindSpore将FP16参数从主机CPU复制到NPU,在NPU上计算梯度,将FP16梯度从NPU移动到CPU,并在主机CPU上计算优化器状态和更新参数。

当专家稀疏比率较低,如时,计算成本仅为全模型的大约10%。除了采用Ascend-KunPeng稀疏异构计算的ECSS之外,作者还采用了MindSpore和CANN 9提供的其他并行训练和加速技术。作者对所有的注意力和前馈层使用8路模型并行,64路专家并行(不复制),以及非专家部分使用64路数据并行。为了进一步优化内存占用,还采用了重新物质化[26]和优化器并行[25]来减少峰值内存消耗。作者还使用FastGelu和融合的LayerNorm来加速逐点计算。通过结合所有这些技术,与原始的PanGu-异构训练相比,作者实现了6.3倍的吞吐量提升.

 

-对此,您有什么看法见解?-

-欢迎在评论区留言探讨和分享。-

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

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

相关文章

Java18+​App端采用uniapp+开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发 家政服务(师傅端)介绍

Java18​App端采用uniapp开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发 家政服务(师傅端)介绍 家政服务师傅端是一个专为家政服务人员设计的平台,该平台旨在提供便捷、高效的工作机会,同时确保…

社交媒体数据恢复:QQ空间

本教程将指导您如何恢复QQ空间中的说说、日志和照片等内容。请注意,本教程不涉及推荐任何数据恢复软件。 一、恢复QQ空间说说 登录您的QQ账号,并进入QQ空间。点击“日志”选项,进入空间日志页面。在空间日志页面,您会看到一个“…

报表工具DataEase技术方案(一)

一、使用场景: 企业内部系统想要快速接入报表功能,但是局限于人力资源不足,不想沿用传统的前端后端开发模式,可以尝试使用开源报表工具 DataEase。 二、架构设计: 使用最简便的报表集成方式,通过DataEase…

区块链合约开发流程

区块链合约开发,尤其是以太坊智能合约开发,是一个多步骤的过程,从需求分析到部署和维护,每一步都需要仔细规划和执行。以下是详细的开发流程。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合…

CANDela studio新建和编辑服务

服务定义和编辑只能够在CDDT里面进行,思路分为三步: 1、Protocol Services里面添加服务,定义服务的格式、请求和正负响应。 2、根据服务的功能归类到Diagnostic Class Tenplates 3、Variant里面的Supported Diagnostic Classes勾选 然后我…

汽车IVI中控开发入门及进阶(二十四):杰发科技AC8015

前言: 在此之前的大部分时间,四维图新更多的是以图商的身份在业内出现,但现在四维图新图商之外的技术积累提现在了杰发科技身上,或者是从图商到汽车智能化一体解决方案供应商的角色转变。汽车智能化,可以简单的归为座舱智能化和智能驾驶两个板块。 随着汽车变得越来越智能…

AMS 仿真 ERROR

ERROR (OSSHNL-514): Netlist generation failed because of the errors reported above. The netlist might not have been generated at all, or the generated netlist could be corrupt. Fix the reported errors and regenerate the netlist. 原因:用的incisi…

Facebook开户|Facebook广告投放指南

家人们中午好~今天的文章由我们帅气逼人的大帅哥Zoey为大家分享(狗头)~有想要通过Facebook广告掘金的家人们!今天就跟大家分享一下Facebook广告投放的底层逻辑和实用技巧,帮助大家少走弯路,快速入门~ 基础知识&#x…

mysql的增删查改(进阶)

目录 一. 更复杂的新增 二. 查询 2.1 聚合查询 COUNT SUM AVG MAX MIN 2.1.2 分组查询 group by 子句 2.1.3 HAVING 2.2 联合查询/多表查询 2.2.1 内连接 2.2.2 外连接 2.2.3 全外连接 2.2.4 自连接 2.2.5 子查询 2.2.6 合并查询 一. 更复杂的新增 将从表名查询到…

java连接MySQL数据库

环境准备 JDK安装 Navicat MySQL安装 下载jar包 MySQL :: Download MySQL Connector/J (Archived Versions) 创建数据库 1. 打开Navicat 2. 新建数据库 3. 定义数据库名 4. 新建查询 运行如下代码创建表log CREATE TABLE log (user VARCHAR(255) NOT NULL UNIQUE,pwd …

[有监督学习]3.详细图解逻辑回归

逻辑回归 逻辑回归是一种用于有监督学习的分类任务的简单算法。虽然算法的名字中包含“回归”二字,但其实它是用于分类问题的算法。逻辑回归通过计算数据属于各类别的概率来进行分类。 概述逻辑回归是一种学习某个事件发生概率的算法。利用这个概率,可以…

simulink基础学习笔记

写在前面 这个笔记是看B站UP 快乐的宇航boy 所出的simulink基础教程系列视频过程中记下来的,写的很粗糙不完整,也不会补。视频教程很细跟着做就行。 lesson1-7节的笔记up有,可以加up的群,里面大佬挺活跃的。 lesson8 for循环 For …

AI科技,赋能企业财务管理

AI技术已深入千行百业,其实际任务解决能力愈发凸显和强劲。正如乔布斯所强调“技术不是为工程师而生,而是为应用而生”。 胜意科技深度集成业内领先技术,将AI融入到实际的财务工作流中,与OCR、RPA等智能技术组合式输出&#xff0c…

Android Coil的简单介绍及使用

前言: 本文是借鉴网上大佬的Coil相关技术文章及结合自己项目中的实际使用情况,对Coil作一个简单介绍。 简介: Coil是一个Android的图片加载框架库,是通过Kotlin协程的方式加载图片的,相对于Glide、Picasso、Fresco等…

CRMEB多店版v3.0前端技术革新与实践

摘要 随着移动互联网技术的飞速发展,用户对移动应用的体验要求日益提高。CRMEB多店版v3.0作为一款针对多门店管理的电商系统,在前端技术层面进行了全面的革新与优化。本文将从移动端UI设计、页面功能更新、DIY设计功能升级、移动端平台与门店管理、营销…

数据链路层相关知识

正文: 1.概述 数据链路层是计算机网络体系结构中的第二层,负责实现数据在物理层上的传输。在数据链路层中,数据被组织成帧(frame),并且通过MAC地址来进行寻址,以确保数据包能够被正确地发送到…

2020 6.s081——Lab1:Xv6 and Unix utilities梦开始的地方

一任宫长骁瘦 台高冰泪难流 锦书送罢蓦回首 无余岁可偷 ——知否知否 完整代码见:6.s081/kernel at util SnowLegend-star/6.s081 (github.com) Lecture 01知识点总结 首先透彻理解Lecture01的知识很是重要 ①pidwait((int *) 0); “wait(int *status)”函数用于…

【Java数据结构】详解LinkedList与链表(二)

目录 1.❤️❤️前言~🥳🎉🎉🎉 2.反转一个单链表 3. 找到链表的中间节点 4.输入一个链表,输出该链表中倒数第k个结点。 5.合并两个有序链表 6.链表分割 7. 判定链表的回文结构 8.输入两个链表,找…

Java 代码审计---反序列化

Java 序列化是一种将对象转换为字节流的过程,以便可以将对象保存到磁盘上,将其传输到网络上,或者将其存储在内存中,以后再进行反序列化,将字节流重新转换为对象。 序列化在 Java 中是通过 java.io.Serializable 接口来…

C++候捷stl-视频笔记2

深度搜索list list是双向链表:底部实现是环状双向链表 list内部除了存data之外,还要存一个前向指针prev和一个后向指针next list的iterator,当迭代器的时候,是从一个节点走到下一个节点,是通过访问next指针实现的 主要…