大规模端云协同智能计算(大小模型端云协同联合学习)

原文作者:上海交通大学 吴帆

0 引言

目前,许多智能技术已经走入人们的日常生活,例如交互式商品推荐、人脸识别、语音识别、体征观测、疾病诊断、智能决策等,这些智能技术在为我们生活带来极大便利的同时,也深刻改变了产业形态,推动零售、家居、交通、医疗、战备等传统行业向智能化转型。

在传统基于云服务的框架下,终端上传用户的原始数据,云服务器维持机器学习模型,得到用户输入数据后进行模型推理,然后返回推理结果给用户。用户终端就是起到采集数据和展示结果的作用。然而,传统的基于云智能的服务框架存在多种问题,首先,用户数据上传到云服务器,存在泄露用户隐私的风险;其次,数据上传、推理结果回传都会带来通信延时,影响服务响应的实时性;再有,云侧可能需要同时运行上千种不同的机器学习任务,响应亿级端设备的请求,形成了高负载服务的瓶颈。

为了突破上述云智能的瓶颈,端云协同智能新范式应运而生。端云协同智能就是力图通过将部分智能推理任务或智能推理任务的部分阶段卸载到端侧进行处理,利用端侧本地即时处理的优势,削减响应延时,降低云服务器负载;同时用户原始数据不离开本地,数据安全隐私可以得到良好的保障

端云协同不仅是一种智能推理的模式,更是一种模型进化的革新范式。阿里巴巴达摩院发布的 2022年十大科技趋势之一,就是云上大模型与端侧小模型的协同进化。其指出,超大规模预训练模型是从弱人工智能向通用人工智能的突破性探索,但其性能与能耗提升不成比例的效率问题,限制了参数规模的持续扩张。所以,人工智能研究的一个未来出路就是从大模型参数的竞赛走向大小模型协同进化。一方面,大模型可以向边端的小模型输出模型能力;另一方面,小模型负责实际的推理与执行任务,同时小模型可以再向大模型反馈模型执行成效和端侧新知识,让大模型的能力得以持续进化,从而形成一个有机演进的智能体系。中国工程院院刊也专门围绕大小模型端云协同进化,举办了名为“须弥纳于芥子”的前沿论坛,引起了产业界和学术界的广泛关注。

1 大规模端云协同学习

大规模端云协同学习从本质上讲是一种分布式机器学习范式,然而又有别于传统分布式机器学习。主要区别在于,传统分布式机器学习所使用的训练服务器性能明显强于用户终端设备,而且训练数据集经过有机切分满足独立同分布的性质,保证分布式训练的收敛性。

传统分布式机器学习主要采用数据并行和模型并行两种方式(见图 1)。对于数据量巨大的机器学习任务,可以采用数据并行的模式加速学习。

如图 1(a)所示,数据集被拆分为若干个数据子集存放在不同服务器上;同时每个服务器下载一份模型副本。各服务器基于本地数据子集训练模型,并将模型更新汇聚到参数服务器,参数服务器再周期性地重新分发最新的聚合模型,从而加速训练过程。而对于模型规模巨大、难以由单一训练服务器完成的任务,可以采用模型并行的模式来分担运算量。

如图 1(b)所示,每个训练服务器仅存放完整模型的一部分。数据则以数据流的形式在各个训练服务器间进行流转,从而逐步更新各模型的组成部分。

但是,在云上分布式机器学习中,对数据集和模型的拆分通常是随机的。这样的随机拆分在端智能场景下并不适用。
图1 传统分布式机器学习方案:有机切分数据/模型

图1 传统分布式机器学习方案:有机切分数据/模型

美国谷歌公司率先将数据并行分布式训练的想法拓展应用到资源受限的移动端设备场景,提出了Federated Learning 联合学习框架,也译作“联邦学习”。在谷歌的联合学习框架下(见图 2),用户数据遵循自然切分驻留在用户设备本地,并简单借用数据并行的思想分布式训练机器学习模型。这种方法仅适用于模型规模小的应用场景,所以谷歌利用它优化安卓键盘输入法 Gboard 的单词推荐功能,取得了不错的效果。考虑到一种语言的常用单词量大概是 1 万个左右,针对 1 万个单词嵌入向量的语言模型大小约为 1.4 MB,从而可以轻松地在端设备侧完成训练和推理。
图 2 谷歌数据并行联合学习框架

图 2 谷歌数据并行联合学习框架

