首页 > 其他分享 >解决大模型“开发难”,昇思MindSpore自动并行技术应用实践

解决大模型“开发难”,昇思MindSpore自动并行技术应用实践

时间:2023-08-03 14:44:28浏览次数:39  
标签:训练 模型 并行 计算 算子 MindSpore

本文分享自华为云社区《DTSE Tech Talk|第35期:解决大模型“开发难”,昇思MindSpore自动并行技术应用实践》,作者华为云社区精选。

昇思MindSpore是新一代覆盖端边云全场景的开源AI框架,旨在开创全新的AI编程范式,降低开发者门槛,为开发者打造开发友好、运行高效、部署灵活的AI框架,推动人工智能生态繁荣发展。同时,昇思在致力于大规模自动并行、科学计算支持等特性优化之外,还着力打造学习型社区环境,希望凝聚开发者力量共建社区,与开发者共同学习和成长。

昇思MindSpore自动并行技术的实际运用

昇思MindSpore具备丰富的并行能力,能轻松完成4096卡集群、万亿参数规模的训练任务,因此支撑了国内多个领域首发大模型的训练,这些大模型涉及知识问答、知识检索、知识推理、阅读理解、文本/视觉/语音多模态、生物制药、遥感、代码生成等。总共支撑20+大模型训练,6个千亿参数大模型,覆盖NLP、Audio、CV、多模态等领域。

数据并行

cke_136.png

对数据进行切分的并行模式,一般按照batch维度切分,将数据分配到各个计算单元(worker)中,进行模型计算。而在 昇思MindSpore 中是用集合通信这个方式来实现的,利用到了 AllReduce 操作完成的梯度聚合部分。

模型并行

cke_137.png

模型并行是算子层面的并行,它利用某些算子的特性将算子拆分到多个设备上进行计算。因此并不是网络中所有的算子都可以拆分计算,可以拆分的算子需满足两点:可以并行计算的算子;算子其中一个输入来自于Parameter。

Pipeline并行

cke_138.png

受server间通信带宽低的影响,传统数据并行叠加模型并行的这种混合并行模式的性能表现欠佳,需要引入流水线并行。流水线并行能够将模型在空间上按stage进行切分,每个stage只需执行网络的一部分,大大节省了内存开销,同时缩小了通信域,缩短了通信时间。流水线(Pipeline)并行是将神经网络中的算子切分成多个阶段(Stage),再把阶段映射到不同的设备上,使得不同设备去计算神经网络的不同部分。

内存优化

1、重计算

在计算某些反向算子时,需要用到一些正向算子的计算结果,导致这些正向算子的计算结果需要驻留在内存中,直到依赖它们的反向算子计算完,这些正向算子的计算结果占用的内存才会被复用。这一现象推高了训练的内存峰值,在大规模网络模型中尤为显著。

如:

  • Dropout
  • Activations

2、优化器并行

在进行数据并行训练时,模型的参数更新部分在各卡间存在冗余计算,优化器并行通过将优化器的计算量分散到数据并行维度的卡上,在大规模网络上(比如Bert、GPT)可以有效减少内存消耗并提升网络性能。

传统的数据并行模式将模型参数在每台设备上都有保有副本,把训练数据切分,在每次迭代后利用通信算子同步梯度信息,最后通过优化器计算对参数进行更新。数据并行虽然能够有效提升训练吞吐量,但并没有最大限度地利用机器资源。其中优化器会引入冗余内存和计算,消除这些冗余是需关注的优化点。

昇思MindSpore分布式并行模式有哪些?

数据并行

用户的网络参数规模在单卡上可以计算的情况下使用。这种模式会在每卡上复制相同的网络参数,训练时输入不同的训练数据,适合大部分用户使用;

半自动并行

用户的神经网络在单卡上无法计算,并且对切分的性能存在较大的需求。用户可以设置这种运行模式,手动指定每个算子的切分策略,达到较佳的训练性能;

自动并行

用户的神经网络在单卡上无法计算,但是不知道如何配置算子策略。用户启动这种模式,昇思MindSpore会自动针对每个算子进行配置策略,适合想要并行训练但是不知道如何配置策略的用户;

混合并行

