首页 > 头条 >正文

Nature=联邦学习+区块链?隐私计算第一次离Nature这么近

2021-06-23 16:45:17    来源:互联网    

文章来源:OpenMPC社区

近期Nature上发布了一篇文章《Swarm Learning for decentralized and confidential clinical machine learning》,Swarm Learning可以称为蜂群学习,技术原理大约是横向联邦学习和区块链的结合体。隐私计算第一次离Nature这么近。github上只有样例程序和文档,没有完整源码,只能从文档中了解一下SL的设计了。

一、介绍

Swarm学习框架建立在两项经过验证的技术之上,即分布式机器学习和区块链。SLL(Swarm Learning Lib)是一个框架,实现机器学习模型的分布式训练,而无需共享原始数据。它旨在使一组节点训练一个共同的机器学习模型协作,无需共享训练数据。这可以通过共享参数(权重)来实现。原始数据的机密性和隐私性得以保护。隐私保护的授权区块链网络作为SL(Swarm Learning)网络的一层,包括账本和智能合约功能。

二、五大组件

Swarm Learning(可以称为蜂群学习)是一个分布式隐私保护机器学习框架。该框架利用分布式数据源所在节点的计算能力来运行训练模型的机器学习算法。它借助区块链技术以安全可靠的方式与对等节点协作学习。在Swarm学习中,模型的训练发生在边缘,这里的数据是最新的,并且也是数据驱动的决策被快速应用地方。在这个完全去中心化的架构中,只有学习到的洞见与协作的ML对等节点共享,而不是原始数据(联邦学习那个味)。这极大地增强了数据安全性和隐私性。

Swarm学习有五个组件,连接起来形成一个网络。

1. Swarm Learning(SL)节点

这些节点运行用户定义的机器学习算法。这些算法称为Swarm学习机器学习算法。该程序负责以迭代方式训练和更新模型。该程序是使用Python3实现的基于Keras(支持TensorFlow 2)或PyTorch的机器学习算法。支持在NVIDIA GPU上运行。

2. Swarm Network(SN)节点

这些节点构成区块链网络。当前版本的Swarm学习使用开源版本的以太坊作为底层区块链平台。Swarm网络节点使用区块链机制交互,维护模型的全局状态信息和进度信息(注意:只有元数据被写入区块链,模型本身不存储在区块链中)。Swarm网络节点使用此全局状态和进度信息来协调Swarm学习节点的工作。Swarm学习节点在其启动和初始化时,会向Swarm网络节点注册。

Sentinel节点,这是一个特殊的Swarm网络节点。Sentinel节点负责初始化区块链网络。是第一个启动的节点。

3. Swarm Learning Command Interface node(SWCI)

SWCI节点是Swarm学习框架的命令行工具。它用于查看状态、控制和管理集群。它使用安全的API连接到Swarm网络节点。SWCI节点可以连接到给定的SL集群中的任何SN节点。

4. SPIFFE,SPIRE服务器节点

这些节点为整个网络提供安全保障。该平台可以运行一个或多个SPIRE Server节点,这些节点连接在一起形成一个联邦。该平台包括一个 SPIRE代理工作负载证明插件(图中未显示),它与SPIRE服务器通信以证明Swarm网络和 Swarm学习节点的身份、获取和管理SPIFFE可验证身份文件(SVID)。有关 SPIFFE、SPIRE及其功能的概述,请参阅 https://spiffe.io/docs/latest/spiffe-about/overview/。

5. 许可证服务器节点

Swarm学习节点的许可证由该服务器安装和管理。

注意:所有Swarm学习节点必须使用相同的机器学习平台——Keras或PyTorch。不支持对某些节点使用Keras,对其他节点使用PyTorch。

Swarm学习节点之间协同工作。它定期与其他节点分享其学习成果并整合他们的洞见。这个过程一直持续到Swarm学习节点将模型训练到期望的状态。

您可以通过对模型训练代码进行一些简单的更改,将使用Python3编写的任何基于Keras或PyTorch的机器学习程序转换为Swarm机器学习程序,例如修改程序读取和写入数据的路径;定义SwarmCallback对象。有关示例代码,请参阅Swarm学习包中包含的示例。

三、组件交互

Swarm网络和Swarm学习节点以多种方式交互,使用多个代表不同含义的网络端口。

1. Swarm Network Peer-to-Peer Port,与其他Swarm网络节点共享以太坊的内部状态信息。

2. Swarm Network File Server Port,每个Swarm网络节点在该端口运行文件服务。该文件服务器用于共享有关Swarm学习平台的状态信息。

3. Swarm Network API Port,每个Swarm网络节点在该端口运行REST API服务。Swarm学习节点使用此API服务从它们注册的Swarm网络节点发送和接收状态信息。SWCI节点也使用它来管理和查看Swarm学习集群的状态。

4. Swarm Learning File Server Port,每个Swarm学习节点在该端口运行文件服务。该文件服务用于与网络中的其他Swarm学习节点共享从训练模型中学到的洞见。

5. SPIRE Server API Port,每个SPIRE服务器都在该端口运行gRPC服务。Swarm网络和Swarm学习节点使用此API连接到SPIRE服务并获取 SVID。

6. SPIRE Server Federation Port,每个SPIRE服务器该端口与联邦中的其他SPIRE服务器连接并发送和接收信任包。

7. License Server API Port,许可证服务器在该端口运行REST服务和管理界面。Swarm网络和Swarm学习节点连接到许可证服务器并获取许可证。Swarm学习平台管理员使用浏览器访问许可证服务器并管理许可证。

四、Swarm学习节点的工作流程

Swarm学习节点的工作流程如下:

1. 它首先获得运行许可证。

2. 从SPIRE服务器获取SVID。

3. 向Swarm网络节点注册自己。

4. 启动文件服务器并向Swarm网络节点宣布它已准备好运行训练程序。

5. 然后,启动用户指定的模型训练程序。

Swarm学习节点协同工作。它定期与其他节点分享其学习成果并整合他们的洞见。用户可以通过定义同步间隔(sync interval)来控制共享的周期。此间隔指定了节点将共享其学习的训练批次数目。

注意:对于同步间隔,指定较大的值会降低同步频率;指定一个小的值会增加同步率。频繁的同步会减慢训练过程,而不频繁的同步会降低最终模型的准确性。因此,同步间隔必须被视为超参数并谨慎选择。

五、修改普通机器学习程序

通过对模型训练代码进行一些简单的更改,例如更新程序读取的路径,您可以将Python3编写的任何Keras或基于PyTorch的机器程序转换为 Swarm学习程序。您可以修改程序读取和写入数据的路径;定义Swarm回调对象。有关示例代码,请参阅Swarm学习包中的示例。

要将机器程序转换为Swarm学习程序:

1. 修改程序从数据目录/platform/swarmml/data读取数据。

2. 修改程序将其所有输出写入模型目录/platform/swarmml/model。包括作为结果的训练模型。

3. 从swarm库中导入SwarmCallback类:

from swarm import SwarmCallback

[责任编辑:editor]

相关新闻