会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 解密万亿参数M6模型预训练背后的分布式框架Whale!

解密万亿参数M6模型预训练背后的分布式框架Whale

时间:2025-11-05 01:51:31 来源:益强数据堂 作者:域名 阅读:559次

最近,解密阿里云PAI团队和达摩院智能计算实验室一起发布“低碳版”巨模型M6,参数大幅降低万亿参数超大模型训练能耗。型预训练借助我们自研的背后布式Whale框架仅使用480卡GPU,即训练出了规模达人类神经元10倍的框架万亿参数多模态大模型M6,与传统海外公司实现万亿参数规模相比,解密能耗降低超八成、参数效率提升近11倍。型预训练

M6是背后布式国内首个实现商业化落地的多模态大模型。M6拥有超越传统AI的框架认知和创造能力,擅长绘画、解密写作、参数问答,型预训练在电商、背后布式制造业、框架文学艺术等诸多领域拥有广泛应用前景。

这里来为大家介绍支持万亿参数模型训练的Whale框架设计。

一、模型发展趋势和挑战

1.模型发展趋势

随着深度学习的火爆,模型的参数规模也增长迅速,OpenAI数据显示:

2012年以前,模型计算耗时每2年增长一倍,和摩尔定律保持一致; 2012年后,模型计算耗时每3.4个月翻一倍,远超硬件发展速度。

近一年模型参数规模飞速增长,云南idc服务商谷歌、英伟达、阿里、智源研究院都发布了万亿参数模型,有大厂也发布了百亿、千亿参数模型。同时,随着模型参数规模增大,模型效果也在逐步提高,Nvidia测试Bert模型不同参数规模,发现模型困惑度随模型参数规模增加而降低。

Google在GShard paper中也发现MoETransformer 模型参数规模越大,翻译质量越高。

2.大模型训练的挑战

大模型带来模型效果提升的同时,也为训练框架带来更大的挑战,例如当我们要训练一个万亿规模的模型时会面临如下挑战:

训练难: GPU显存已经不够存放模型副本,数据并行已经不能满足需求; 需要框架提供新的并行策略,协同多GPU能力来存放和训练模型; 如何给用户提供简洁、易用的接口,让用户能很容易实现分布式版模型; 超大规模模型对计算效率、通信效率都带来很大挑战,如何提高计算和通信效率; 下游任务如何对接,如何支持批量预测和在线推理需求; 成本高: 以万亿模型为例,模型参数有4TB大小、梯度也有4TB,加上optimizer states和active tensor,显存需求巨大; 业界训练同等规模模型需要的WordPress模板资源:英伟达 3072 A100、谷歌 2048 TPU v3,成本太高很难落地; 如何降本增效,使用更少的资源,更快的训练收敛;

当前已经有一些分布式训练框架,例如:Horovod、Tensorflow Estimator、PyTorch DDP等支持数据并行,Gpipe、PipeDream、PipeMare等支持流水并行,Mesh Tensorflow、FlexFlow、OneFlow、MindSpore等支持算子拆分,但这些框架还有一些不足:

模式单一:很多框架只支持部分并行策略,不能完全支持各种混合并行; 接入门槛高:用户实现模型分布式版本难度大、成本高,需要有领域专家经验才能实现高效的分布式并行策略; 迁移代价大:不同分布式框架并行化实现割裂,不同框架有各自定义的DSL,当用户要切换并行策略时,需要学习各种接口,重新改写模型; 性能不理想:部分框架实现未考虑集群物理环境;

为了应对当前分布式训练的挑战,我们研发了分布式训练框架Whale,主要目标是:

统一多种并行策略:在一个框架中支持各种并行策略以及这些策略的各种组合; 简洁易用的接口:用户只需添加几行annotation即可完成并行策略的源码库配置,模型代码不需要改动; 高效的训练框架:结合硬件资源、网络拓扑和模型进行协同优化,打造高效分布式训练框架;

二、PAI自研Whale框架

1.Whale架构

我们推出统一多种并行策略的高性能分布式训练框架Whale,从如下角度来应对分布式训练的挑战:

将不同并行化策略进行统一抽象、封装,在一套分布式训练框架中支持多种并行策略; 基于Tensorflow设计一套分布式并行接口,完全兼容Tensorflow,用户仅仅只需添加几行annotation就可以实现丰富的分布式并行策略; 结合模型结构和网络拓扑进行调度和通信优化,提供高效的分布式训练能力。

