SecretFlow学习指南(3)框架拆解和使用

“隐语”架构设计全貌


1.隐语框架设计思想

隐私计算是一个新兴的跨学科领域,涉及密码学、机器学习、数据库、硬件等多个领域。根据过去几年的实践经验,我们发现
●隐私计算技术方向多样,不同场景下有其各自更为合适的技术解决方案
●隐私计算学习曲线很高,非隐私计算背景的用户使用困难
●隐私计算涉及领域众多,需要领域专家共同协作

image.png



隐语的设计目标是使得数据科学家和机器学习开发者可以非常容易地使用隐私计算技术进行数据分析和机器学习建模,而无需了解底层技术细节。
为达到这个目标,隐语提供了一层设备抽象,将多方安全计算(MPC)、同态加密(HE)和可信执行环境(TEE)等隐私计算技术抽象为密文设备, 将单方计算抽象为明文设备。
基于这层抽象,数据分析和机器学习工作流可以表示为一张计算图,其中节点表示某个设备上的计算,边表示设备之间的数据流动,不同类型设备之间的数据流动会自动进行协议转换。在这一点上,隐语借鉴了主流的深度学习框架,后者将神经网络表示为一张由设备上的算子和设备间的张量流动构成的计算图。
隐语框架围绕开放这一核心思想,提供了不同层次的设计抽象,希望为不同类型的开发者都提供良好的开发体验。
在设备层,隐语提供了良好的设备接口和协议接口,支持更多的设备和协议插拔式的接入,我们希望与密码学、可信硬件、硬件加速等领域专家通力合作,不断扩展密态计算的类型和功能,不断提升协议的安全性和计算性能。
同时,隐语提供了良好的设备接口,第三方隐私计算协议可作为设备插拔式接入。在算法层,为机器学习提供了灵活的编程接口,算法开发者可以很容易定义自己的算法。

2.架构分层总览

隐语总体架构自底向上一共分为五层:

image.png


资源管理层:主要承担了两方面的职责。第一是面向业务交付团队,可以屏蔽不同机构底层基础设施的差异,降低业务交付团队的部署运维成本。另一方面,通过对不同机构的资源进行集中式管理,构建出一个高效协作的数据协同网络。
明密文计算设备与原语层:提供了统一的可编程设备抽象,将多方安全计算(MPC)、同态加密(HE)、可信硬件(TEE)等隐私计算技术抽象为密态设备,将单方本地计算抽象为明文设备。同时,提供了一些不适合作为设备抽象的基础算法,如差分隐私(DP)、安全聚合(Secure Aggregation)等。
明密文混合调度层:提供了统一的设备调度抽象,将上层算法描述为一张有向无环图,其中节点表示某个设备上的计算,边表示设备之间的数据流动,即逻辑计算图。逻辑计算图由分布式框架进一步拆分并调度至物理节点。
AI & BI 隐私算法层:这一层的目的是屏蔽掉隐私计算技术细节,但保留隐私计算的概念,其目的是降低隐私计算算法的开发门槛,提升开发效率。有隐私计算算法开发诉求的同学,可以根据自身场景和业务的特点,设计出一些特化的隐私计算算法,来满足自身业务和场景对安全性、计算性能和计算精度的平衡。在这一层上,隐语本身也会提供一些通用的算法能力,比如MPC的LR/XGB/NN,联邦学习算法,SQL能力等。
用户界面层:隐语的目标并不是做一个端到端的产品,而是为了让不同的业务都能够通过快速集成隐语而具备全面的隐私计算能力。因此我们会在最上层去提供一层比较薄的产品API,以及一些SDK,去降低业务方集成隐语的成本。

3.架构细节拆解

设备与原语层

