在使用区块链的机器学习的去中心化模型构建中进行自修复的系统及方法与流程

文档序号:25442725发布日期:2021-06-11 22:02阅读:177来源:国知局
在使用区块链的机器学习的去中心化模型构建中进行自修复的系统及方法与流程



背景技术:

有效的模型构建需要大量数据。尽管分布式计算已被开发,从而使用多个计算机来协调大型计算任务,但是很难将其应用于大规模机器学习(“ml”)问题。分布式模型构建中出现了若干实际问题,诸如协调和部署困难、安全问题、系统等待时间的影响、容错、参数大小等。尽管这些问题和其他问题可以在可以对计算机进行严格控制的单个数据中心环境中进行处理,但是将模型构建从数据中心外部移动到真正去中心化的环境中会带来这些挑战和附加挑战。例如,针对去中心化ml的系统可以在具有有限数目的计算节点的有限分布的计算环境中。因此,与理论上可以使用无限数目的节点(例如,联合ml)的开放方法相比,相对较少数目的节点可以参与这些计算环境中的基于ml的过程。在参与节点数目有限的这样的计算环境中,去中心化ml中每个节点的贡献可能更有价值。因此,可能期望将去中心化模型构建进一步适配来实现容错。容错可以防止整个去中心化模型构建过程中节点(或节点组)的完全丢失,并且减轻故障节点(或节点组)对ml系统的整体学习能力的影响。

附图说明

根据一个或多个各种实施例,参考以下附图来详细描述本公开。这些附图仅被提供来用于例示的目的,并且仅描绘了典型的或示例性的实施例。

图1描绘了根据一些实施例的包括参与者节点的自修复的使用区块链的机器学习(ml)的去中心化模型构建系统的示例。

图2a-图2b图示了根据一些实施例的在图1所示的去中心化模型构建系统中的节点根据自修复技术来进行通信的示例。

图3图示了根据一些实施例的被配置用于执行在图2a-图2b中所示的自修复技术的节点的示例。

图4是图示了根据一些实施例的使用区块链的ml的模型构建迭代过程的示例的操作流程图。

图5是图示了根据一些实施例的可以由图2a-图2b中所示的节点执行的自修复过程的示例的操作流程图。

图6图示了与所公开技术的实施例有关的示例计算机系统,示例计算机系统可以被用于在使用区块链的ml的去中心化模型构建中实现自修复。

附图不是详尽的,并且不将本公开限制为所公开的精确形式。

具体实施方式

本文描述的各种实施例针对用于在使用区块链的机器学习(ml)的去中心化模型构建中进行计算机节点的自修复的方法和系统。在某些分布式计算环境中,诸如企业系统(例如,在由特定组织或企业控制的域中操作的计算机联网系统)中,可能存在或者可以以其他方式使用的有限数目的计算资源。由于许多可变因素,诸如数据隐私问题、组织结构、受限制的网络访问、计算机清单等,分布式计算环境可能仅限于数目相对较少的计算机。例如,仅企业网络中的一部分计算机可以被授权访问在ml中训练数据集所需的信息。因此,与企业环境相关联的数据隐私限制可以进一步限制企业网络中可以有资格参与ml的计算机的数目。通常,如本文所公开的,有限分布的计算环境通常具有较少的计算节点,这些计算节点可以是去中心化模型构建中的贡献者。为了使得某些当前的ml技术能够使用有限分布的计算环境的计算机以预期的精度来操作,隐含的要求是,基本上所有参与节点均可用并且在ml模型构建期间贡献其相应的学习。附加地,为了在有限分布的计算环境中为ml保持理想的准确性,这些现有的ml方法可能进一步要求几乎立即恢复任何故障节点(例如,短的节点宕机时间)。在参与节点故障的情况下继续ml可能会破坏整个系统中使用的数据(例如,部分学习、训练数据集中的数据丢失),因为ml是严格协作过程。因此,单个宕机节点可能会对其他节点的学习产生负面影响,最终可能导致相应本地模型的降级并且降低系统的整体有效性。在某些情况下,模型可能以与参与节点的宕机时间成比例的方式逐渐降级。例如,在具有有限数目参与者的模型构建过程中,缺少节点的时间越长,对ml的影响可能就越具有决定性。在最佳情况下,维持系统中每个计算机的正常功能可以避免这些问题并确保精确的机器学习。尽管如此,参与模型构建的至少一个计算机不可避免地会在真实世界场景中遇到意外故障。

如上所述,在用于ml的去中心化模型构建中的节点级别处实现容错可以解决与有限分布的计算环境相关的一些潜在缺点。例如,如果节点失去与网络的通信,则即使在分布有限的计算环境内,在每个节点处实现容错功能也可以保持ml模型的预期准确性。根据实施例,可以在经历间歇性故障之后重新启动的参与节点可以使用所公开的自修复技术来自动纠正并重新集成到去中心化机器学习过程中。因此,所公开的自修复方面提供了可以容忍节点故障的去中心化模型构建过程。

此外,一些现有的ml方法被用于不限于有限分布的计算机的环境中。例如,用于ml的许多联合系统具有这样的设置,即,中心化模型使用大量计算设备之上并且通常是公共或不受限制的通信网络之上分布的训练数据来训练。例如,联合ml可以被应用于移动或物联网(iot)场景,在该场景中,模型是根据具有网络连接功能的数十万个(在某些情况下为数百万个)设备中处理的信息来进行训练。由于大量的ml参与者和数据的开放访问性,与有限分布的计算环境相比,联合ml应用中几个节点的丢失对系统的整体学习能力的影响较小。因此,许多这些现有的ml方法无法在节点级别处实现容错。尽管对于ml的一般概念而言,高可访问性可能是有利的,但是存在可能不需要联合ml方法的情况(诸如维护数据隐私性)。在这些情况下,可以是自修复。

参考图1,示出了使用区块链的机器学习(ml)的去中心化模型构建系统100的示例。根据实施例,系统100通过区块链网络110中的多次迭代,在节点10a-10g处执行去中心化并行ml。系统100可以包括模型构建区块链网络110(也被称为区块链网络110),模型构建区块链网络110包括多个计算节点或计算机设备。通常,区块链网络110可以是节点10a-10g使用共识机制来更新跨多方分布的区块链的网络。节点10a-10g之间的特定数目、配置和连接可以变化。这样,图1中所示的节点10e的布置仅出于例示目的。诸如节点10e的节点可以是固定的或移动设备。现在将描述节点10e的进一步细节的示例。尽管在附图中仅详细图示了节点10e中的一个,但是节点10a-10g中的每一个可以以所示出的方式来配置。