Whale框架如下图所示,主要分4个模块:

API:提供简洁易用接口,让用户组合使用各种混合并行策略; Whale IR:将并行策略转成内部表达,通过TaskGraph、Multi-Dimension、VirtualDevices抽象来表达各种并行策略; Whale Engine:基于WhaleIR,通过图编辑工具来构建分布式执行图; Runtime:将分布式执行图转成TFGraph,再调用TF 的Runtime来执行;

2.Whale简介易用接口

Whale提供简洁易用的接口来描述各种并行策略,主要的原语:

cluster:配置Virtual Device的划分方法 replica:数据并行 stage:划分TaskGraph pipeline:流水并行 split:算子拆分

用这些接口可以组合各种并行策略,例如:

数据并行:

流水并行:

流水并行+数据并行:

更多并行策略示例:

3.Whale训练流程

使用Whale进行分布式训练流程:

并行策略配置: 使用Whale API来为模型配置并行策略,只需添加几行annotation,无需修改模型代码,方法如 2.2节 所示; 可以将模型划分为多个TaskGraph,TaskGraph支持配置多个并行策略,每个TaskGraph可以配置不同的并行策略; 虚拟资源划分: 按并行策略来划分Virtual Device,每个TaskGraph对应一个Virtual Device; 按GPU资源和网络topo来为Virtual Device选择Physical Device; 分布式执行图: 基于并行策略和资源分配信息,使用图编辑工具来编辑执行图(图拷贝、拆分、插入通信节点等),生成最终的分布式执行图; 调用TF的runtime来执行分布式Graph;

三、万亿M6模型预训练

万亿模型的算力需求非常大,为了降低算力需求,Whale中实现了MoE(Mixture-of-Experts)结构,MoE的主要特点是稀疏激活,使用Gating(Router)来为输入选择Top k的expert进行计算(k常用取值1、2),从而大大减少算力需求。

Whale中实现了MoE(Mixture-of-Experts) layer,并支持专家并行,将experts拆分到多个Devices上,降低单个Device的显存和算力需求。同时数据并行有利于提升训练的并发度,因此采用数据并行+专家并行组合的混合并行策略来训练M6模型:MoElayer采用专家并行,其他layer采用数据并行。

Whale中提供简洁易用的接口来进行模型的混合并行训练,只需要增加几行annotation来配置并行策略,模型本身不需要任何修改。M6模型采用数据并行+专家并行的策略,只需要增加如下图的annotation:

同时为了节约训练资源,提高训练效率,Whale中提供各种优化技术:

显存优化:

Auto Gradient Checkpoint,自动选择最优checkpoint节点,节约activation的显存; Group-wise Apply,优化Optimizer Apply阶段的显存; CPU Offload技术,优化Optimizer status和Weight的显存; 通信池化,控制通信的数据块大小和并发,节约通信的显存;

计算、通信加速:

采用DP+EP混合并行策略,降低算力需求; 采用分组融合通信、半精度通信、拓扑感知的All2All通信算子等技术来提高通信效率; 结合混合精度、编译优化等技术提高训练效率; 借助Whale框架,首次在480 V100 上,3天内完成万亿M6模型的预训练。相比此前英伟达使用3072 A100 GPU实现万亿参数、谷歌使用2048 TPU实现1.6万亿参数大模型,此次达摩院仅使用480卡V100 32G GPU就实现了万亿模型M6,节省算力资源超80%,且训练效率提升近11倍。

四、结语

模型参数规模已越来越大,大模型已成为发展趋势,为解决超大模型训练的挑战,我们自研Whale框架,将不同并行化策略进行统一抽象、封装,在一套分布式训练框架中支持多种并行策略。Whale提供简洁易用的接口,用户只需添加几行annotation即可实现各种并行策略,不需要对模型本身进行修改。同时我们结合硬件资源、网络topo、模型进行软硬件协同优化,提供高效分布式训练框架。

通过Whale框架,我们用480 V100 GPU卡训练万亿规模模型,并在3天内完成模型训练收敛,为超大规模模型训练落地提供了可能,后续我们会进一步完善Whale框架,从更大规模、更快速度、更高性价比3个维度去扩展Whale框架的能力。同时也会推动Whale能力在更多业务场景落地,让技术能力到产品能力的转变。

(责任编辑:IT科技)