隐语的设备分为物理设备和逻辑设备,其中,物理设备是隐私计算各个参与方的物理机器,逻辑设备则由一个或多个物理设备构成。逻辑设备支持一组 特定的计算算子(Device Ops),有自己特定的数据表示(Device Object) 。逻辑设备分为明文和密文两种类型,前者执行单方本地计算,后者执行 多方参与的隐私计算。
逻辑设备的运行时负责内存管理、数据传输、算子调度等职责,运行在一个或多个物理设备上。逻辑设备和物理设备不是一对一的关系,一个物理设备 可能同时属于多个逻辑设备。在同一组物理设备上,可以根据不同的隐私协议和参与组合虚拟出不同的逻辑设备。

image.png



下表是隐语目前暂定支持的设备列表:

设备

类型

运行时

算子

协议

前端

状态

PYU

明文

Python Interpreter

Python

Release

SPU

密文

SPU VM

PSI, XLA HLO

SPDZ-2k, ABY3

JAX, TensorFlow, PyTorch

Alpha

HEU

密文

HEU Runtime

Add, XLA HLO

Paillier, OU, TFHE

Numpy, JAX

Alpha

TEE

密文

TEE Runtime

XLA HLO

Intel SGX

JAX, TensorFlow, PyTorch

WIP


可编程性

逻辑设备具备可编程性,即用户可以在设备上自定义计算逻辑,每个设备对用户提供了协议无关的编程接口。在一个设备上,用户可以定义从简单的矩阵运算, 到完整的深度模型训练。当然,这一切取决于设备提供的计算能力。

对于明文设备PYU,它的前端为python,用户可以通过@device将一段预定义python函数调度至其上执行。

对于密文设备SPU、HEU、TEE,它们的前端可以是任何支持XLA 的框架, 如JAX, TensorFlow, PyTorch等。同样的,用户也可以通过@device将基于这些前端自定义的函数调度至指定的设备执行。

import jax.numpy as jnpdev = Device()  # maybe PYU, SPU, HEU, TEE@device(dev)
def selu(x, alpha=1.67, lmbda=1.05):return lmbda * jnp.where(x > 0, x, alpha * jnp.exp(x) - alpha)res = selu(x)  # res is a DeviceObject



用户自定义函数首先转换成XLA HLO Computation,由XLA进行设备无关的代码优化和分析,并发往后端设备。后端设备进一步执行代码优化和分析,并生成最终 的可执行代码。可执行代码或由设备的虚拟机解释执行(SPU, HEU) ,或由硬件直接执行(TEE)。使用XLA HLO作为IR,使得我们可以复用XLA前端和设备无关 代码优化,同时使得后端实现更加简洁干净。

对于密文设备(半同态)HEU,它仅支持一组有限的计算,因此提供了一组预定义算子如__add__, __mul__等,用户不能通过@device进行自定义编程。

x, y = HEUObject(), PYUObject()
z = x + y  # add
z = x * y  # mul
z = x @ y  # matmul
协议转换

用户在逻辑设备上进行编程,构建逻辑计算图,其节点表示设备上的一段函数或算子,边表示设备对象的流动。逻辑计算图被设备进一步分割为子图,两个子图间的 边表示跨设备的对象流动,此时需要进行协议转换。设备对象的DeviceObject.to接口用于转换至目标设备对象,任何新增的设备都应该提供相应的转换函数并 插入对象转换表中。

下表是各个逻辑设备对象的转换表:

PYU

SPU

HEU

TEE

PYU

share

encrypt

encrypt

SPU

reconstruct

encrypt+add

reconstruct+encrypt

HEU

decrypt

minus+decrypt

decrypt+encrypt

TEE

decrypt

decrypt+share

decrypt+encrypt

分布式引擎

用户基于设备构建了一张逻辑计算图,那么我们如何执行这张计算图?由于逻辑设备映射到一个或多个物理设备,因此我们需要将逻辑设备上的算子正确调度到其对应的物理设备,同时处理好这些物理设备间的数据传输关系。毫无疑问,我们需要一个分布式图执行引擎来解决这些问题。