然而,当模型的特征规模进一步扩大时,基于完整模型的联合学习框架将无法适用。我们在与阿里巴巴手机淘宝部门合作过程中,发现在产业级的推荐场景中,要面向10亿移动终端用户,从20亿候选商品中为其做出个性化最优推荐。支持此应用的云侧机器学习模型叫做深度兴趣网络。这个模型嵌入了 20 亿个商品标识,其规模超过 100 GB。显然,完整的深度学习网络模型无法直接部署到端侧设备上进行训练,所以简单地沿用谷歌的数据并行联合学习框架不可行。

我们团队与阿里手机淘宝部门合作的 MobiCom工作,考虑了移动端超大规模联合学习。这个工作具体考虑了一个 10 亿移动终端用户、20 亿候选商品超大规模的产业级场景,而手机淘宝应用的运行内存上限为 200 MB。

考虑到云侧模型巨大,要想在端侧进行推理,必须想办法把大模型变小。如图 3 所示,我们首先尝试了既有的模型压缩方法,包括模型剪枝、量化、知识蒸馏等方法。

模型剪枝就是通过分析评估原始模型中各个参数对于最终结果的作用和贡献,删除贡献小的、重要性低的节点与边,实现模型参数量的减少。
模型量化则是通过降低模型参数的精度,让每个参数占据的比特数更少,从而减少模型整体占用的空间。
知识蒸馏则是重新构建一个结构更加简单的学生模型,以原始的复杂模型为老师模型,通过训练让学生模型模仿老师模型的输出,从而实现模型的简化。
图 3 既有压缩模型

图 3 既有压缩模型

上述方法得到的压缩模型的准确性都没有达到预期效果。究其原因,是因为单一压缩模型无法充分刻画海量端侧设备的个性化数据特征。端侧推理都做不好,更不用说在端侧做训练了。

2 大小模型端云协同联合学习

为了解决上述问题,我们深入分析了端侧的个性化数据特征,并提出了一套大小模型端云协同的联合学习框架。

如图 4 所示,我们观察到,一个终端的数据往往只涉及到完整特征空间的一个子空间,因此该终端只需要获取其本地数据特征对应的部分模型参数(我们称之为“子模型”),就可以满足本地需求。也就是说,利用终端本地数据进行训练后,只有其映射的子模型部分的参数才会被更新。从模型切分角度来看,子模型是基于特征的模型切分。

图 4 子模型——基于特征的模型切分

图 4 子模型——基于特征的模型切分

基于上述思路,我们根据终端本地数据特征从参数服务器拉取其映射的子模型,每个终端仅需要使用其本地数据训练拉取的子模型,并提交子模型参数更新,就可以参与到端云协同模型联合学习过程,从而摆脱了对完整模型的依赖。

我们提出的子模型拆分联合学习框架,采用了自然的数据集切分和基于特征的模型切分,同时实现了数据并行和模型并行。根据数据分析,平均每个手机淘宝用户每月关注的商品数量约为 300 个,嵌入 300 个商品标识的深度兴趣网络子模型大小仅有 0.27 MB,子模型压缩比达到了 50 万分之一,远超过任何一种模型压缩算法,因此子模型可以在移动端设备上高效地训练和执行推理任务。

此外,如果当每个终端使用完整模型而非特征对应的子模型,联合子模型框架将会退化到传统的联合学习,因此此框架更为一般化。一般化意味用于提升联合学习效率的方案也可以应用到联合子模型学习,例如,前面提到的模型压缩不仅可以压缩全局模型,也可以压缩子模型以进一步削减开销。

考虑到子模型直接加权聚合会导致模型聚合偏差,所以我们还提出了细粒度子模型加权聚合算法,其核心思想是通过特征相关的数据量加权子模型更新,从而消除不同终端子模型错位和数据分布不均造成的聚合偏差,保证全局模型的收敛性。

此外,终端下载子模型和上传子模型更新会向不可信的协调服务器泄露其子模型位置,即泄露其数据隐私,违背了联合学习的初衷。为此,我们设计了一个子模型隐私保护机制,有机结合了安全多方并集计算、随机回答和安全聚合,从而赋予了终端对于其子模型真实位置的混淆能力,实现在不暴露子模型位置的情况下拉取和汇聚子模型。为了保护终端在子模型框架下的隐私,设计了基于安全多方集合并集计算、随机回答和安全聚合的安全协议,赋予了终端对于其子模型真实位置的抵赖性,从而保护数据隐私。其中抵赖性的强度可以用本地差分隐私进行精确地度量。此外,终端本地可以通过设置随机回答中的参数来调整隐私保护程度,从而取得隐私和效用之间良好的平衡。

我们的子模型拆分联合学习方法得到了同行的高度关注,24 位顶尖大学的教授在共同撰写的综述中表示,此方法是一个富有前景的研究方向(详细内容参见文章“Advances and Open Problems in Federated Learning”中的 4.4.4 小节)。