图1还描绘了如本文所公开的节点10e被配置为实现自修复技术。通过在ml中使用区块链,实施例可以利用自动同步功能以及与分布式分类账相关联的状态感知属性来实现自修复。在一些情况下,系统100中的每个节点10a-10g可以被类似地配置用于执行自修复。此外,通过在节点10a-10g处包括自修复特征,即使在存在间歇性故障的情况下,系统100也可以继续模型建立。例如,图1图示了节点10e可能经历连接中断,其中先前建立的从节点10e到网络110中的其他节点10a-10d、10f和10g的连接(虚线所示)可能临时故障。例如,节点10e的无线天线可能故障,从而导致其在节点10d、10f和10g之间的对等无线链路丢失。结果,节点10e可以与系统100中的其他节点10a-10d、10f和10g通信地断开连接。在某些情况下,连接中断可能导致节点10e与整个区块链网络110断开连接。应当理解,出于例示的目的,连接中断被描述为故障场景,并且如所公开的,其他形式或与节点有关的一个或多个故障也可能导致节点10e启动自修复技术。可能要求节点10e进行自修复来返回到正常ml操作的故障场景示例包括但不限于:供电中断;软件故障;计算机系统崩溃;计算机系统重启等。为了讨论的目的,将全部或部分经历任何上述故障场景或以其他方式无法参与ml过程的节点在下文中可以被称为“宕机”节点或“自修复”节点。例如,图1中的节点10e被图示为自修复节点。

以实施例的方式,在不利用区块链技术的一些现有ml系统中,存在与实现自修复相关联的许多挑战。例如,系统100中的节点10a-10g之间的连接可以完全使用对等网络来实现。在大多数情况下,对等连接是临时建立的。因此,区块链网络110中的其他节点10a-10d、10f和10g可能难以以鲁棒的方式检测到节点10e由于经历故障(诸如,连接中断)而变得不可用(与对等链路的预期断开连接相对)。类似地,节点10e可能未被配备为针对其自身来检测它已遇到故障。例如,在节点10e在连接中断之后已重新启动的情况下,节点10e可能不具有确定先前发生连接中断的能力。然而,区块链包括一种结构,即,分布式分类账42,分布式分类账42能够维持系统100中的每个节点10a-10g的状态。因此,由区块链提供的状态感知可以在自修复期间使用,以允许系统100中的其他节点可以检测到宕机节点(例如,经历故障)。甚至进一步地,区块链被利用为使得节点10e具有自我意识到遇到故障状况的能力。

附加地,如前所述,单个节点处的故障可能会影响整个模型构建过程。因此,在允许自修复节点重新参与模型构建过程之前,各种纠正动作可能需要被执行来解决这些问题。区块链技术包括可以被应用来将重启节点10e与系统100重新同步的同步机制,从而进一步增强了实施例的自修复方面。因此,同步协议可以作为所公开的自修复技术的一部分来执行。如参考图2a-图2b所更详细描述的,通常,同步确保了自修复的节点被适当地重新集成到去中心化模型构建过程中,以保持ml的总体有效性。

根据实施例,节点10e包括自修复模块47。自修复模块47可以将节点10e编程为执行各种功能,各种功能允许节点10e根据本文所述的自修复技术来自动纠正并且重新集成到系统100的去中心化模型构建中。此外,根据各种实现方式,本文描述的节点10e和组件可以在硬件和/或配置硬件的软件中实现。自修复模块47被示出为由智能合约46实现的规则的模块化部分。具体地,如前所述,由自修复模块47编码的规则可以使得去中心化模型构建能够以容错的方式运行。

节点10e可以包括一个或多个传感器12、一个或多个致动器14、其他设备16、一个或多个处理器20(为方便起见,在本文中也可互换地称为处理器20、(多个)处理器20或处理器20)、一个或多个存储设备40和/或其他组件。传感器12、致动器14和/或其他设备16可以生成对于节点10e本地可访问的数据。这样的数据对于模型构建区块链网络110中的其他参与者节点10a-10d、10f和10g可能不可访问。

图1示出了(多个)存储设备40可以存储:分布式分类账42;模型44;以及包括自修复模型47的(多个)智能合约46。分布式分类账42可以包括一系列数据块,数据块至少引用另一块,诸如先前块。以这种方式,数据块可以被链接在一起。分布式分类账42可以存储指示迭代期间节点10e与其机器学习有关的状态的块。因此,分布式分类账42可以存储节点10e的状态转变的不变记录。以这种方式,分布式分类账42可以存储模型44的当前状态和历史状态。然而,应当注意,在一些实施例中,来自一个或多个其他节点的记录、模型和智能合约的一些集合可以被存储在分布式分类账42中。

分布式分类账42、事务队列、模型44、智能合约46和/或本文所述的其他信息可以被存储在诸如存储设备40的各种存储设备中。根据特定的存储和检索要求,也可以使用其他存储方式。例如,本文描述的各种信息可以使用一个或多个数据库来存储。也可以使用、并入或访问其他数据库(诸如informixtm、db2(数据库2))或者其他数据存储方式,包括基于文件、或者查询格式、平台或资源,诸如,olap(在线分析处理)、sql(结构化查询语言)、sam(存储区域网络)等。数据库可以包括驻留在一个或多个物理设备以及一个或多个物理位置中的一个或多个这样的数据库。数据库可以存储多个类型的数据和/或文件以及相关联的数据或文件描述、管理信息或任何其他数据。

节点10e可以在(多个)存储设备40中本地存储训练数据集。如本文所述,模型44可以基于诸如训练数据集的本地可访问数据而在节点10e处被本地训练。模型44然后可以基于经由区块链网络110共享的、在其他参与者节点10a-10d、10f和10g处学习的模型参数而被更新。模型44的性质可以基于节点10e本身的特定实现方式。例如,模型44可以包括与以下各项有关的经训练的参数:自动驾驶车辆特征(诸如与物体检测有关的传感器信息)、与干燥时间和控制有关的烘干机、用于网络配置的网络配置特征、与网络安全相关的安全特征(诸如入侵检测)和/或其他基于上下文的模型。

智能合约46可以包括将节点10e配置为相对于去中心化机器学习以某些方式运行的规则。例如,规则可以指定确定性状态转变、何时以及如何选择主节点、何时发起机器学习的迭代、是否允许节点登记到迭代中、同意共识判定所需的节点数目、同意共识判定所需的投票节点的百分比和/或节点10e为去中心化机器学习可能采取的其他动作。

处理器20可以由一个或多个计算机程序指令来编程。例如,处理器20可以被编程为执行应用层22、机器学习框架24(被图示并且也被称为ml框架24)、接口层26和/或用于执行各种操作的其他指令,每个指令在本文中被更详细地描述。处理器20可以获得节点10e本地可访问但其他参与者节点10a-10d、10f和10g也不一定可访问的其他数据。这样的本地可访问数据可以包括例如不应与其他设备共享的私有数据。如本文所公开的,从私有数据学习的模型参数可以根据实施例的参数共享方面来共享。

应用层22可以在节点10e上执行应用。例如,应用层22可以包括区块链代理(未图示),区块链代理将节点10e编程为参与和/或充当如本文所述的跨区块链网络110的去中心化机器学习中的主节点。每个节点10a-10g可以使用相同的区块链代理来编程,从而确保每个节点根据相同的去中心化模型构建规则集(诸如使用智能合约46编码的规则集)进行操作。例如,区块链代理可以将每个节点10编程为充当参与者节点和主节点(如果选择担任该角色)。应用层22可以借助ml框架24来执行机器学习。