那么我们需要一个怎样的分布式图执行引擎?以下是隐语对它的要求
●细粒度的异构计算:在一张逻辑计算图中,具有不同粒度的计算任务,既有简单的数据处理(秒级),也有复杂的多方训练(几个小时至几十小时)。 同时,物理节点具有不同的硬件环境,CPU, GPU, TEE, FPGA等。
●灵活的计算模型:在水平、垂直场景下,针对数据处理和模型训练等不同工作流,支持多种并行模型,如数据并行、模型并行、混合并行。
●动态执行:在联邦学习场景下,不同机构的数据规模、带宽延迟、机器性能可能有较大差异,这导致同步模式的效率受限于最慢的工作节点。因此,我们希望支持 异步训练模式,这要求图执行引擎具有动态执行能力。

image.png



隐语针对隐私计算场景,已经对框架进行了一些安全加固工作:通过身份认证、代码预装、代码存证等手段对框架做了整体加固。未来,还将探索沙箱隔离、访问控制、静态图等机制以进一步提升安全水位。在环境适配方面,为了适配跨机构网络通信的特点,推进了GCS gRPC通信、域名支持、弱网断线处理等相关功能的开发。

AI & BI 隐私算法

这一层的目的是屏蔽掉隐私计算技术细节,但保留隐私计算的概念,其目的是降低隐私计算算法的开发门槛,提升开发效率。有隐私计算算法开发诉求的同学,可以根据自身场景和业务的特点,设计出一些特化的隐私计算算法,来满足自身业务和场景对安全性、计算性能和计算精度的平衡。在这一层上,隐语本身也会提供一些通用的算法能力,比如MPC的LR/XGB/NN,联邦学习算法,SQL能力等。

逻辑设备抽象为算法开发者提供了极大的灵活性,他们可以像积木一样自由组合这些设备,在设备上自定义计算,从而构建自己的隐私计算算法。后文第六部分将通过一个具体的算法来展示隐语框架的通用编程能力。

“隐语”框架的使用

使用隐语构建隐私计算算法

逻辑设备抽象为算法开发者提供了极大的灵活性,他们可以像积木一样自由组合这些设备,在设备上自定义计算,从而构建自己的隐私计算算法。接下来,我们通过一个具体的算法来展示隐语框架的通用编程能力。

联邦学习算法

联邦机器学习又名联邦学习,联合学习,联盟学习,是一种机器学习框架,能有效帮助多个机构在满足用户隐私保护、数据安全和政府法规的要求下,进行数据使用和机器学习建模。

image.png



联邦学习的算法流程如上图所示,大致分为以下四个步骤

1机构节点在本地进行多轮训练,得到模型参数
2机构节点使用加密协议,将模型参数上传至聚合节点
3聚合节点使用加密协议,对模型参数进行聚合,得到全局模型
4机构节点从聚合节点获取最新的全局模型,进入下一轮训练

节点本地训练

机构节点运行在机构本地,隐语提供了一个逻辑设备PYU,执行本地的明文计算。下面的BaseTFModel定义了本地模型训练逻辑,用户可以选择自己喜好的机器学习框架,如TensorFlow, PyTorch等。隐语提供了@proxy装饰器,对一个普通的类进行了初始设置,以便后续在逻辑设备上对其实例化。@proxy(PYUObject)表明该类需要在PYU设备上实例化。

@proxy(PYUObject)
class BaseTFModel:def train_step(self, weights, cur_steps, train_steps) -> Tuple[np.ndarray, int]:self.model.set_weights(weights)num_sample = 0for _ in range(train_steps):x, y = next(self.train_set)num_sample += x.shape[0]self.model.fit(x, y)return self.model.get_weights(), num_sample

模型安全聚合