前面的研究成果开启了一个研究方向的大门,随之而来还有一系列问题需要解决。首当其冲的是联合学习中本地数据并不满足独立同分布的性质。各终端的模型更新会偏向各自的本地最优,导致模型聚合结果偏离全局的最优。针对这个问题,谷歌研究院的研究员 Mehryar Mohri 提出了随机受控联合均值算法(参见文章“ICML’19:SCAFFOLD:Stochastic Controlled Averaging for Federated Learning”),使用上轮梯度估计全局方向并对本地更新进行矫正,从而保障模型的收敛性。

我们进一步考虑移动终端设备间断在线带来的数据可用性差异,提出了名为联合最新均值的算法来避免全局模型聚合偏向高可用终端。核心思想是让每个终端都有一定概率被选中参与每轮联合训练,并优先选取最长时间未参与的终端;当选到的终端不在线时,则复用它最近一次提交的梯度。这个方法通过模拟异步梯度聚合消除终端间断在线造成的模型聚合偏差。对于每一轮中未参与的终端,我们会复用它们最近一次提交的梯度。这一更新形式避免了全局模型的更新偏移。我们在每轮中会优先选取最长时间未参与的终端,从而使它们的陈旧梯度得到更新。本质上来讲,此方法通过模拟异步梯度聚合消除终端设备动态可用造成的偏差。同时,从理论上证明了联合最新均值算法在非独立同分布数据集和动态可用性下的收敛性。实验结果表明,相比于联合均值算法,我们的算法将模型准确率提高了 5%(见图 5)。
图 5 模型准确率

图 5 模型准确率

我们还想知道每个终端对联合学习模型训练的贡献度,从而增强联合学习系统的透明性和可解释性。这里采用 leave-one-out 的思想度量终端对全局模型的影响,即有无某个终端参与时全局模型性能的差异。考虑到 leave-one-out 需要重新训练模型产生难以承受的开销,我们提出了基于一阶近似和链式求导法则的估计方法,规避了重新训练;同时设计了基于费希尔信息(Fisher information)的海森矩阵(Hessian matrix)近似算法,进一步削减计算开销。此外,为了削减面向非突学习任务的估计误差,还提出了层次化的模型参数数值检查与截断方法,降低面向非凸优化目标的估计误差。有了贡献度量,可以根据终端的贡献度动态调整其模型聚合权重。比如,提高高贡献终端的权重,降低低贡献终端的权重,甚至剔除搞破坏的终端。实验结果表明,本方法可以有效提升全局模型的准确率(见图 6)。
图 6 全局模型的准确率

图 6 全局模型的准确率

另外一个影响端侧训练的问题是端侧样本量少,容易产生小样本过拟合的问题。我们可以发挥端云协同的优势,以云为协调服务器,通过域迁移为终端本地增广数据特征分布相似的数据集,从而在保有终端本地模型个性化特征的前提下,规避小样本过拟合问题。

具体解决的基本思路是,针对每个终端,从云上全局数据集中筛选出与其本地数据分布相似的样本,扩充本地数据集。在具体的技术路线方面,主要采用了域迁移domain adaption)的思想。首先,以指定终端的本地数据集为目标域,云上其他终端的数据集为源域;然后,用源域数据增量式训练模型,并用目标域评估模型准确率,选取使得模型准确率提升的样本,用于扩充本地数据;最后,终端利用本地扩充数据训练模型。相比于基于云服务的机器学习,基于域迁移的数据增强方案能够降低训练数据与测试数据之间的分布偏差;相比于端上仅用本地数据训练,新方案通过扩充相似样本能够有效降低泛化误差。

3 端云协同智能系统

近年,我们和阿里巴巴手机淘宝团队紧密合作,将上述算法集成落地到其端云协同智能系统 Walle中。Walle 这个名字来源于同名电影角色,希望能够将散布在端上的海量数据利用起来,挖掘其中埋藏的瑰宝,为用户提供更高质量的服务。
Walle 端云协同智能系统支撑了阿里数十种业务,高峰时每天被调用超 2 000 亿次。系统主要包括计算容器、数据管道和部署平台,以支持端和云在机器学习算法任务的各个阶段(前处理、模型运行、后处理)密切协同。其中,计算容器为移动设备和云服务器提供跨平台、高性能的任务执行环境,并支持机器学习任务在移动 APP 上的快速迭代演进;数据管道主要涉及前处理阶段,为机器学习任务提供特征或样本输入,并支持数据在端云之间无缝流转;部署平台主要负责协调任务至端侧和云侧,保证任务的及时部署和完成。