ml框架24可以基于在节点10e处本地可访问的数据来训练模型。例如,ml框架24可以根据来自传感器12、致动器14和/或节点10e已访问的其他设备或数据源的数据来生成模型参数。在一个实现方式中,ml框架24可以使用机器学习框架,但是也可以使用其他框架。在这些实现方式中的一些实现方式中,第三方框架应用编程接口(“api”)可以被用于访问由机器学习框架提供的某些模型构建功能。例如,节点10e可以执行对机器学习框架(例如tensorflowtm)的api调用。

应用层22可以使用接口层26来与区块链网络110交互并参与区块链网络110,以跨多个参与者节点10a-10g进行去中心化机器学习。接口层26可以通过例如广播区块链事务来使用区块链与其他节点通信,并且对于如在本文其他地方所描述的选择的主节点,基于那些事务以及基于主节点的活动来将块写入分布式分类账42。

针对ml的模型构建可以以去中心化的方式而被推到多个节点10a-10g,从而解决输入数据模式的变化、对系统进行缩放、并且跨节点10a-10g协调模型构建活动。将模型构建移动到更靠近数据被生成的位置或以其他方式可访问的位置,即在节点10a-10g处,可以在数据被生成的位置处实现对数据的高效实时分析,而不必在数据中心整合数据以及这样做的相关问题。在无需将所有输入数据整合到一个物理位置(数据中心或it基础结构的“核心”)中的情况下,所公开的系统、方法和非暂态机器可读存储介质可以减少使得模型适应环境条件的变化并做出更准确预测的时间(例如,模型训练时间)。因此,无论是在自主车辆上下文和实现方式中,还是在其他iot或网络连接的环境中,系统的应用都可以变得真正自主和去中心化。

根据各种实施例,去中心化的ml可以经由在多个计算机节点10a-10g之间协调的多个训练迭代来完成。根据实施例,ml使用区块链网络110的分布式分类账而被促进。节点10a-10g中的每一个可以利用区块链网络110登记,以在第一时间参与训练机器学习模型的第一迭代。每个节点10a-10g可以参与共识判定,以登记另一计算节点来参与第一迭代。共识判定可以仅应用于第一迭代,并且可以不将第二物理计算节点注册为参与后续迭代。

在某些情况下,指定数目的节点10a-10g需要被注册以进行训练迭代。此后,每个节点10a-10g可以获得本地训练数据集,本地训练数据集可以在本地访问但是在区块链网络中的其他计算节点处不可访问。节点10e可以在第一迭代期间,基于本地训练数据集来训练第一本地模型44,并且可以基于第一本地模型来获得至少第一训练参数。类似地,区块链网络100上的其他节点10a-10d、10g和10f中的每一个可以分别训练本地模型。以这种方式,节点10e可以在本地可访问但不能与其他节点10a-10d、10f和10g共享的数据上进行训练。节点10e可以生成包括准备好共享训练参数的指示的区块链事务,并且可以将训练参数传输或以其他方式提供给主节点。节点10e可以通过生成区块链事务来做到这一点,区块链事务包括指示在哪里可以获得训练参数的指示和信息(诸如统一资源指示符地址)。当一些或所有参与者节点准备好共享其相应的训练参数时,主节点(也被称为“主计算节点”)可以将指示写入分布式分类账。如本文所述,准备好共享训练参数以使得主节点写入指示的参与者节点的最小数目可以由一个或多个规则来限定,一个或多个规则可以被编码在智能合约中。

节点10e(在图1中被示出为经历了连接中断)可能临时无法经由区块链网络110进行通信。此外,节点10e可能无法在连接中断期间传输区块链事务来更新其状态。在该情况下,主节点可以确定其未能接收到区块链事务,特别是从节点10e接收到区块链事务。根据所公开的自修复技术,检测丢失的区块链事务可以向主节点发信号通知节点10e宕机。因此,区块链至少允许主节点知道节点10e可能正在经历故障,故障阻止节点10e经由区块链网络110进行通信。在某些情况下,节点10e的自修复可以通过以该方式检测故障状况而被触发。此外,无法连接到其对等方或区块链网络110的宕机节点10e可能无法将其本地训练参数共享给其他节点10a-10d、10f和10g。在连接中断期间,节点10e也可能不从区块链接收经更新的训练参数。因此,即使在节点10e重新获得连接之后,节点10e本地的数据也可能已过时。作为示例,在连接中断期间,来自最新迭代的参数可能未被节点10e成功接收。为了防止在模型构建过程中注入失效的数据,自修复模块47可以使得节点10e在其继续参与去中心化模型构建过程之前,与系统100自动执行同步来补偿该数据丢失。如本文所公开的,自修复允许节点10e自动执行被重新引入ml所需的动作。自动自修复由节点10e执行,使得其消除了诸如网络管理员的人类操作员在故障之后手动执行将节点10e放回系统100的过程的需要。

图2a-图2b图示了区块链网络200中根据上述自修复技术进行通信的节点10a-10g的示例。图2a至图2b图示了以在模型构建(在本文中也被称为机器学习或模型训练)期间提供容错的方式进行通信的自修复节点10e。为了例示的目的,过程被示出为在将自修复节点10e与系统同步之前的第一阶段(主要在图2a中示出),以及在自修复节点10e已被同步之后的第二阶段(主要在图2b中示出)。图2a-图2b还描绘了对区块链网络200全局的分布式分类账42。附加地,图2a-图2b示出了主节点10g。被登记来参与迭代的其他每个节点(即,节点10a-10d和10f)在本文中被称为“参与者节点”。在一些情况下,如本文所述,必须准备好共享训练参数来使得主节点10g写入指示的最小数目的参与者节点可以由一个或多个规则来限定,一个或多个规则可以被编码在智能合约中。

如前所述,分布式分类账42可以包含指示节点10a-10g中的每一个的状态的信息。因此,分布式分类账42可以被用于为区块链网络200上的节点10a-10g启用状态感知能力。参考图2a,第一阶段可以包括参与者节点10a-10d和10f使用本地训练数据集来训练其相应的本地模型。例如,参与节点10a-10d和10f中的每一个可以查询分布式分类账42的本地副本来获得与区块链网络中其他节点的当前状态有关的信息。参与节点10a-10d和10f可以在模型构建的迭代期间主动做出贡献。迭代可以涉及具有训练数据集的参与节点10a-10d和10f可以被参与者节点本地访问,但是其他节点不可访问。这样,每个参与者节点10a-10d和10f可以生成从本地训练数据集得到的模型参数,模型参数在本文中被称为共享参数。结果,参与者节点10a-10d和10f各自可以与区块链网络200中的其他参与者共享其相应的模型参数,作为共享参数。例如,每个参与者节点10a-10d和10f可以将其共享参数通信到主节点10g,主节点10g从区块链网络200中的节点中选择。此外,参与者节点10a-10d和10f中的每一个可以更新其在分布式分类账42中的当前ml状态。