模型聚合对各个机构节点的模型参数进行加权平均,如下面_average所示。隐语逻辑设备的最大特点在于可编程性,用户可以将一段函数调度到多种设备执行,以达到使用不同隐私计算技术的目的。目前,DeviceAggregator可以支持PYU明文聚合,也可以支持SPU MPC协议聚合,后续我们还将支持TEE, HEU等多种密文设备。

@dataclass
class DeviceAggregator(Aggregator):device: Union[PYU, SPU]def average(self, data: List[DeviceObject], axis=0, weights=None):# 2. 机构节点使用加密协议,将模型参数上传至聚合节点data = [d.to(self.device) for d in data]if isinstance(weights, (list, tuple)):weights = [w.to(self.device) if isinstance(w, DeviceObject) else w for w in weights]def _average(data, axis, weights):return [jnp.average(element, axis=axis, weights=weights) for element in zip(*data)]# 3. 聚合节点使用加密协议,对模型参数进行聚合,得到全局模型return self.device(_average, static_argnames='axis')(data, axis=axis, weights=weights)
训练流程整合

有了节点本地训练、模型安全聚合,我们就可以将其整合起来形成完整的训练流程。首先,我们在每个PYU设备(代表机构节点)创建BaseTFModel实例。同时,初始化聚合器,可以是PYU, SPU, TEE, Secure Aggregation。然后,按照上述描述的联邦学习算法流程进行迭代训练。

class FedTFModel:def __init__(self, device_list: List[PYU] = [], model: Callable[[], tf.keras.Model] = None, aggregator=None):# 在每个机构节点(PYU)创建一个BaseTFModel实例self._workers = {device: BaseTFModel(model, device=device) for device in device_list}# 聚合器,可以是PYU, SPUPPU, TEE, Secure Aggregationself._aggregator = aggregatordef fit(self, x: Union[HDataFrame, FedNdarray], y: Union[HDataFrame, FedNdarray], batch_size=32, epochs=1, verbose='auto',callbacks=None, validation_data=None, shuffle=True,class_weight=None, sample_weight=None, validation_freq=1, aggregate_freq=1):self.handle_data(train_x, train_y, batch_size=batch_size,shuffle=shuffle, epochs=epochs)# 初始化模型参数current_weights = {device: worker.get_weights() for device, worker in self._workers.items()}for epoch in range(epochs):for step in range(0, self.steps_per_epoch, aggregate_freq):weights, sample_nums = [], []for device, worker in self._workers.items():# 1. 机构节点在本地进行多轮训练,得到模型参数weight, sample_num = worker.train_step(current_weights[device], epoch*self.steps_per_epoch+step, aggregate_freq)weights.append(weight)sample_nums.append(sample_num)# 模型参数聚合,可以是:PYU, SPU, TEE, Secure Aggregationcurrent_weight = self._aggregator.average(weights, weights=sample_nums)# 4. 机构节点从聚合节点获取最新的全局模型,进入下一轮训练current_weights = {device: current_weight.to(device) for device, worker in self._workers.items()}


以上就是使用隐语提供的设备抽象进行联邦学习算法开发的关键步骤,完整的算法流程,可以参考隐语开发者文档中的更多实例:基于联邦学习的图片分类任务,可以下载并运行它看看效果。

更多算法
通过以上联邦学习算法的例子,我们展示了隐语作为隐私计算框架的可编程性、可扩展性。更多详情请参考我们的教程和实现,也期待您基于隐语探索更多有趣的用法!

●在SPU进行PSI对齐,逻辑回归、神经网络训练
●使用SPU HEU的组合构建HESS-LR, HESS-XGB算法
●横向联邦学习,在PYU进行本地训练,使用SPU、TEE、Secure Aggregation进行梯度、权重聚合
●纵向拆分学习,将一个模型拆分至多个PYU,使用PYU聚合隐层,使用差分隐私保护前向隐层和反向梯度