最新内容
推荐内容
  • 联想电脑开机出现关键错误的解决方案(排除联想电脑开机关键错误的方法及注意事项)
  • 总所周知,Docky是Unix/Linux类系统中的轻量级应用启动器。我是 Lubuntu 和 Docky 的忠实粉丝,因为它们不需要占用我的所有系统资源,这样就可以同时运行更多应用。我在笔记本上使用Docky应用启动器,系统为Lubuntu 14.04.但是,假如你使用LXDE发行版,你也许肯定遇到过使用Docky时报混合的错误。看下面的截图。假如不开启混合功能,就不能使用Docky一些特别功能,如3D背景、自动隐藏。假如你想开启这些Docky的功能,那么你需要在你的LXDE系统中开启混合功能。就像这样,首先安装 xcompmgr包:sudo apt-get install xcompmgr然后,选择菜单(Menu) ->偏好(Preferences) ->LXSession默认程序(Default applications for LXSession)。选择自动开始(Autostart)选项卡。 在(+增加)+Add框中输入“@xcompmgr -n”不带引号。最后点击增加按钮。这样就搞定了。关掉LXSession配置窗口,注销或重启系统。之后,你就可以看见混合功能已经打开。这时,你就可以使用3D背景和隐藏功能,如自动隐藏(Auto-hide),Intellihide和窗口闪烁(Window dodge)等。搞定!干杯!
  • 说明:系统:Ubuntu Server 11.10系统:Windows Server 2003################################################################################################### Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesnt use lo0# Accepts all established inbound connections# Allows all outbound traffic-A OUTPUT -j ACCEPT-A INPUT -p tcp --dport 80 -j ACCEPT-A INPUT -p tcp --dport 873 -j ACCEPT# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE# Now you should read up on iptables rules and consider whether ssh access# Allow ping# log iptables denied calls (access via dmesg command)# Reject all other inbound - default deny unless explicitly allowed policy:-A FORWARD -j REJECT##################################################################################################ctrl+o #保存ctrl+x #退出备注:873是Rsync端口iptables-restore < /etc/iptables.default.rules #使防火墙规则生效nano /etc/network/if-pre-up.d/iptables #创建文件,添加以下内容,使防火墙开机启动###########################################################!/bin/bashwhereis rsync #查看系统是否已安装rsync,出现下面的提示,说明已经安装ctrl+o #保存log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建。/etc/init.d/rsync start #启动Next 下一步Next默认安装路径 C:Program FilescwRsyncInstall 安装Close 安装完成,关闭3、测试是否与Rsync服务端通信成功开始-运行-cmd输入cd C:Program FilescwRsyncbin 回车再输入telnet 192.168.21.168 873 回车出现下面的界面,说明与Rsync服务端通信成功备注 C:Program FilescwRsyncbin 是指cwRsync程序安装路径4、cwRsync客户端同步Rsync服务端的数据开始-运行-cmd,输入cd C:Program FilescwRsyncbin 回车再输入rsync -vzrtopg --progress --delete mysqlbakuser@192.168.21.168::MySQL_Backup /cygdrive/d/mysql_data输入密码:123456 回车出现下面的界面,说明数据同步成功可以打开D:mysql_data 与Rsync服务端/home/mysql_data目录中的数据对比一下,查看是否相同d/mysql_data 代表D:mysql_data192.168.21.168 #Rsync服务端IP地址-vzrtopg --progress #显示同步过程详细信息三、在cwRsync客户端的任务计划中添加批处理脚本文件,每天凌晨3:00钟自动同步Rsync服务端/home/mysql_data目录中的数据到D:mysql_data目录1、打开C:Program FilescwRsyncbin目录,新建passwd.txt输入123456保存继续在C:Program FilescwRsyncbin目录,新建MySQL_Backup.bat输入echo.echo.rsync -vzrtopg --port=873 --progress --delete mysqlbakuser@192.168.21.168::MySQL_Backup /cygdrive/d/mysql_data < passwd.txtecho 数据同步完成echo.最后保存退出2、添加批处理脚本到Windows任务计划开始-设置-控制面板-任务计划打开添加任务计划,下一步浏览,选择打开C:Program FilescwRsyncbin目录里面的MySQL_Backup.bat执行这个任务:选择每天,下一步起始时间:3:00运行这个任务:每天,下一步输入Windows系统管理员的登录密码,下一步完成扩展说明:假如要调整同步的时间,打开任务计划里面的MySQL_Backup切换到日程安排来选项设置,还可以打开高级来设置每隔几分钟运行一次MySQL_Backup.bat这个脚本至此,Ubuntu Server Rsync服务端与Windows cwRsync客户端实现数据同步完成
  • Ubuntu 9.10(Karmic Koala)采用GNOME 2.28桌面环境,GNOME2.28将带来更多的改进,采用最新的Linux kernel 2.6.31。假如你的Ubuntu还不是最新的9.10,那还等什么,快来升级安装吧。图1:打开 系统—系统管理—更新管理器图2:点检查,假如有软件要更新,先把所有更新安装上。升级一般来说只能从9.04直接升级,假如你现在的版本比9.04老,那么你首先要升级到9.04。假如你的系统有软件要更新,那么一定要先把这些软件更新完之后再升级到9.10。享受你的Ubuntu 9.10吧。好像升级完之后menu.lst是不会自动升级的。反正我的没有。只好手动改了。只要照着新内核的名字把老的替换掉就可以了。 修改源(见图3-4),删除9.04的源,复制一个Ubuntu 9.10的源进去即可。(我用的是下面的)可以参考:Ubuntu 9.10 更新源 与 Ubuntu 9.10 教育网源deb http://tw.archive.Ubuntu.com/ubuntu/ karmic main universe restricted multiversedeb http://tw.archive.Ubuntu.com/ubuntu/ karmic-security universe main multiverse restricteddeb http://tw.archive.Ubuntu.com/ubuntu/ karmic-updates universe main multiverse restricteddeb http://tw.archive.Ubuntu.com/ubuntu/ karmic-proposed universe main multiverse restricteddeb http://tw.archive.Ubuntu.com/ubuntu/ karmic-backports universe main multiverse restricteddeb-src http://tw.archive.Ubuntu.com/ubuntu/ karmic main universe restricted multiversedeb-src http://tw.archive.Ubuntu.com/ubuntu/ karmic-security universe main multiverse restricteddeb-src http://tw.archive.Ubuntu.com/ubuntu/ karmic-updates universe main multiverse restricteddeb-src http://tw.archive.Ubuntu.com/ubuntu/ karmic-proposed universe main multiverse restricteddeb-src http://tw.archive.Ubuntu.com/ubuntu/ karmic-backports universe main multiverse restricted图3:图4sudo apt-get update更新源列表,必须执行.假如发现速度慢则换别的源(见图5)。sudo apt-get -d dist-upgrade-d 表示只下载文件 ,先把文件下载下来,假如速度慢则换源再继续(见图6)。图5图6sudo update-manager -d开始升级到Ubuntu 9.10,(见图7),图7 你想现在开始升级吗? 点击开始升级。(见图8)图8升级完成之后,系统会要求你重启。不急,选择不重启。为了系统下次能够正常启动,还需要进行进一步软件包检查。关闭升级窗口之后,再重复使用:sudo apt-get updatesudo apt-get upgrade图9图10成功升级到Ubuntu 9.10。(见图11)图11
  • 办公电脑教程(提升办公效率,掌握Windows操作技巧)
  • windows之外的世界比想像中要大得多呢,几乎天天都在用ssh,却到今天才知道有sshfs这个好东西,前几天还在为ZendStudio可以远程编辑文件欣喜,惭愧啊,终于有比vi scp://hostname//path/to/file更方便的方式了。sshfs,就是可以把ssh连接到的主机资源,映射到本机的文件系统当中,然后用户可以像操作本地文件一样操作,而实际的文件改动将通过ssh传输到远程主机当中。类似于mount了一个windows共享目录,或者另外一台linux主机的samba共享,或者是nfs共享,只是“共享协议”变成了ssh通道罢了。ubuntu源中已经包含了sshfs了,以及所需的fuse包,直接apt安装就可以了,一共是三个包:“fuse-utils libfuse2 sshfs”,不大,加起来才179k。安装的时候会自动创建用户组fuse,要使用sshfs的用户需要先加到这个用户组里才行(记得完成后还要重新登录),不然会没有权限执行fusermount:fuse: failed to exec fusermount: Permission denied复制代码代码如下:复制代码代码如下:复制代码代码如下:sudo umount ~/remote_folder这个简单的命令会断开远程连接同时清空 remote_folder 目录。总结在 Linux 上有很多工具可以用于访问远程文件并挂载到本地。但是如之前所说,假如有的话,也只有很少的工具能充分利用 SSH 的强大功能。我希望在这篇指南的帮助下,也能认识到 SSHfs 是一个多么强大的工具。
热点内容