如图2a所示,主节点10g可以被包括在区块链网络200中。主节点10g可以基于例如参与节点10a-10d和10f中的一个准备好共享其共享训练参数的指示来生成待作为分类账块而添加到分布式分类账的每个副本的新事务。主节点10g可以通过共识判定而从其他节点10a-10e中选择,或者可以简单地基于登记到迭代中的第一节点来选择。图2a图示了节点10a-10d和10f作为区块链网络200中的参与者节点。根据实施例,参与者节点10a-10d和10f可以使用在节点处本地可访问、但是在另一节点处不可访问的训练数据来训练本地模型。但是,借助机器学习而从这样的数据中学习的训练参数可以被共享,因为训练参数通常不会公开原始数据(可能包含敏感信息)。当训练参数由节点确定时,节点可以广播其准备共享训练参数的指示。例如,参与者节点10a在使用训练数据训练其本地模型之后,可以经由区块链网络200来广播指示,指示至少由主节点10g接收。随后,参与者节点10a可以经由区块链网络200来通信其由主节点10g接收的共享训练数据。作为一般描述,主节点10g可以从区块链网络200中的每个参与者节点10a-10f获得共享训练参数,这在本文中被称为“参数共享”。

在上述迭代期间,在故障状况之后,自修复节点10e可能处于重新启动自身的过程中。在连接中断的示例中(如图1所示),自修复节点10e可能无法经由区块链网络200进行通信。在某些情况下,自修复节点10e可能先前已完全宕机。例如,自修复节点10e可能已崩溃,从而导致其丢失尚未被通信到区块链的所有动态内容。继续该示例,在该场景中,在节点10e可以开始该过程的同步部分之前,可能需要完全重启节点10e。在其他情况下,与故障相反,自修复节点10e可能正在从网络分区恢复。网络分区通常可以被表征为节点部分宕机。作为示例,当自修复节点10e网络被分区时,它正在正常运行,但是不能以允许其参与协作ml过程的方式与对等节点通信。在这些情况下,可能不需要完全重启自修复节点10e。在网络连接被重新建立之后,自修复节点10e可以开始同步。在一些实施例中,自修复节点10e被配置为自动执行从上述中断恢复所需的任何必要功能,诸如自动重启。一旦节点已从中断恢复,则节点10e的区块链层可以发起同步协议作为其自修复的一个方面。作为同步的初始步骤,自修复节点10e可以从分布式分类账42中获得块。这允许自修复节点10e检索中断期间可能丢失或损失的任何块。

自修复节点10e可以更新分布式分类账的本地副本,从而获得全局ml状态17和本地ml状态18。如前所述,分布式分类账42可以基于从系统节点的协作学习来保持当前(例如,基于最近迭代)全局ml状态17,以及与每个节点本地执行的单独学习相对应的当前本地ml状态18。关于自修复节点10e,由分布式分类账42维护的其本地ml状态18应包括来自其中节点10e是参与者的最新迭代的数据。因此,本地ml状态18反映了在故障之前由区块链同步的自修复节点10e的状态。重启之后,所有其他参与者节点10a-10d和10f知道自修复节点10e在分布式分类账42中处于其本地ml状态18所指示的状态。节点10e的任何其他本地ml状态(与分布式分类账42所维护的本地ml状态18不一致)可能是数据损坏或过时的结果。因此,同步有效地利用从分布式分类账获得的本地ml状态18来覆盖该数据,以确保状态已被验证并且在整个区块链中一致。

此外,图2a图示了自修复节点ige可以生成指示其不同步(“o-o-s”)的区块链事务19。通过传输该“o-o-s”区块链事务19,自修复节点向网络200发出信号指示尽管它可以从故障状况恢复,但是它尚未完成用于自修复的同步协议,并且其可能与区块链不同步。不同步的节点可以具有尚未通过最新学习迭代更新的机器学习数据(包括本地模型)。如上所述,自修复技术可以通过等待直到同步协议之后才允许节点对ml做出贡献,从而避免自修复节点10e将损坏的或失效的数据注入到去中心化模型构建过程中。具体地,将o-o-s区块链事务19写入分布式分类账42的自修复节点10e向其他参与者节点10a-10d、10f和主节点10g发出信号,表明它尚未准备好与系统共享其学习(例如,本地训练参数)。因此,自修复节点10e仍然被逐渐重新引入系统中,并且不被包括在当前的模型构建迭代中。

此后,如在图2a中所见,自修复节点10e可以在全局ml状态17和本地ml状态18之间执行比较。比较允许自修复节点10e确定来自其先前学习的本地数据是与系统的其余部分同步还是最新的。自修复节点10e可以验证例如其本地模型的状态与已由区块链网络200的节点协作执行的最新模型构建迭代状态之间是否存在一致。具体地,图2a图示了自修复节点10e确定全局ml状态17与本地ml状态18之间存在不一致的情况。全局ml状态17与本地ml状态18之间的不一致可以表示本地ml状态是失效的,并且需要采取纠正动作来与区块链网络110的其他节点同步。根据所公开的自修复技术,一旦自修复节点10e已标识全局ml状态17和本地ml状态17之间的不一致,它就可以自动执行各种纠正措施来恢复节点10e的状态来实现一致。

图2a示出了作为纠正动作,自修复节点10e可以获得从最新的模型构建迭代中生成的合并训练参数15g。合并训练参数15g可以根据去中心化模型构建系统的参数共享技术来使用。例如,如上所述,参与者节点10a-10d和10f可以共享与其相应的本地模型相对应的训练参数。随后,主节点10g可以将来自参与者节点10a-10d和igf的共享参数组合,以生成用于最新迭代的合并训练参数15g。在生成合并训练参数15g时,主节点igg可以向区块链网络200广播合并训练参数可用的指示。

主节点10g可以通过写入指示状态改变的区块链事务来广播其已完成生成合并训练参数15g的指示。这样的状态改变(以事务的形式)可以作为具有这样的指示的块而被记录到分布式分类账42中。在迭代期间,参与节点10a-10fd和10f可以周期性地监视分布式分类账42来确定主节点10g是否已完成合并,并且如果是,则获得合并训练参数15g。类似地,在同步期间,由于在其期间发现其本地ml状态18与区块链网络不一致,自修复节点10e可以自动查询分布式分类账42。合并训练参数15g可以由自修复节点10e获得。自修复节点10e然后可以将合并训练参数15g应用于其本地模型,并且然后更新其状态,其状态被写入分布式分类账42。作为更新的结果,本地ml状态17应能够恢复到与全局ml状态18一致的点。应理解,尽管参考图2a作为纠正动作的示例讨论了参数共享,但是自修复技术可以根据需要来执行不同形式的纠正动作,从而允许自修复节点10e更新其本地状态并且实现与区块链网络200的同步。参考图5讨论了与可以由实施例的自恢复方面实现的纠正动作有关的细节。

在一些情况下,指示其已完成合并的主节点10g还将其状态释放为用于迭代的主节点。在下一迭代中,可以(但是不一定)选择新的主节点。训练可以迭代,直到训练参数收敛。一旦训练参数不再收敛,训练迭代就可以重新开始,从而根据需要借助区块链网络来不断改进模型。

