中国 KubeCon + CloudNativeCon + Open Source Summit 虚拟大会
12 月 9 日至 10 日
https://www.lfasiallc.com/kubecon-cloudnativecon-open-source-summit-china/
边云协同AI平台Sedna
Senda联邦学习背景
在边缘AI领域,联邦学习概念与技术自从Google推动以来持续引发学界与业界大规模讨论。对于边缘AI,数据隐私、数据异构、小样本是主要挑战,而将联邦学习应用在边缘计算中,可以协助解决这些挑战。接下来我们先简要地梳理下这三个挑战,再阐述联邦学习如何协助解决这些挑战。
边缘AI挑战
数据隐私
近些年来,数据隐私逐渐成为人们关注的热点,主要有两个因素:
法律因素:2018年5月,欧盟通过GDPR法案,对数据的共享和使用在法律层面上进行约束。这意味着数据孤岛现象在未来将成为新的常态。
经济因素:数据已经变成了商业核心竞争力和商业机密。比如对于需要通过PCB图片进行质检的工厂来说,原始图片就是工厂的核心资产。
Table 1. GDPR原则对数据收集者产生的影响
数据异构
在边缘计算中数据具备天然异构的属性,主要表现在:
数据特征结构不同:
在同一个业务场景下,不同工厂使用的特征维度不尽相同。
比如同样都是配煤的工厂,有的可能使用炉子温度作为特征,而有的会使用环境温湿度作为特征。
数据存储位置不同:
数据在不同的边缘节点产生,而对于非结构化数据来说,将数据的分散到集中本身就是一件需要花较大成本的事情。
数据存储格式不同:
对于结构化数据来说,有的系统会采用csv、txt等文本数据,有的系统会建立数据库进行数据存储;
对于非结构化数据来说,标签的存储格式和字段都会有差异,有的采用xml而其他或许直接采用文件名作为标签。
以上这些数据异构的问题都导致数据有较大难度统一利用起来,从而难以集中进行模型训练。
小样本数据
在隐私保护的前提下,每个工厂、园区都不愿意将自己的数据上传到云厂商。对于部分企业来说,尤其是受限于工艺制约的工厂,每个月产生的数据可能只有几十个样本,这样的数据量如果不集中训练,在大部分机器学习模型上都难以取得较好的效果。
边缘资源受限
从价格、功耗、计算资源、通信资源等方面考虑,边缘侧硬件成本较高。并且大多数边侧硬件通常仅具备推理的能力,无法利用这些设备完成训练任务。网络资源效率较低,也会导致收敛时间边长。
Sedna联邦学习优势
1)联邦学习任务的部署功能
基于KubeEdge提供的边云应用统一编排能力, Sedna针对联邦学习特有的任务模型进行部署、管理、监控,实现快速将联邦学习任务部署的功能。
2)边云协同训练的通信能力
基于KubeEdge提供的云边高可靠消息通道,Sedna针对联邦学习提出聚合权重、表征数据的通信接口、扩展边云传输的加噪、量化算法,实现联邦学习过程中的边云协同训练。
3)针对边缘资源优化的聚合算法
传统的联邦学习假设在中心云,对于训练节点资源的占用情况不会过多考虑,Sedna集成针对边缘节点优化的联邦学习算法,比如MistNet算法,在边侧进行提取表征数据,而无须进行训练,对于边侧来说仅仅就是一个推理过程。因此在边侧不具备训练能力并且保护数据隐私的前提下,完成联邦学习训练过程。
Sedna表征提取联邦学习方案
Sedna 0.4.0版本扩展了原有联邦学习的功能,支持表征提取的联邦学习,在保护隐私的前提下,进一步降低边侧资源需求。
表征提取联邦学习优化点
表征提取联邦学习针对边缘场景进行了如下优化:
减少边侧计算资源需求:通过对预训练模型进行切割将模型的前几层作为表征提取器,减少在客户端的计算量。由于边侧的表征提取相当于是推理过程,因此通过这种方式可以实现仅具备推理能力的边侧硬件完成联邦学习。
减少边云网络传输通信量:将提取后的表征数据传输到云端进行表征数据聚合训练,而无须像传统联邦学习那样进行多轮的云边之间梯度和权重的传输,减少了云边之间网络传输频次,从而减少了边云网络传输通信量。
加强隐私保护效果:通过对表征数据的量化、加噪,完成表征数据的压缩和扰动,增大通过云端表征数据反推原始数据的难度,实现对数据的加强隐私保护效果。
模型切割和表征迁移方案
问题描述
在边云联合训练架构中,边侧设备和云如何协同完成模型训练?考虑到实际系统中边侧设备数目大,计算和内存资源有限。
解决方法
利用深度神经网络前几层特征的可迁移性,服务器通过本领域或者相似领域现有数据训练模型,并提取前几层作为特征提取器。客户端从安全第三方或者服务器获得特征提取器,并可随机选择特征提取器和选择本地数据进行fine tune。
客户端通过特征提取器提取特征,一次性传输给服务器端。服务器端在一段时间内异步的收集多个客户端传输的特征,并对这些特征进行集中训练。
表征数据的量化方案
问题描述
中间层表征大小可能大于原始数据大小,如何减少通信量?
中间层表征包含大量原始数据信息,如何避免这些信息泄露?
解决方法
对中间层表征进行量化压缩处理可以有效的减少通信量。这里采用的是极致量化方案:对激活函数输出进行1 bit 量化。1 bit量化丢失了大部分的表征数据内容,有效地避免了信息泄露。
加噪量化表征隐私保护
问题描述
如何防止云提供商或者第三方通过获得量化表征推测原始数据信息?
解决方法
这里提出了两个解决方案:
1. 对量化表征做符合LDP(本地差分隐私)的处理
2. 随机响应:一种对0和1二值数据实现LDP的方法
Sedna表征提取联邦学习样例
Sedna表征提取联邦学习样例代码
样例代码包括CRD和LIB两部分:
通过CRD来定义联邦学习任务部署的节点信息和训练参数信息,CRD定义样例如下:
apiVersion: sedna.io/v1alpha1
kind: FederatedLearningJob
metadata:
name: yolo-v5
spec:
pretrainedModel: # option
name: "yolo-v5-pretrained-model"
transimitter: # option
s3: # option, but at least one
aggDataPath: "s3://sedna/fl/aggregation_data"
credentialName: mysecret
aggregationWorker:
model:
name: "yolo-v5-model"
template:
spec:
nodeName: "sedna-control-plane"
containers:
image: kubeedge/sedna-example-federated-learning-mistnet-yolo-aggregator:v0.4.0
name: agg-worker
imagePullPolicy: IfNotPresent
env: # user defined environments
name: "cut_layer"
value: "4"
name: "epsilon"
value: "100"
name: "aggregation_algorithm"
value: "mistnet"
name: "batch_size"
resources: # user defined resources
limits:
memory: 8Gi
trainingWorkers:
dataset:
name: "coco-dataset"
template:
spec:
nodeName: "edge-node"
containers:
image: kubeedge/sedna-example-federated-learning-mistnet-yolo-client:v0.4.0
name: train-worker
imagePullPolicy: IfNotPresent
args: [ "-i", "1" ]
env: # user defined environments
name: "batch_size"
value: "32"
name: "learning_rate"
value: "0.001"
name: "epochs"
value: "1"
resources: # user defined resources
limits:
memory: 2Gi
通过LIB来引入Sedna边云协同联邦学习相关库代码,实现表征数据联邦学习的代码开发。LIB定义样例如下:
from interface import Dataset, Estimator
from sedna.algorithms.aggregation import MistNet
from sedna.algorithms.client_choose import SimpleClientChoose
from sedna.common.config import Context
from sedna.core.federated_learning import FederatedLearning
simple_chooser = SimpleClientChoose(per_round=1)
# It has been determined that mistnet is required here.
mistnet = MistNet(cut_layer=Context.get_parameters("cut_layer"),
epsilon=Context.get_parameters("epsilon"))
# The function `get_transmitter_from_config()` returns an object instance.
s3_transmitter = FederatedLearning.get_transmitter_from_config()
def main():
data = Dataset()
estimator = Estimator()
fl_model = FederatedLearning(
estimator=estimator,
aggregation=mistnet,
transmitter=s3_transmitter)
fl_model.train(data)
if __name__ == '__main__':
main()
开发者原有本地可以执行的estimator,通过参数的方式导入到Sedna联邦学习的函数中,通过几行代码即可以完成联邦学习任务的配置。
完整代码和步骤请参考Sedna Examples
MistNet效果验证
数据集说明
我们在CIFAR 10、ImageNet上测试了一些著名的神经网络结构,如VGG16, ResNet18等等。我们简单的比较模型、原始数据、表征数据的大小。
Table 2. 模型、原始数据、表征数据的大小比较
通信量
联邦平均传输的是参数,而且每个round都需要重新传送。表征提取联邦学习对每份数据只需要传输一次表征数据。从Table 2可以看出:
1 bit 量化带来通信量大幅减少。
收敛需要epoch越多,Client越多或模型越大, 表征提取联邦学习的通信量优化收益更明显。
使用如下配置在CIFAR10中训练VGG16:100个Clients和100 epochs。联邦平均每个client都会产生52GB的通信开销,而表征提取联邦学习中的通信总开销为5GB。
模型大小、隐私和准确率的关系
我们分别对一个简单的神经网络(左图)和ResNet18(右图)在CIFAR10上进行了训练。
LDP噪声越大,泄露敏感信息越少,对精度的影响越大;
对于0.11%和6.99%的特征提取器在Ɛ=1是取得了较好的隐私保护和精度的平衡。
复杂的模型对噪声具有更强的抵抗能力;对于1.3%和5.8%的特征提取器在Ɛ=1时取得了较好的隐私保护和精度的平衡。
针对模型反转攻击的防御效果
我们使用白盒子Model Inversion攻击,并使用SSIM来验证效果。其中SSIM小于0.3的时候,我们认为原始图像是无法识别的。从上面的图表可以看出:通过1-bit量化和LDP的保护,对于多数特征提取器都可以有效的抵抗模型反转攻击。
Sedna联邦学习下一步计划
支持扩展客户端选择算法
支持动态创建以减少资源占用
支持多种传输协议
支持扩展梯度压缩算法
支持扩展量化、加噪算法
支持split learning聚合范式
欢迎更多对边缘计算感兴趣的同学们加入KubeEdge社区,参与AI SIG,一起建设云原生边缘计算生态。
附:KubeEdge SIG AI社区技术交流地址
项目地址:
https://github.com/kubeedge/sedna
例会时间和地址:
时间:每周四上午10: 00
地址:https://zoom.us/my/kubeedge
SIG AI工作目标和运作方式:
https://github.com/kubeedge/community/tree/master/sig-ai
引用
[1] Plato: A New Framework for Federated Learning Research. https://github.com/TL-System/plato.
[2] MistNet: Towards Private Neural Network Training with Local Differential Privacy. https://github.com/TL-System/plato/blob/main/docs/papers/MistNet.pdf
文章转载自容器魔方。点击这里阅读原文了解更多。
联系关于Linux基金会
Linux基金会是非营利性组织,是技术生态系统的重要组成部分。
Linux基金会通过提供财务和智力资源、基础设施、服务、活动以及培训来支持创建永续开源生态系统。在共享技术的创建中,Linux基金会及其项目通过共同努力形成了非凡成功的投资。请长按以下二维码进行关注。
本文分享自微信公众号 - LFAPAC(gh_8442c14fe49e)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。