完全由用户自己设计并行训练的逻辑和实现,用户可以自己在网络中定义AllGather等通信算子。适合熟悉并行训练的用户。

 

点击关注,第一时间了解华为云新鲜技术~

 

标签:训练,模型,并行,计算,算子,MindSpore
From: https://www.cnblogs.com/huaweiyun/p/17603291.html

相关文章

  • TabR:检索增强能否让深度学习在表格数据上超过梯度增强模型?
    这是一篇7月新发布的论文,他提出了使用自然语言处理的检索增强RetrievalAugmented技术,目的是让深度学习在表格数据上超过梯度增强模型。检索增强一直是NLP中研究的一个方向,但是引入了检索增强的表格深度学习模型在当前实现与非基于检索的模型相比几乎没有改进。所以论文作者提出......
  • 数据分享|R语言ARIMA模型分析预测上海空气质量指数AQI时间序列|附代码数据
    全文链接:http://tecdat.cn/?p=32265原文出处:拓端数据部落公众号最近我们被客户要求撰写关于上海空气质量指数的研究报告,包括一些图形和统计输出。指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求。但是,如果你想使用指数平滑法计算出预测......
  • 语义检索系统之排序模块:基于ERNIE-Gram的Pair-wise和基于RocketQA的CrossEncoder训练
    语义检索系统之排序模块:基于ERNIE-Gram的Pair-wise和基于RocketQA的CrossEncoder训练的单塔模型文本匹配任务数据每一个样本通常由两个文本组成(query,title)。类别形式为0或1,0表示query与title不匹配;1表示匹配。基于单塔Point-wise范式的语义匹配模型ernie_matchi......
  • 模型:Django与Mysql交互
     1、创建数据库用户前提是已经在本机或者服务器上安装了mysql。createdatabaseslw;createuser'slw'@'%'identifiedby'pwd'grantallprivilegesonslw.*to'slw'@'%'identifiedby'pwd'withgrantoption;flushprivile......
  • 基于三维人脸网格模型的二维人脸纹理贴图matlab仿真
    1.算法理论概述      二维人脸纹理贴图是计算机视觉领域中的一个重要研究方向,其目的是将三维人脸模型的纹理信息映射到二维图像上,以便于进行人脸识别、表情分析等应用。本文将详细介绍基于三维人脸网格模型的二维人脸纹理贴图的实现步骤和数学公式。 1.1三维人脸网格模......
  • Python基础day57 Django模板继承和模型层
    模板之标签就是在模板里面使用流程控制:if、else、elseif、for标签看起来是这样的:{%tag%}for标签{%forpersoninperson_list%}{{forloop}}<p>{{person.name}}</p>{%endfor%}{%forpersoninperson_list%}{#判断list是否有值,没有就走empty#}......
  • 模型层
    django测试环境的搭建当你只是想测试django中的某一个py文件内容,那么你可以不用书写前后端交互的形式而是直接写一个测试脚本即可。脚本代码无论是写在应用下的tests.py还是自己单独开设py文件都可以。测试环境的准备去manage.py中拷贝前四行代码然后自己写两行在test.py文......
  • 模版层、模型层(modle)、外键字段查询、环境测试搭建、基于下划线查询
    模版之标签模版里面使流程控制:if、else、elseif、for标签:{%tag%}for标签 后端代码deftag(request):user_list=[1,2,3]returnrender(request,'tag.html',locals())前端代码<body>{%foruserinuser_list%}{{user}}{%endfor%}</bo......
  • Django之models模型层、测试环境的搭建
    一、models层中常见的几种查询方法1、2、  二、测试环境的搭建1、app应用中默认有一个tests.py的测试文件,拷贝manage.py的内容如下到tests.py中此时这个测试文件就能使用django环境了importosimportsysif__name__=='__main__':os.environ.setdefault('DJA......
  • fluent:关于湍流模型和湍流方程
    水平有限理解较为浅显,以后会进行改进。湍流数值模拟湍流数值模拟方法主要有三种:直接模拟(DNS):不需要对湍流流动建立模型,采用数值计算直接求解流动的控制方程,需要大的计算机内存和大量时间;大涡模拟(LES):大尺度直接数值求解,小尺度建立模型;雷诺时均模拟(RANS):不计算各种尺度的湍流脉......