现在参考图2b,示出了通信的第二阶段。第二阶段通常可以被描述为在自修复节点10e已被同步之后,在区块链网络200内的通信。图2b图示了第二阶段可以涉及确保本地ml状态18与全局ml状态17具有一致性。在某些情况下,该确定可以包括在纠正动作完成之后,在全局ml状态17和本地ml状态18之间执行另一比较。一致性表示自修复节点10e现在处于与区块链网络200上其他节点一致的状态。重启之后,自修复节点10e处的数据现在是最新的并且基于由系统执行并且由分布式分类账42维护的最新模型构建迭代。恢复自修复节点10e的本地状态可以指示节点10e与区块链网络200的同步成功完成。在自修复节点10e被同步之后,节点10e可以在分布式分类账42中将其自身标记为处于同步(“i-s”)。图2b示出了自修复节点10e可以生成指示其处于同步的区块链事务20。通过传输该“1-s”区块链事务20,自修复节点10e向网络200发信号通知其已对故障的任何潜在影响进行了纠正,并且可以被重新引入模型构建过程中。根据实施例,“1-s”区块链事务20向主节点10g指示,自修复节点10e现在准备在模型构建的连续迭代期间作为参与者节点共享其学习。

因为如本文所述的去中心化机器学习通过多个迭代而发生,并且不同的节点集可以登记来参与任一个或多个迭代,所以去中心化模型构建活动可以随着节点的可用性改变而被动态地缩放。例如,即使自主汽车计算机在线(诸如正在操作)或离线(诸如关断汽车引擎点火装置),系统也可以在可用节点处连续执行机器学习迭代。当车辆在线时,使用分布式分类账,他们可以从诸如对等车辆接收分布式分类账的更新版本,并且获得在车辆离线时学习的最新参数。

此外,动态缩放不会导致模型准确性的降级。通过使用分布式分类账来协调活动并且通过不允许失效节点或未初始化的节点参与迭代而使用智能合约来强制同步,失效的梯度问题可以被避免。去中心化分类账和智能合约(如图1所示)的使用也可以使得系统能够容错。通过动态缩放参与者节点并同步所学习的参数,节点重启和其他宕机时间可以在不会损失模型的准确性的情况下而被无缝地处理。此外,实现用于实验的ml模型的构建应用可以被简化,因为去中心化应用与网络拓扑和系统中的节点角色无关。

现在参考图3,图示了被配置为参与使用区块链的机器学习的迭代的节点10的示意图。图3示出了节点10的示例配置,节点10包括用于实现本文所公开的自修复方面的自修复模式47。在所示的示例中,自修复模块47可以是由智能合约46实现的规则的模块化部分。如上所述,智能合约46可以包括将节点10配置为相对于去中心化机器学习而以某些方式运行的规则。具体地,由自修复模型47编码的规则可以将节点10编程为如前所述,以将节点10e重新引入去中心化模型构建过程中的方式来执行自修复。例如,智能合约46可以使得节点10在与其他参与者节点的迭代期间,使用应用层22和分布式分类账42来协调并行模型构建。应用层22可以包括发起模型训练的区块链代理。更进一步,智能合约46可以将节点10配置为通信共享参数(与原始数据相对)。

接口层26可以包括消息传递接口,消息传递接口被用于节点10经由网络来与其他参与者节点进行通信。作为示例,接口层26提供了允许节点10在ml期间,将其共享参数(如图2b所示)通信到其他参与节点的接口。消息传递接口可以被配置为安全超文本传输协议(“https”)微服务器204。也可以使用其他类型的消息传递接口。接口层26可以使用区块链api206来基于区块链规范而对区块链功能进行api调用。区块链功能的示例包括但不限于读取和写入区块链事务208以及将区块链块读取和写入分布式分类账42。区块链规范的一个示例是以太坊规范。也可以使用其他区块链规范。根据一些实施例,在故障之后,自修复模块47在发起本文中描述的自修复技术之前,等待区块链api206完全运行。因此,自修复模块47防止尝试执行与区块链相关的自修复功能,诸如自动同步。

共识引擎210可以包括有助于将数据写入分布式分类账42的功能。例如,在某些情况下,当节点10作为主节点(例如,参与者节点10之一)进行操作时,节点10可以使用共识引擎210来判定何时合并来自相应节点的共享参数、写入其状态212因将共享参数合并到分布式分类账42而改变的指示和/或执行其他动作。在一些实例中,作为参与者节点(无论是否为主节点),节点10可以使用共识引擎210来执行共识判定,诸如是否登记节点来参与机器学习迭代。这样,在数据被写入分布式分类账之后,与某些判定有关的共识可以被达成。

在一些实现方式中,打包和部署程序220可以将模型44打包并部署为容器化对象。例如但不限于,打包和部署程序220可以使用docker平台来生成包括模型44的docker文件。也可以使用其他容器化平台。以这种方式,节点10处的各种应用可以以独立于平台的方式来访问并使用模型44。这样,模型不仅可以基于来自区块链网络中节点的集合参数来构建,而且可以被打包和部署在各种环境中。

现在参考图4来描述模型构建迭代的更多细节,图4图示了根据本文所述的系统和方法的一个实施例的使用区块链的模型构建迭代的过程400的示例。如图4所示,操作402-412和418适用于参与者节点,而操作414、416和420适用于主节点。

在操作402中,每个参与者节点可以登记以参与模型构建迭代。在一个实现方式中,智能合约(如图3所示)可以对用于登记节点来参与模型构建迭代的规则进行编码。规则可以指定所需的凭证、有效状态信息和/或其他登记先决条件。所需的凭证可以对允许哪些节点参与模型构建迭代施加权限。在这些示例中,区块链网络可以被配置为其中仅授权节点被允许参与迭代的私有区块链。

授权信息和期望的凭证可以被编码在智能合约内或者对区块链网络上的节点可用的其他存储信息内。有效状态信息可以禁止呈现出某些受限语义状态的节点参与迭代。受限语义状态可以包括例如具有未初始化的参数值、是在迭代开始之后(与区块链网络中的其他参与者节点)请求登记到迭代中的新节点、失效节点或重启节点和/或可能污染或以其他方式破坏模型构建迭代的其他状态。失效或重启节点可以被置于迭代保持状态,使得它们可以诸如在迭代完成之后,将其本地参数同步到最新值。

一旦参与者节点已被登记,区块链网络就可以记录该参与者节点的身份,从而知道用于迭代的所有参与者节点的标识。这样的记录可以经由分布式分类账中的条目来进行。当做出战略判定时,参与者节点的身份可以由共识引擎(如图3所示)来使用。

前述登记特征可以使得模型构建活动具有容错性,因为模型构建网络(即,区块链网络)的拓扑在迭代级别上确定。这允许在其中网络的形状和大小可以动态变化的现实环境(例如,自动驾驶汽车)中进行部署。