2019 年“双十一”期间,Walle 端智能系统在手机淘宝大规模落地,覆盖主搜、信息流推荐、云主题、会场、智能 Push、红包雨、促升、直播等场景,当日共执行了 2 235 亿次调用,在大幅提升成交量总额GMV的同时,也为用户带来了更好的交互体验。除了手机淘宝外,目前Walle端智能系统也已在闲鱼、优酷、猫客、AE、CBU、零售通等 App 有成熟方案落地。

目前,我们在已有的 Walle 系统框架中,主要增加了三组模块(见图 7)。即,云上用户粒度的样本和任务管理模块;个性化样本下发和任务发布通道;端侧样本筛选和生命周期管理,以及模型训练、模型推断、模型版本控制模块。从而搭建了以数据和模型管理、云上样本下发、端上训练为核心的端云协同链路,实现了数据采集、数据增强、个性化训练三个主要功能,从根本上支撑了千人千模思想的落地应用。

图 7 端 - 通道 - 云系统模块

图 7 端 - 通道 - 云系统模块

进一步我们还把子模型拆分联合学习技术实现到低功耗嵌入式设备上,包括树莓派和 Nvidia Jetson NanoTX2,这些设备可以搭载到无人车、无人机、无人艇等设备上实现大规模分布式边缘学习。

结束语

上述是我们在端云协同联合学习方面的初步探索,后续还有很多亟待解决的挑战问题。

第一,如何设计弹性模型结构,动态适应异构终端设备的运行时环境;
第二,如何设计分布式优化算法更好地消除数据异质性带来的模型聚合偏差;
第三,如何抵御恶意终端的攻击,保障端云协同进化稳定可靠进行;
第四,期待自主可控且开源的开发环境,以促进端云协同智能系统的快速开发和大规模部署。

作者:吴帆

上海交通大学计算机科学与工程系主任、特聘教授,承担科技创新 2030-“新一代人工智能”重大项目、国家重点研发计划课题、国家自然科学基金、上海市科委项目等 20 余项,发表学术论文 200 余篇。曾获教育部自然科学一等奖、中国计算机学会科技进步一等奖、上海市计算机学会自然科学一等奖、ACM 中国新星奖、CCF-IEEE 青年科学家奖,以及7次国际学术会议论文奖。

选自《中国人工智能学会通讯》

2024年第14卷第2期

科技前沿专题

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端开发攻略---实现与ChatGPT同款光标闪烁打字效果。

1、演示 2、实现代码 <!DOCTYPE html> <html lang"ch-ZN"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widt…

Spingbot项目配置mySQL或postgresSQL详解

1&#xff1a;postgresql库: yml文件 探索PostgreSQL&#xff1a;从基础到实践&#xff08;简单实例&#xff09; # PageHelper分页插件 pagehelper:helperDialect: postgresqlreasonable: truesupportMethodsArguments: trueparams: countcountSql# 数据源配置 spring:datas…

SQLite作为应用程序文件格式(二十八)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite数据库中JSON 函数和运算符(二十七) 下一篇&#xff1a;SQLite—系列文章目录 摘要 具有定义架构的 SQLite 数据库文件 通常是一种出色的应用程序文件格式。 以下是十几个原因&#xff1a; 简化的应用程序开发单文…

web安全学习笔记(9)

记一下第十三课的内容。 准备工作&#xff1a;在根目录下创建template目录&#xff0c;将login.html放入其中&#xff0c;在该目录下新建一个reg.html。在根目录下创建一个function.php 一、函数声明与传参 PHP中的函数定义和其他语言基本上是相同的。我们编辑function.php …

机器学习引领金融革命:重塑金融服务领域新格局,开启智能化新篇章

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

element-ui报表合计逻辑踩坑

element-ui报表合计逻辑踩坑 1.快速实现一个合计 ​ Element UI所提供的el-table中提供了方便快捷的合计逻辑实现&#xff1a; ​ https://element.eleme.cn/#/zh-CN/component/table ​ 此实现方法在官方文档中介绍详细&#xff0c;此处不多赘述。 ​ 这里需要注意&#x…

【C语言】万字讲解函数栈帧的创建与销毁

目录 前言 一、什么是函数栈帧&#xff1f; 二、理解函数栈帧能解决什么问题呢 三、函数栈帧的创建和销毁解析 3.1 什么是栈&#xff1f; 3.2 认识相关寄存器和汇编指令 3.3 剖析函数栈帧的创建和销毁 3.3.1 esp寄存器与ebp寄存器的重要性 3.3.2 函数的调用堆栈 3.3.…

SAP MRP-MD01与MRP LIVE-MD01N简介