隐语介绍:
隐语Secret-Flow是蚂蚁集团自主研发的一套通用隐私计算框架,以安全、开放为设计理念,支持包括MPC、TEE、FL、HE、DP在内的多种主流隐私计算技术。目前“隐语”已正式开源,诚挚邀请业界同行参与隐语共建,丰富隐私计算落地场景,齐力推动隐私计算技术发展,最终实现整个隐私计算行业的进步。

 相关学习:

SecretFlow学习指南(1)功能介绍-CSDN博客

SecretFlow学习指南(2)学习路径-CSDN博客

SecretFlow学习指南(3)框架拆解和使用-CSDN博客

SecretFlow学习指南(4)密态计算设备 SPU-CSDN博客

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

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

相关文章

Windows系统安装MySQL数据库详细教程

【确认本地是否安装mysql】 (1)按【winr】快捷键打开运行; (2)输入services.msc,点击【确定】; (3)在打开的服务列表中查找mysql服务,如果没有mysql服务&am…

麦肯锡精英高效阅读法笔记

系列文章目录 如何有效阅读一本书笔记 读懂一本书笔记 麦肯锡精英高效阅读法笔记 文章目录 系列文章目录序章 无法读书的5个理由无法读书的理由① 忙于工作,没时间读书无法读书的理由② 不知应该读什么无法读书的理由③ 没读完的书不断增多无法读书的理由④ 工作繁…

《QT实用小工具·五十三》会跑走的按钮

1、概述 源码放在文章末尾 该项目实现了会逃跑的按钮: 两个按钮,一个为普通按钮,另一个为会跑走的按钮 鼠标移到上面时,立刻跑掉 针对鼠标、键盘、触屏进行优化 随机交换两个按钮的文字、偶尔钻到另一个按钮下面、鼠标移开自…

2024.1.1 IntelliJ IDEA 使用记录

2024.1.1 IntelliJ IDEA 使用记录 下载设置文件编码maven 配置 插件可以中文语言包安装lombok 插件Smart Tomcat ( 根据需要安装)Smart Tomcat 配置 项目导入java 设置maven 配置 项目运行SpringBoot 项目运行tomcat 运行 (根据需要)相关依赖添加运行配置 下载 IntelliJ IDEA …

0基础学PHP有多难?

php作为web端最佳的开发语言,没有华而不实,而是经受住了时间考验,是一门非常值得学习的编程语言。 目前市场上各种网站、管理系统、小程序、APP等,基本都是使用PHP开发的,也侧面反映了PHP的需求以及学习的必要性&…

前端传递list(数组)类型参数,后端接收失败

一顿报错,我之前遇到的list都是Long类型 貌似用GET也是可以的,但是很奇怪一直报错 就是不可以 后来去百度 查询到可以用两种方法解决这个问题 1、拆开 传 以GET方式,后端GetMappingRequestParam接收。 2、以Post方式传,后端创建dto PostMappingReques…

55. 【Android教程】位图:Bitmap

在上一节学习 Drawable 图像资源的时候我们在很多地方用到了 bitmap,bitmap 其实就是真实图片在 Android 中最直接的表现形式,这一节我们来仔细学习一下 Bitmap 的使用。 1. 什么是 Bitmap Bitmap 在 Android 中对应一张图片文件,它是一个二…

普通人可以做什么兼职副业?推荐7 种卖情怀的生意,小众高利润

一瓶茅台,尽管成本仅为70元,但其建议零售价却高达1499元,而在市场上的流通价格更是突破了2600元大关。同样的一款手提包,在网络上仅售几百元,但一旦贴上了LV的标志,其售价便瞬间飙升至一万多元。这究竟是为…

【超好用的前端表单辅助功能】

前端表单辅助功能 1. 根据模块自动生成目录锚点定位2. 描点定位动态组件3. 隔离组件,组件内部实现校验逻辑,交给提交按钮统一处理4. 选择不同的类型需要重组不同的模块展示,并整合数据传给后端 最近做了一个复杂的表单,涉及到的技…