在操作404中,参与者节点中的每一个可以在其本地训练数据集上执行本地模型训练。例如,应用层(图3所示)可以与机器学习框架(图3所示)对接,以在其本地训练数据集上本地训练模型。在某些情况下,由于隐私限制,操作404可能涉及有偏数据环境。因此,在操作404期间,用于在节点处本地训练模型的完整数据集可以包括一些私有数据,从而使得完整数据集在其他参与者节点处不可访问而不会损害其私密性。模型构建过程400采用参数共享技术,参数共享技术使得能够在协作模型构建过程400中保留数据的私密性。附加地,参数共享允许使用区块链网络中其他参与者节点执行的学习来更新节点的本地模型。因此,参数共享技术在故障场景中可能是有利的,在故障场景中节点可能宕机并且无法参与若干模型构建迭代。例如,在自修复领域中,从故障恢复的节点可以使用来自其对等方的共享训练参数(或来自主节点的合并训练参数)来更新其本地模型,而不是应用其可能失效的本地数据。如参考图5更详细地讨论的,参数共享可以被用作用于使得自修复节点与区块链网络重新同步的纠正动作。

在操作406中,参与者节点中的每一个可以基于本地训练来生成本地参数并且可以将它们保持为准备好与区块链网络共享来实现参数共享。例如,在本地训练周期完成之后,本地参数可以被序列化为紧凑包,紧凑包可以以类似于图2a中所示的共享参数的方式来与区块链网络的其余部分共享。通过使得共享参数可用于借助对等或其他数据传输协议而将其下载和/或主动上传,可以促进这样的共享。在一些实施例中,智能合约可以对节点进行通信或以其他方式共享其共享参数的规则进行编码。

在操作408中,每个参与者节点可以利用区块链网络签入来进行协调。例如,每个参与者节点可以向区块链网络中的其他参与者节点发信号,表明它已准备好共享其共享参数。具体地,每个参与者节点可以使用例如区块链api(图3所示)来写入区块链事务并且经由消息传递接口和区块链api来广播区块链事务。这样的区块链事务可以指示参与者节点的状态(例如,它准备好共享其本地参数)、用于获得共享参数的机制、获得共享参数的位置和/或传达节点的准备状态或标识如何从其他参与者节点获得共享参数的其他信息。事务可以在从中选择事务的事务队列或事务池中排队。在一些示例中,这些事务可以被添加时间戳并且以先进先出(“fifo”)的方式从中选择。

在操作410中,参与者节点可以共同选择用于迭代的主节点。例如,智能合约可以对用于选择主节点的规则进行编码。这样的规则可以指示参与者节点应如何投票选择主节点(对于其中节点投票选择主节点的实现方式)。这些规则可以指定在主节点应被选择之前,一定数目和/或百分比的参与者节点应准备好共享其共享参数,从而发起迭代的共享阶段。然而,应注意,主节点的选择可以在参与者节点10准备好共享其共享参数之前发生。例如,要登记到迭代中的第一节点可以被选择作为主节点。这样,主节点本身的选择(或挑选)可以不触发转变到共享阶段。相反,智能合约的规则可以指定共享阶段(参考图2a被称为阶段1)应何时被发起,从而确保以确定的方式发生该转变。

除了要登记的第一节点之外或者作为要登记的第一节点的附加,主节点可以以多种方式来选择。例如,特定节点可以被预定义为主节点。当迭代被发起时,特定节点可以成为主节点。在这些实例中的一些实例中,在特定节点对于给定迭代不可用的情况下,一个或多个备用节点可以被预定义来充当主节点。在其他示例中,节点可以声明它不应是主节点。这在节点具有不同计算能力的异构计算环境中可能是有利的。一个示例是在无人机网络中,无人机可以声明它不应是主节点,而命令中心可以被声明为主节点。在其他示例中,投票机制可以被用于选择主节点。这样的投票可以由智能合约中编码的规则来支配。这在诸如自主汽车网络中,节点具有相似计算能力的同质计算环境中可能是有利的。选择主节点的其他方式可以根据特定需要并且基于本文的公开内容来使用。

在操作412中,不是主节点的参与者节点可以周期性地检查主节点的状态,以基于由参与者节点本地生成的共享参数来监视主节点是否已完成合并参数的生成。例如,每个参与者节点可以检查其分布式分类账的本地副本,在本地副本内,主节点将在一个或多个块上记录其用于迭代的状态。

在操作414中,主节点可以进入共享阶段,在共享阶段中,一些或所有参与者节点准备共享其共享参数。例如,主节点可以从参与者节点获得共享参数,参与者节点的状态指示它们已准备好进行共享。使用区块链api,主节点可以标识(1)指示参与者节点准备好共享其共享参数并且(2)未在分布式分类账中使用信号来通知的事务。在某些情况下,事务队列中的事务尚未被写入分布式分类账。一旦被写入分类账,主节点(借助区块链api)就可以从事务队列中删除事务或者以其他方式将事务标记为已确认。主节点可以标识提交了共享参数的对应参与者节点并且获得共享参数(其位置可以在事务中编码)。主节点可以将来自参与者节点的共享参数进行组合,以基于经组合的共享参数来生成用于迭代的合并参数(图2b中所示)。应注意,主节点可能已从其本地训练数据集自身生成了本地参数,在该情况下,主节点也可以将其本地参数与所获得的共享参数进行组合。因此,在分布式过程中,主节点可以将来自整个区块链网络中的每个参与者节点的所有单独学习进行组合。例如,操作414可以被描述为通过合并共享参数,从在每个参与者节点处的训练本地模型中编译所学习的模式。如上所述,在操作414处,主节点可以使用来自训练模型的共享参数,而不是使用用于构建模型的原始数据来聚合分布式学习。在一个实现方式中,主节点可以例如使用区块链api,将事务写入为分布式分类账上的块。

在操作416中,主节点可以发信号通知组合完成。例如,主节点可以传输指示其状态的区块链事务(区块链事务将本地参数组合为最终参数)。区块链事务还可以指示在何处和/或如何获得用于迭代的合并参数。在某些情况下,区块链事务可以被写入分布式分类账。

在操作418中,每个参与者节点可以获得合并参数并且将其应用到其本地模型上。例如,参与者节点可以检查其分布式分类账的本地副本,以确定主节点的状态指示合并参数可用。参与者节点然后可以获得合并参数。应当理解,参与者节点能够获得并且随后应用与合并参数相关联的组合学习(源自本地模型),使得其排除了发射和/或接收完整训练数据集(对应于每个本地模型)的需要。此外,处于参与者节点本地并且可以是其完整训练数据集的一部分的任何私有数据可以保持受保护状态。

在操作420中,主节点可以发信号通知迭代完成,并且可以放弃作为用于迭代的主节点的控制。这样的指示可以被编码在分布式分类账中,以供其他参与者节点检测并转变到下一状态(下一状态可以是将模型应用于其特定实现方式和/或准备进行另一迭代)。

通过将状态记录在分布式分类账上并记录相关功能,当可用于参与的参与者节点的数目不断变化时(诸如无论因为节点是被导通/关断、与网络连接连接/断开连接和/或节点可用性可能改变的其他原因,节点在线和离线时),区块链网络可以有效地管理节点重启和动态缩放。

图5图示了在去中心化机器学习期间,可以以提供容错的方式来执行自修复的节点处的过程500的示例。在一些情况下,过程500可以至少在如先前参考图4所描述的第一模型构建迭代之后发生。过程500被图示为由处理器501执行的一系列可执行操作,处理器501可以是可能已经历了间歇性故障(诸如连接中断)的节点(如图1所示)的处理器。节点可以执行自修复,以将自身重新集成到本文所述的去中心化模型构建过程中。处理器501执行过程500的操作,从而实现所公开的自修复技术。在节点已从故障状况恢复之后,过程500可以由节点来自动执行。例如,参考图1中的连接中断示例,一旦节点确定无线连接已重新获得,自修复过程500就可以开始。

在操作502中,节点可以生成指示其“不同步”的区块链事务。“不同步”的区块链事务可以被记录在分布式分类账中,以向区块链网络中的其他节点指示自修复节点尚未准备好为模型构建迭代做出贡献和/或充当参与者节点。在某些情况下,“不同步”的区块链事务由智能合约(如图3所示)来实现。在某些情况下,操作502的“不同步”区块链事务可以由主节点获得,用作自修复节点可能不具有与ml的最新迭代同步的模型的指示。因此,响应于操作502处的“不同步”的区块链事务,主节点可以将自修复节点排除在参与训练ml模型的后续迭代之外。排除主节点使得自修复节点有效地“等待”(例如,等待完整的迭代或时期),从而阻止了自修复节点处的任何训练参数被应用于迭代的模型构建。

在某些情况下,自修复节点可以在操作502之前执行一个或多个初步动作。例如,自修复节点可以确保作为初始设置过程的一部分而公开的所有服务正常运行。如果服务无法正常运行,则自修复节点被使得自动执行另一重启。附加地,自修复节点可以确保所有安全属性正确并且与初始设置过程中公开的数据对准。

在操作504中,自修复节点可以从分布式分类账获得全局ml状态。获得全局ml状态可以作为自修复的同步方面的一部分来执行,自修复的同步方面确定了当前本地ml状态相对于区块链网络中其余参与者节点是否失效。中断可能导致自修复节点失效或过时的学习数据(例如,训练参数),如果过时的学习数据被引入模型构建过程,则可能将系统的整体状态降级。知道全局ml状态的自修复节点允许节点将其当前状态与系统的当前状态随后自动同步。在一些实施例中,自修复节点还从分布式分类账获得其本地ml状态。分布式分类账维护区块链网络上所有节点的状态数据是区块链的特性。因此,保持自修复节点的本地ml状态的数据结构也将在最新检查点处,也将在分布式分类账中。根据需要,例如如果自修复节点丢失了其所有本地化的ml数据,则在操作504中,本地ml状态也可以从分布式分类账获得。

此外,操作504可以包括将所获得的全局ml状态与本地ml状态进行比较,以确定本地ml状态是否与全局状态一致。在比较指示本地ml状态和全局ml状态之间存在一致性的情况下,自修复节点可以继续进行正常操作。这可能是由于自修复节点重启的速度足够快,以致在中断期间不会丢失对ml数据的更新。因此,在该场景中,即使出现故障,自修复节点仍保持其与系统的同步。

在操作506中,自修复节点使用一个或多个纠正动作来恢复节点处的本地ml状态。在操作504处的比较可以确定本地ml状态与全局ml状态不一致。因此,自修复节点可以知道相对于由区块链网络上的另一参与者节点执行的最新模型构建迭代,其当前ml状态失效或过时。结果,自修复节点可以自动执行纠正动作来将其本地ml状态恢复到全局ml状态的点。操作506可以包括执行多个纠正动作,诸如梯度共享、参数共享等,应理解,允许使用区块链网络中实现与全局ml状态一致的对等节点的状态来恢复本地ml状态的任何方法、过程或算法可以被使用。在梯度共享的情况下,自修复节点可以从至少一个健康的对等方获取最新的ml检查点,并且将其应用于本地模型更新。参数共享可以在操作506中以以上参考图4描述的方式来执行。

在操作508中,在操作506的纠正动作之后,自修复节点可以确保本地ml状态与全局ml状态的一致性。在一些情况下,操作508可以涉及执行现在通过纠正动作更新的本地ml状态与全局ml状态的另一比较。

在操作510中,节点可以生成指示其“同步”的区块链事务。“同步”的区块链事务可以被记录在分布式分类账中并且向区块链网络中的其他节点(包括主节点)指示自修复节点与区块链网络中的其他节点同步并且准备好为模型构建迭代做出贡献和/或充当参与者节点。因此,自修复节点已成功完成自动同步并且应处于与系统的其余部分一致的状态。节点可以使用“同步”区块链事务来识别自修复节点已被重新集成到系统中并且可以参与去中心化模型构建过程。

在操作512中,自修复节点可以重新登记,以能够参与下一模型构建迭代。在一些实施例中,在模型构建中充当参与者节点之前,自修复节点被要求等待至少一个完整的迭代或时期。在操作512处的登记可以以与如上所述的登记类似的方式来执行并且为了简洁起见没有详细讨论。

图6描绘了示例计算机系统600的框图,本文所述的自修复实施例可以被实现在示例计算机系统600中。此外,应当理解,各种指令被图示为共置于单个处理单元(诸如节点(如图1所示))内,但是在(多个)处理器包括多个处理单元的实现方式中,一个或多个指令可以在其他指令的远程被执行。

计算机系统600包括总线602或者用于通信信息的其他通信机制、与总线602耦合来处理信息的一个或多个硬件处理器604。(多个)硬件处理器604可以是例如一个或多个通用微处理器。

计算机系统600还包括主存储器606,诸如随机存取存储器(ram)、高速缓存和/或其他动态存储设备,主存储器606被耦合到总线602来存储待由处理器604执行的信息和指令。主存储器606还可以被用于在执行待由处理器604执行的指令期间,存储临时变量或其他中间信息。这样的指令在被存储在处理器604可访问的存储介质中时,将计算机系统600转换为自定义来执行指令中所指定的操作的专用机器。

计算机系统600进一步包括与总线602耦合的只读存储器(rom)608或其他静态存储设备,用于存储处理器604的静态信息和指令。存储设备610,诸如磁盘、光盘或usb拇指驱动装置(闪存驱动装置)等,被提供并且被耦合到总线602来存储信息和指令。

计算机系统600可以经由总线602而被耦合至显示器612,诸如液晶显示器(lcd)(或触摸屏),用于向计算机用户显示信息。包括字母数字键和其他键的输入设备614被耦合到总线602,用于将信息和命令选择通信到处理器604。另一类型的用户输入设备是光标控件616,诸如鼠标、跟踪球或光标方向键,用于将方向信息和命令选择通信到处理器604并且控制显示器612上的光标移动。在一些实施例中,与光标控件相同的方向信息和命令选择可以通过在没有光标的情况下,在触摸屏上接收触摸来实现。

计算系统600可以包括用于实现gui的用户接口模块,gui可以作为由(多个)计算设备执行的可执行软件代码而被存储在大容量存储设备中。该模块和其他模块可以包括例如组件(诸如软件组件、面向对象的软件组件、类组件和任务组件)、进程、功能、属性、过程、子例程、程序代码段、驱动程序、固件、微代码、电路、数据、数据库、数据结构、表、数组和变量。