自从SAP推出HANA以后,无论在做项目还是在面试的时候都会遇到一个问题,就是MRP和MRP LIVE 有什么区别。通常顾问都知道MRPLIVE是运行在内存中的,运行效率会优于传统的MRP。经历了很多家的公司都是HANA的系统,基本都很少会用到MRP LIVE,百分之98%都还是在用传统的MRP在跑物料…

利用 Python 开发手机 App 实战

Python语言虽然很万能&#xff0c;但用它来开发app还是显得有点不对路&#xff0c;因此用Python开发的app应当是作为编码练习、或者自娱自乐所用&#xff0c;加上目前这方面的模块还不是特别成熟&#xff0c;bug比较多&#xff0c;总而言之&#xff0c;劝君莫轻入。 准备工作 …

c++的学习之路:24、 二叉搜索树概念

摘要 本章主要是讲一下二叉搜索树的实现 目录 摘要 一、二叉搜索树概念 二、 二叉搜索树操作 1、二叉搜索树的查找 2、二叉搜索树的插入 3、二叉搜索树的删除 三、二叉搜索树的实现 1、插入 2、中序遍历 3、删除 4、查找 四、二叉搜索树的递归实现 1、插入 2、删…

Leetcode刷题之合并两个有序数组

Leetcode刷题之合并两个有序数组 一、题目描述二、题目解析 一、题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数…

去哪网拿去花不能提现,只能用于透支消费,那么拿去花提现是怎么实现呢?

去哪网拿去花不能提现&#xff0c;只能用于透支消费&#xff0c;那么拿去花提现是怎么实现呢&#xff1f; 申请携程拿去花之后&#xff0c;有一些人就会想着把钱提现出来拿去用。一般来说&#xff0c;他们都是通过线下门店来提现拿去花&#xff0c;拿去花允许用户先消费后付款&…

Python文件操作大全

1 文件操作 1.1 文件打开与关闭 1.1.1 打开文件 在Python中&#xff0c;你可以使用 open() 函数来打开文件。以下是一个简单的例子&#xff1a; # 打开文件&#xff08;默认为只读模式&#xff09; file_path example.txt with open(file_path, r) as file:# 执行文件操作…

LeetCode-二叉树修剪

每日一题 今天遇到的题比较简单&#xff0c;是一道二叉树的题。 题目要求 给定一个二叉树 根节点 root &#xff0c;树的每个节点的值要么是 0&#xff0c;要么是 1。请剪除该二叉树中所有节点的值为 0 的子树。 节点 node 的子树为 node 本身&#xff0c;以及所有 node 的…

appium2报错:Failed to create session. ‘automationName‘ can‘t be blank

1、问题概述&#xff1f; 今天在window环境中安装了appium2.5.2版本&#xff0c;通过appium inspector连接真机的时候报错如下&#xff1a; Failed to create session. automationName cant be blank 原因分析&#xff1a;这是因为appium2的比appium1有了很大的改进&#xff…

Linux 指令之文件

1.开发背景 记录 linux 下对文件操作的指令 2.开发需求 记录常用的文件操作指令 3.开发环境 linux 操作系统&#xff0c;如果不支持需要查看是否存在对应的可执行文件 4.实现步骤 4.1 查找字符串 查找指定目录下包含指定的字符串 grep -rn "Timer frequency" .…

python中如何求阶乘

第一种、利用functools工具处理 import functools result (lambda k: functools.reduce(int.__mul__, range(1, k 1), 1))(5) print(result)第二种、普通的循环 x 1 y int(input("请输入要计算的数:")) for i in range(1, y 1):x x * i print(x) 第三种、利用…

美格智能出席紫光展锐第三届泛金融支付生态论坛,引领智慧金融变革向新

4月16日&#xff0c;以“融智创新&#xff0c;共塑支付产业新生态”为主题的紫光展锐第三届泛金融支付生态论坛在福州举办&#xff0c;来自金融服务机构、分析师机构、终端厂商、模组厂商等行业各领域生态伙伴汇聚一堂&#xff0c;探讨金融支付产业的机遇与挑战。作为紫光展锐重…

浮点数的存储方式、bf16和fp16的区别

目录 1. 小数的二进制转换2. 浮点数的二进制转换3. 浮点数的存储3.1 以fp32为例3.2 规约形式与非规约形式 4. 各种类型的浮点数5. BF16和FP16的区别Ref 1. 小数的二进制转换 十进制小数转换成二进制小数采用「乘2取整&#xff0c;顺序排列」法。具体做法是&#xff1a;用 2 2…

数据结构复杂度

算法的时间复杂度 常对幂指阶 小练习1 小练习2