AI实景自动无人直播软件:引领直播行业智能化革命;提升直播效果,无人直播软件助力智能讲解

随着科技的快速发展,AI实景自动无人直播软件正在引领直播行业迈向智能化革命。它通过智能讲解、一键开播和智能回复等功能,为商家提供了更高效、便捷的直播体验。此外,软件还支持手机拍摄真实场景或搭建虚拟场景,使直播画面更好看…

43.WEB渗透测试-信息收集-域名、指纹收集(5)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:42.WEB渗透测试-信息收集-域名、指纹收集(4) web-架构资产收集&a…

蓝桥杯备赛(填空题)【Python B组】

一、弹珠堆放 问题描述 小蓝有 20230610 颗磁力弹珠,他对金字塔形状尤其感兴趣,如下图所示: (图是盗来的啊,侵权请联系删除) 问题分析 找规律,第一层1个,第二层3个,第…

UE5 audio capture 回声问题 ||在安卓上有爆鸣声

参考视频 0.基本步骤 【UE4_蓝图】录制麦克风声音/系统声音并输出保存WAV文件_ue4录音-CSDN博客 1.步骤 1.创建Sound Submix A 2. 右键新建Sound Submix B 3.把B的两个参数调为-96 4.audio capture的Base Submix,把前面提到的A赋值进去 5.开始录制输出和完成录制…

PXE远程部署CentOS系统

文章目录 在局域网内搭建PXE服务器PXE 启动组件PXE的优点实验一、搭建PXE服务器,实现远程部署CentOS系统环境准备server关闭防火墙安装组件准备 Linux 内核、初始化镜像文件及PXE引导文件配置启用TFTP 服务配置启动DHCP服务准备CentOS 7 安装源配置启动菜单文件 Cli…

突然断电,瀚高数据库启动失败

服务器临时断电后,数据库启动不起来 ps -ef|grep postgres 进到数据库的data目录下看下ls 看下 查看临时文件: ls -la /tmp 把这两个5866的文件改个名字张老师 加个bak就行 改完了pg_ctl start起一下

暗区突围联机不了联机失败无法联机的极速解决方法

暗区突围联机不了/联机失败/无法联机的极速解决方法 《暗区突围》是由腾讯魔方工作室群开发的第一人称射击类手游,于2021年8月17日进行先锋测试,并在2022年7月13日正式公测。《暗区突围》提供了双模式玩法,包括战术行动和伪装潜入&#…

猫咪没精神不吃饭?这招主食冻干喂养教你让猫咪恢复食欲

猫突然不吃东西没精神是生病了吗?当猫咪不吃东西、精神不振时,可能的原因有健康问题、环境因素或食物原因。首先应进行身体检查,观察是否有其他并发症,如无则可排除健康问题。还要给猫咪提供一个舒适的环境,多给它们一…

Cloudera简介和安装部署

ChatGPT Cloudera 是一个基于 Apache Hadoop 的数据管理和分析平台。它是由 Hadoop 的几位创始人及早期贡献者于 2008 年创立的公司,并随着公司的不断发展,Cloudera 开始提供企业级的解决方案,帮助企业更好地利用 Hadoop 生态系统进行大数据…

Qt QLCDNumber详解

1.简介 它提供了一个显示数字的显示屏控件,效果类似于现实世界中的液晶显示屏。它可以显示任何大小的数字。它可以显示十进制、十六进制、八进制或二进制数字。可以用setMode更改基数,用setSmallDecimalPoint更改小数点。 2.常用方法 以下是一些常用的…

基于点灯Blinker的ESP8266远程网络遥控LED

本文介绍基于ESP8266模块实现的远程点灯操作,手机侧APP选用的是点灯-Blinker,完整资料及软件见文末链接 一、ESP8266模块简介 ESP8266是智能家居等物联网场景下常用的数传模块,具有强大的功能,通过串口转WIFI的方式可实现远距离…