通常,如本文所使用的词语“组件”、“引擎”、“系统”、“数据库”、“数据存储库”等可以指代硬件或固件中体现的逻辑或者使用编程语言(诸如例如java、c或c++)编写的可能具有入口和出口点的软件指令集合。软件组件可以被编译并链接到可执行程序中、安装在动态链接库中或者可以使用诸如例如basic、perl或python的解释性编程语言来编写。可以理解,软件组件可以从其他组件或从它们自身调用,和/或可以响应于所检测的事件或中断而被调用。被配置为在计算设备上执行的软件组件可以被提供在计算机可读介质(诸如光盘、数字视频光盘、闪存驱动装置、磁盘或任何其他有形介质)上,或者以数字下载的形式来提供(并且可以最初以在执行之前需要安装、解压缩或解密的压缩格式或可安装格式来存储)。这样的软件代码可以被部分地或全部地存储在执行计算设备的存储器设备上,以由计算设备执行。软件指令可以被嵌入在诸如eprom的固件中。还将理解,硬件组件可以包括连接的逻辑单元,诸如门和触发器,和/或可以包括可编程单元,诸如可编程门阵列或处理器。

计算机系统600可以使用自定义的硬连线逻辑、一个或多个asic或fpga、与计算机系统组合来使得计算机系统600成为专用机器或将计算机系统600编程为专用机器的固件和/或程序逻辑来实现本文中描述的技术。根据一个实施例,本文的技术由计算机系统600响应于(多个)处理器604执行主存储器606中包含的一个或多个指令的一个或多个序列来执行。这样的指令可以从诸如存储设备610的另一存储介质读取到主存储器606中。执行主存储器606中包含的指令序列使得(多个)处理器604执行本文所述的过程步骤。在备选实施例中,硬连线电路可以被用来代替软件指令或与软件指令进行组合。

如本文所使用的,术语“非暂态介质”和类似术语指代存储使得机器以特定方式操作的数据和/或指令的任何介质。这样的非暂态介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如存储设备610。易失性介质包括动态存储器,诸如主存储器606。非暂态介质的通用形式包括例如软盘、柔性盘、硬盘、固态驱动装置、磁带或任何其他磁数据存储介质、cd-rom、任何其他光学数据存储介质、具有孔图案的任何物理介质、ram、prom和eprom、flash-eprom、nvram、任何其他存储器芯片或盒式磁带以及它们的联网版本。

非暂态介质不同于传输介质但是可以与传输介质结合使用。传输介质参与非暂态介质之间的信息传递。例如,传输介质包括同轴电缆、铜线和光纤,包括构成总线602的导线。传输介质还可以采用声波或光波的形式,诸如在无线电波和红外数据通信期间生成的声波或光波。

计算机系统600还包括与总线602耦合的通信接口618。网络接口618提供耦合到与一个或多个本地网络连接的一个或多个网络链路的双向数据通信。例如,通信接口618可以是集成服务数字网络(isdn)卡、电缆调制解调器、卫星调制解调器或用于提供到对应类型的电话线的数据通信连接的调制解调器。作为另一示例,网络接口618可以是局域网(lam)卡,用于提供与兼容lam(或与wan通信的wan组件)的数据通信连接。无线链路也可以被实现。在任何这样的实现方式中,网络接口618发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。

网络链路通常借助一个或多个网络来提供到其他数据设备的数据通信。例如,网络链路可以借助本地网络来提供到主机计算机或由互联网服务提供商(isp)运营的数据设备的连接。isp进而借助现在通常被称为“互联网”的全球分组数据通信网络来提供数据通信服务。本地网络和互联网均使用承载数字数据流的电信号、电磁信号或光信号。借助各种网络的信号以及在网络链路上并且借助通信接口618的信号是传输介质的示例形式,这些信号携带去往和来自计算机系统600的数字数据。

计算机系统600可以借助(多个)网络、网络链路和通信接口618来发送消息并接收数据,数据包括程序代码。在互联网的示例中,服务器可以借助互联网、isp、本地网络和通信接口618来传输应用所请求的代码。

所接收的代码可以在被接收时由处理器604执行,和/或被存储在存储设备610或其他非易失性存储装置中,以供以后执行。

前面各节中描述的每个过程、方法和算法可以体现在由一个或多个计算机系统或包括计算机硬件的计算机处理器执行的代码组件中,并且可以完全地或部分地被代码组件自动化。一个或多个计算机系统或计算机处理器还可以操作来支持“云计算”环境中或作为“软件即服务”(saas)的相关操作的性能。过程和算法可以在专用电路中部分或全部实现。以上描述的各种特征和过程可以彼此独立地使用,或者可以以各种方式组合。不同的组合和子组合旨在落入本公开的范围内,并且某些方法或过程框在某些实现方式中可以被省略。本文所述的方法和过程也不限于任何特定的顺序,并且与之相关的框或状态可以以适当的其他顺序来执行,或者可以并行地执行,或者以某种其他方式来执行。框或状态可以被添加到所公开的示例实施例中或从中删除。某些操作或过程的执行可以分布在计算机系统或计算机处理器之间,不仅驻留在单个计算机内,而且可以跨多个计算机部署。

如本文所使用的,电路可以利用任何形式的硬件、软件或其组合来实现。例如,一个或多个处理器、控制器、asic、pla、pal、cpld、fpga、逻辑组件、软件例程或其他机制可以被实现来构成电路。在实现方式中,本文描述的各种电路可以被实现为分立电路,或者所描述的功能和特征可以在一个或多个电路之间部分或全部共享。即使各种功能特征或元件可以被单独描述或要求保护为单独的电路,这些特征和功能也可以在一个或多个通用电路之间共享,并且这样的描述将不需要或暗示需要单独的电路来实现这样的特征或功能。在电路使用软件来整体或部分地实现的情况下,这样的软件可以被实现为与能够执行相对于此描述的功能的计算或处理系统(诸如计算机系统600)一起操作。

如本文中所使用的,术语“或者”可以以包括性或排他性的意义来解释。而且,单数形式的资源、操作或结构的描述不应被理解为排除复数。除非另外明确说明或在所使用的上下文中以其他方式理解,否则条件性语言(诸如“可以”、“可能”(can/could/might/may)等)通常旨在传达某些实施例包括、而其他实施例不包括某些特征、元素和/或步骤。

除非另有明确说明,否则本文档中使用的术语和短语及其变型应被解释为开放式的,而不是限制性的。形容词(诸如“常规”、“传统”、“标称”、“标准”、“已知”和类似含义的术语)不应被解释为将所描述的项限制到给定时间段或给定时间段可用的项,而是应理解为涵盖现在或将来可用或已知的常规、传统、标称或标准技术。在某些情况下,出现宽泛的词语和短语(诸如,“一个或多个”、“至少”、“但不限于”或其他类似的短语)不应被理解为意指在这些宽泛的词语和短语不存在的情况下意图或要求更窄的情况。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1