swarm区块链技术原理,swarm区块链

  

  来源:OpenMPC社区   

  

  最近在《自然》上发表了一篇《Swarm Learning for decentralized and confidential clinical machine learning》的文章。群学习可以称为蜂群学习,其技术原理是关于横向联邦学习和区块链的结合。第一次,隐私如此贴近自然。github上只有示例程序和文档,没有完整的源代码。你只能从文档中了解SL的设计。   

  

  一、介绍   

  

     

  

  群体学习框架基于两种已被证明的技术,即分布式机器学习和区块链。SLL(Swarm Learning Lib)是一个在不共享原始数据的情况下实现机器学习模型分布式训练的框架。它旨在使一组节点能够训练一个通用的机器学习模型,以便在不共享训练数据的情况下进行协作。这可以通过共享参数(权重)来实现。原始数据的机密性和隐私受到保护。隐私保护授权区块链网络作为SL(群学习)网络的一层,包括账本和智能合约功能。   

  

     

  

  二、五大组件   

  

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

  

     

  

  群体学习有五个组成部分,它们相互连接形成一个网络。   

  

  1.群体学习(SL)节点   

  

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

  

  2.群体网络(SN)节点   

  

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

  

  哨兵节点,这是一个特殊的群体网络节点。前哨节点负责初始化区块链网络。是启动的第一个节点。   

  

  3.群体学习指挥接口节点(SWCI)   

  

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

  

  4.SPIFFE,SPIRE服务器节点   

  

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

  

  5.许可证服务器节点   

  

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

  

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

  

  群体学习节点一起工作。它定期与其他节点共享其学习结果,并整合他们的见解。这个过程一直持续到群体学习节点将模型训练到期望的状态。   

  

  你可以通过对模型训练代码做一些简单的修改,比如修改程序读写数据的路径,将任何用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

  

相关文章