技术干货 | 训练的千亿模型落伍了?MindSpore带你了解超大模型间差异

本文主要是介绍技术干货 | 训练的千亿模型落伍了?MindSpore带你了解超大模型间差异,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近经常被问,你看“万亿的模型都出来了,你们训练的千亿模型是不是落伍了?”我想说:“虽然都叫超大模型,但是类型是不一样的,虽说每一类模型训出来都不容易,不过澄清一下概念还是必要的”。

大概盘算了一下,一年多来,业界发布了非常多的大模型,从去年OpenAI GPT-3 1750亿参数开始,到年初华为盘古大模型 1000亿,鹏城盘古-α 2000亿参数,Google switch transformer 1.6万亿;及近期的智源悟道2.0 1.75万亿参数 MoE,快手1.9万亿参数推荐精排模型,阿里达摩院M6 1万亿参数等。

很多小伙伴看的是眼花缭乱,那究竟这些模型有没有差异?如果有差异,差异在哪里?

一探究竟:超大模型差异

首先我想说这些模型都是基于Transformer结构,但是在模型扩展上有非常大的不同。

从计算角度看,我们可以把这些大模分成3类

  • 稠密Transformer:OpenAI GPT-3,华为盘古/鹏程盘古α(MindSpore支撑);模型规模的扩展是全结构的扩容;

  • 稀疏MoE结构Transformer:Google Switch Transformer,智源悟道2.0,阿里M6。一般来说是选择一个基础的稠密模型,通过MoE稀疏结构扩展FFN部分,以此来达成模型的扩容;

  • 高维稀疏特征推荐模型:快手推荐精排,我理解主要是推荐的高维稀疏特征Embedding需要超大参数。

推荐类模型是一个比较独立的计算特征网络,这个我们最后分析。其中相似性非常大的是稠密Transformer和稀疏MoE结构Transformer,下面我们以Google Switch Transformer来对比两者的差异。

下面两张图是Google Switch Transformer论文中和T5的对比,Switch Transformer是基于T5,通过MoE稀疏结构扩展。我们用Switch-Base作为这次分析对比基准。

Switch-Base是基于T5-Base的MoE稀疏扩展,模型参数规模比T5-Base大33倍,从计算角度看,内存开销是T5的33倍,算力开销和T5-Base一致。同时,我们拿Switch-Base和T5-Large做一个对比。Switch-Base参数规模是T5-Large的10倍,也就是说内存开销是T5的10倍,算力开销是T5-Large的29%;

从下面这个表格的下游任务对比来看,在同样的算力开销下,Switch-Base的效果比T5-Base整体上要好,这个优势是通过33倍的内存开销换取的;但是同时,Switch-Base在参数量比T5-Large大了10倍的情况下效果比T5-Large要差一些

所以我们不能单纯从参数规模来衡量一个网络的效果,需要通过参数量和计算量来综合对比,需要我们探索一种新的指标,综合考虑内存和算力开销来评估一个模型。

另外,从Switch Transformer 1.6万亿模型来看其计算量只有稠密T5 130亿参数的10%,参数量是其100倍;如果从每个参数消耗的算力来计算,1.6万亿稀疏模型只是稠密的千分之一,即1.6万亿参数的Switch Transformer的计算量相当于10亿参数的稠密的Transformer。

从训练角度来看,MoE大模型的计算量较少,重点是做好模型参数的切分,从switch transformer的实践看,主要使用数据并行+MoE并行的组合;而稠密的Transformer计算和通信量非常大,所以盘古-α需要在2K张卡上进行训练,同时也需要复杂的pipeline并行/算子级模型并行/数据并行等并行切分策略来确保2k集群的算力能被充分利用,个人认为训练挑战更大。

从推理的角度看,MoE的模型参数量非常大,我觉得可能需要通过蒸馏/量化等手段进行压缩才更适合使用,挑战很大,也是MoE模型推广面临的障碍。

快手的1.9万亿参数网络,是一种高维稀疏推荐网络,拿Google Wide&Deep来对比更为恰当。快手推荐网络的优化,应该是在后面的DNN层用了Transformer结构,而模型头部的Embedding部分还是保持和传统深度学习推荐网络类似(没有找到相关论文,不对请指正)。

这类型网络,为了表达高维稀疏特征,会有一个超级大的Embedding,参数主要是集中在头部的特征Embedding部分。这种类型网络的训练方式和前面讲的完全不同,核心技术是Embedding的模型并行,以及CPU/NPU的协同计算和存储。华为诺亚实验室在今年SIGIR 2021上发表的“ScaleFreeCTR: MixCache-based Distributed Training System for CTR Models with Huge Embedding Table”是目前一种最好的训练方案之一,也将会在MindSpore上开源

除了Transformer这种算法结构外,还是有CNN类的超大模型,也可以分成两类,这两类模型也是稠密的,参数量和计算量是成正比。

  • 超大分类层:超大规模人脸识别、图像分类网络,其典型特征是CNN特征抽取之后的FC分类层超级大。例如千万ID的人脸识别,FC层的参数规模就达到了50亿。

  • 超大Activation:遥感和超高分辨率图像处理,这类网络参数量不大,和传统CNN的参数量类似,在百M级别。但是这种模型的输入数据以及计算过程中的Activation非常大。以遥感为例,平均输入样本的分辨率就有[30000, 30000, 4],一个样本就有3.6GB,大的图像有10GB以上,中间层Activation也是GB级别的大小。

所以,总的来说在NLP、多模态、推荐、图像处理领域都有大模型,目前业界比较火热讨论的主要是基于Transformer+MoE结构的NLP及多模态大模型,我们期望通过这篇文章,让小伙伴能了解这些模型在计算上的差异。

MindSpore官方资料

官方QQ群 : 486831414

官网:https://www.mindspore.cn/

Gitee : https : //gitee.com/mindspore/mindspore

GitHub : https://github.com/mindspore-ai/mindspore

论坛:https://bbs.huaweicloud.com/forum/forum-1076-1.html 

这篇关于技术干货 | 训练的千亿模型落伍了?MindSpore带你了解超大模型间差异的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/404790

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例

Mysql中InnoDB与MyISAM索引差异详解(最新整理)

《Mysql中InnoDB与MyISAM索引差异详解(最新整理)》InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存... 目录1. 索引类型与数据存储方式InnoDBMyISAM2. 事务与并发控制InnoDBMyISAM

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo