使用分布式系统训练分类器模型时的容错恢复系统和方法与流程

文档序号:18516761发布日期:2019-08-24 09:30阅读:182来源:国知局
使用分布式系统训练分类器模型时的容错恢复系统和方法与流程
本发明在其一些实施例中涉及使用分布式系统训练分类器模型的系统和方法,更具体地但非排他地,涉及使用分布式系统训练分类器模型时的容错恢复系统和方法。在机器学习中,会使用训练数据集训练分类器模型。所述分类器模型由一组参数进行参数化。选择所述分类器模型,根据所述训练数据集来调整所述参数。从所述训练数据集计算出模型更新,并将其添加到模型中。使用计算出的模型更新,模型可以迭代地更新。使用分布式计算系统可以加速大规模机器学习问题的迭代训练。然而,当所述分布式计算系统的一个或多个处理器发生故障时,利用现有机制进行恢复会涉及较为复杂的计算,处理和/或数据存储资源成本高,并且较为缓慢和/或一般效率较低。技术实现要素:本发明旨在提供一种使用分布式系统训练分类器的装置、系统、计算机程序产品和方法。上述及其它目的通过独立权利要求的特征来实现。根据从属权利要求、说明书以及附图,进一步的实现方式是显而易见的。根据第一方面,提供了一种训练分类器的系统,包括:机器学习(machinelearning,ml)工作节点,其包括至少一个处理器,用于计算经一组模型参数加以参数化的所述分类器模型的模型更新;参数服务器(parameterserver,ps),其包括至少一个处理器,所述参数服务器用于向每个ml工作节点提供所述分类器模型,基于每个ml工作节点所提供的分类器模型来接收相应的模型更新,并使用每个接收到的模型更新来迭代地更新所述分类器模型;梯度数据集,每个梯度数据集都与相应的ml工作节点相关联,其中,每个梯度数据集内存储可以指示由相应ml工作节点计算出的相应模型更新的模型更新标识(model-update-identification,delta-m-id),并存储与每个相应delta-m-id相关联的模型更新;全局数据集,其存储:与每个模型更新相关联的delta-m-id,所述delta-m-id在每次相应迭代中不被ps使用来更新所述分类器模型;ml工作节点标识(ml-worker-id),其可以计算相应迭代中的与delta-m-id相关联的模型更新;在ps中标记新分类器模型的模型版本(model-version),其是通过将所述模型更新与ps中的先前的分类器模型合并而计算得出的;模型下载数据集,其存储每一次所述分类器模型从ps到某个特定ml工作节点的传输相关联的ml-worker-id和model-version。可选地,所述ps可以包含多个用于并行处理的处理器。根据第二方面,提供了一种通过机器学习(machinelearning,简称ml)工作节点训练分类器的方法,包括如下步骤:通过参数服务器(parameterserver,简称ps)向每个所述ml工作节点提供分类器模型;通过参数服务器(parameterserver,简称ps)接收来自每个所述ml工作节点的模型更新;基于每个接收的模型更新迭代地更新所述分类器模型;存储指示由相应ml工作节点计算出的相应模型更新的模型更新标识(delta-m-id);存储与每个相应的delta-m-id相关联的相应模型更新;并且存储ml工作节点标识(ml-worker-id),其计算相应迭代的与delta-m-id相关联的模型更新,以及存储在ps中标记新分类器模型的模型版本(model-version),其是通过将所述模型更新与ps中的先前的分类器模型合并而计算得出的。第一方面所述的系统容错机制和第二方面所述的方法,与其他容错方法相比,显著地减少了提供容错的在线开销。本文描述的容错机制,与其他容错方法相比,实现方法较为简单,且占用较少的数据存储和/或处理器资源。本文描述的容错机制,与其他容错方法相比,实现了较短的恢复时间。本文描述的容错机制,与其他容错方法相比,可以恢复到模型的最新版本。第一方面所述的系统容错机制和第二方面所述的方法,提供了恢复到更新模型的较快方法,这种方法使用更少的存储和/或处理资源。与基于快照的方法和/或其他方法(其将整个模型存储在数据存储设备中,这一过程较为缓慢)相反,基于本文描述的故障机制(其通过使用模型更新进行恢复)的恢复可以从ps设备的主存储器(例如,节点)和/或从ml工作节点设备的主存储器执行,这要快得多。与需要大量和/或复杂簿记的其他系统和/或方法(例如,快照和分布式哈希表)相比,第一方面所述的系统容错机制和第二方面所述的方法使用相对少量的内存簿记就可实现,且运行时开销非常小。在根据第一或第二方面的所述系统或方法的第一种可能实现方式中,当第一个ml工作节点计算第一个模型更新时,第一模型更新和与其相关联的第一delta-m-id被存储到与第一ml工作节点相关联的第一梯度数据集中;当ps通过合并第一模型更新与分类器第一模型来创建分类器第二模型时,以下内容被存储到全局数据集中:第一模型更新的第一delta-m-id,第一ml工作节点ml-worker-id,以及分类器第二模型的第二model-version;当第二ml工作节点收到来自ps的分类器第二模型时,分类器第二模型的第二model-version和第二ml工作节点的第二ml-worker-id被存储到模型下载数据集中。根据第一或第二方面或根据第一或第二方面的任一种前述的实现方式,在所述的系统或方法的第二种可能实现方式中,所述系统还包括与ps相关联的控制器计算设备,其中,所述控制器用于,或者所述方法还包括由所述控制器执行的以下动作:接收ps的至少一个处理器的故障指示,访问模型下载数据集以识别下载分类器第二模型的第二ml-worker的第二model-version和关联第二ml-worker-id,其中,第二model-version表示模型下载数据集中位于第一model-version后面的最新条目;使用从模型下载数据集中获得的第二ml-worker-id来访问第二ml-worker,以及使用从模型下载数据集中获得的第二model-version来检索分类器第二模型;通过分类器第二模型来初始化ps。根据第一或第二方面的第二种实现方式,在所述系统或方法的第三种可能的实现方式中,所述控制器用于:访问全局数据集以检索第三delta-m-id和与第三model-version相关联的第三ml-worker-id,其中,第三model-version表示第二model-version之后全局数据集中的最新条目;根据检索到的第三ml-worker-id访问第三ml-worker,从而根据第三delta-m-id检索第三模型更新;指示ps将第三模型更新与第二模型合并,以恢复分类器第三模型至发生故障前的对应的分类器第三模型。根据第一或第二方面的第二或第三种实现方式,在所述系统或方法的第四种可能的实现方式中,所述控制器用于:接收第二ml-worker的至少一个处理器的故障指示;访问模型下载数据集以识别已载有分类器第一模型的第一model-version和第一ml-worker的第一ml-worker-id,其中,第一model-version表示模型下载数据集中位于第二model-version之前的条目;使用从模型下载数据集中获得的第一ml-worker-id来访问第一ml-worker,以及使用从模型下载数据集中获得的第一model-version来检索分类器第一模型;通过分类器第一模型来初始化ps。根据第一或第二方面的第四种实现方式,在所述系统或方法的第五种可能的实现方式中,所述控制器用于:访问全局数据集以检索第二和第三delta-m-id以及与第二和第三model-version相关联的第二和第三ml-worker-id,其中,第二和第三model-version表示全局数据集中在第一model-version之后的条目;根据检索到的第二和第三ml-worker-id访问第二和第三ml-worker,从而根据第二和第三delta-m-id检索第二和第三模型更新;指示ps将第二和第三模型更新与分类器第一模型合并,从而恢复分类器第三模型至ps至少一个处理器发生故障之前对应的分类器第三模型。根据第一或第二方面或根据第一或第二方面的任一种前述的实现方式,在所述的系统或方法的第六种可能实现方式中,选择模型下载数据集中的model-version和关联ml-worker-id的条目数量时,使得所有ml-worker(其对应ml-worker-id存储在模型下载数据集中)在恢复过程中失败的概率小于预定义的要求。根据第一或第二方面的第六种实现方式,在所述系统或方法的第七种可能的实现方式中,所述控制器与模型下载数据集相关联,且所述控制器用于:当模型下载数据集中添加并存储model-version和关联ml-worker-id新条目时,删除存储在模型下载数据集中的model-version和关联ml-worker-id旧条目,以保证条目数量不变;从全局数据集中删除model-version值相当于模型下载数据集中已删除的最旧条目中model-version早期值或相等值的条目;指示删除与梯度数据集关联的条目,所述条目包含的delta-m-id值为全局数据集中已删除的对应条目中出现的值。根据第一或第二方面或根据第一或第二方面的任一种前述的实现方式,在所述的系统或方法的第八种可能实现方式中,当ml-worker具有相似的计算性能特征时,在与每个ml-worker相关联的每个梯度数据集中存储delta-m-id和相关模型更新的条目的数量最多为2。根据第一或第二方面或根据第一或第二方面的任一种前述的实现方式,在所述的系统或方法的第九种可能实现方式中,选择模型下载数据集中的条目数n,使得其ml-worker-id存储在模型下载数据集中的所有n个ml工作节点在恢复进程中失败的概率可忽略不计。根据第一或第二方面或根据第一或第二方面的任一种前述的实现方式,在所述的系统或方法的第十种可能实现方式中,每个模型更新中的全连接层的权重可以通过两个向量相乘实现。根据第一或第二方面或根据第一或第二方面的任一种前述的实现方式,在所述的系统或方法的第十一种可能实现方式中,ps通过一种分布式系统来实现,该分布式系统包括计算设备,且每个计算设备包括至少一个处理单元。根据第一或第二方面或根据第一或第二方面的任一种前述的实现方式,在所述的系统或方法的第十二种可能实现方式中,至少两个ml工作节点通过不同的计算设备实现。在根据第二方面的所述方法的第十三种可能实现方式中,存储在计算机可读介质上的计算机程序,在由一个或多个计算机的一个或多个处理器执行时,运行前述方法。除非另有定义,否则本文所使用的所有技术和/或科学术语的含义与本发明所属领域的普通技术人员所公知的含义相同。与本文所描述的方法和材料类似或者相同的方法和材料可以用于本发明实施例的实践或测试,下文描述示例性的方法和/或材料。若存在冲突,则以包括定义在内的专利说明书为准。另外,材料、方法以及示例都只是用于说明,并非必要限定。附图说明此处仅作为示例,结合附图描述了本发明的一些实施例。现在具体结合附图,需要强调的是所示的项目作为示例,为了说明性地讨论本发明的实施例。这样,根据附图说明,如何实践本发明实施例对本领域技术人员而言是显而易见的。在附图中:图1为本发明一些实施例提供的描述ps操作的示意图;图2a-2c为本发明一些实施例提供的描述其他容错机制的示意图,这些容错机制比本文所述的容错机制更慢、更复杂且/或需要更多资源;图3为根据本发明一些实施例提供的在训练分类器模型期间向参数服务器提供容错的系统的组件的框图;图4为根据本发明一些实施例提供的用以恢复ps创建的分类器模型的容错机制实现方法的流程图;图5为根据本发明一些实施例提供的故障恢复方法的流程图;图6为根据本发明一些实施例提供的处理器故障和/或ml-worker节点故障恢复方法的流程图;图7为根据本发明一些实施例提供的用于描述图8-10数据流的组件的示意图;图8为根据本发明一些实施例提供的描述ml工作节点计算模型更新时的数据流的示意图;图9为根据本发明一些实施例提供的描述ml工作节点(图8)在计算模型更新时发生故障的恢复机制的数据流的示意图;图10为根据本发明一些实施例,描述参考图3所述、并使用apachesparktm的系统示例性实现方式的示意图;图11为根据本发明一些实施例,描述参考图10所述的示例性实现方式的示意图,包括相应的梯度数据集、全局数据集和模型下载表;图12为根据本发明一些实施例,用于帮助解释分析以确定在每个梯度数据集中实现多少条目的示意图。具体实施方式本发明在其一些实施例中涉及使用分布式系统训练分类器模型的系统和方法,更具体地但非排他地,涉及使用分布式系统训练分类器模型的容错系统和方法。本发明一些实施例的一方面涉及一种向采用一组模型参数参数化的分类器模型提供容错能力的系统、装置和/或方法(例如,由一个或多个处理器执行的代码指令),所述分类器模型的参数存储在以分布式系统实施的参数服务器中。当ps的一个或多个处理器发生故障时,容错机制在训练分类器模型时可以有效地恢复模型的最新版本。多机器学习(machinelearning,简称ml)工作节点实现为用于计算模型更新的计算设备(例如,单个或分布式),在ps中用于迭代地更新分类器模型。可选地,可由控制器计算设备,基于梯度数据集、全局数据集和模型下载数据集存储的数据,来执行容错机制。所述容错机制,和其他容错方法相比,显著地减少了提供容错的在线开销。本文描述的容错机制,与其他容错方法相比,实现方法较为简单,且占用较少的数据存储和/或处理器资源。本文描述的容错机制,与其他容错方法相比,实现了较短的恢复时间。本文描述的容错机制,与其他容错方法相比,更易于恢复到模型的最新版本。每个特定ml工作节点与梯度数据集相关联,该梯度数据集内存储与每个计算模型更新相关联的模型更新标识(delta-m-id)。当第一ml工作节点计算第一模型更新时,第一模型更新和与第一模型更新相关联的第一delta-m-id存储在与第一ml工作节点相关联的第一梯度数据集中。全局数据集存储每个相应迭代中与ps使用的每个模型更新相关联的delta-m-id,用来更新分类器模型。全局数据集还存储ml工作节点标识(ml-worker-id),其计算相应迭代的delta-m-id相关联的模型更新,以及新分类器模型的模型版本(model-version)。model-version标记ps中分类器的新模型,其通过将模型更新与ps中的先前分类器模型合并来计算。当ps通过合并第一模型更新和分类器第一模型来创建分类器第二模型后,以下内容被存储到全局数据集中:第一模型更新的第一delta-m-id、第一ml工作节点的ml-worker-id和分类器第二模型的第二model-version。模型下载数据集存储与分类器模型从ps至某个特定ml工作节点每一次传输相关联的ml-worker-id和model-version。当第二ml工作节点从ps接收分类器第二模型时,分类器的第二模型的第二model-version和第二ml工作节点的第二ml-worker-id存储在模型下载数据集中。第三模型更新由第三ml-worker计算得出。第三ml工作节点在梯度表中得到更新,以存储计算出的第三模型更新和相关联的delta-m-id。第三ml工作节点向ps提供第三模型更新。新的条目被添加到全局数据集中,一起添加的还有第三模型更新的delta-m-id、第三ml-worker的id和第三model-version。当接收到ps的一个或多个处理器的故障的指示时,故障恢复被触发(例如,通过与ps相关联的控制器计算设备)。控制器访问模型下载数据集,从而识别第二model-version,以及已下载分类器第二模型的第二ml-worker的第二ml-worker-id。第二model-version表示模型下载数据集中的第一model-version之后的最新条目。控制器通过从模型下载数据集获得的第二ml-worker-id来访问第二ml-worker,并根据从模型下载数据集获得的第二model-version来检索分类器第二模型。使用分类器第二模型初始化ps。指示ps(例如,由控制器)将第三模型更新与第二模型合并,以恢复分类器第三模型至发生故障前的对应的分类器第三模型。控制器通过访问全局数据集,检索第三delta-m-id和与第三model-version相关联的第三ml-worker-id,来获得第三模型更新。第三model-version表示全局数据集中的第二model-version之后的最新条目。控制器根据检索到的第三ml-worker-id访问第三ml-worker,以根据第三delta-m-id检索第三模型更新。然后,控制器将第三模型更新与ps中的分类器模型合并,以恢复在ps的一个或多个处理器发生故障之前存储在ps中的分类器第三模型。在详细解释本发明的至少一个实施例之前,应当理解,本发明不必将其应用限于下面描述中阐述的和/或在附图和/或举例中说明的部件和/或方法的结构和布置的细节。本发明可以有其它实施例或可以采用各种方式实践或执行。本发明可以是系统、方法和/或计算机程序产品。所述计算机程序产品可以包括具有计算机可读程序指令的一个(或多个)计算机可读存储介质,所述指令用于使处理器执行本发明的各个方面。所述计算机可读存储介质可以是有形设备,所述有形设备可以保存和存储指令执行设备使用的指令。例如,所述计算机可读存储介质可以是但不限于电子存储设备、磁性存储设备、光存储设备、电磁存储设备、半导体存储设备或这几者的任意合适组合。可以从计算机可读存储介质中将此处描述的计算机可读程序指令下载到各个计算/处理设备上,或通过网络下载到外部计算机或外部存储设备上,所述网络如因特网、局域网、广域网和/或无线网。所述计算机可读程序指令可以完全在用户电脑上执行或部分在用户电脑上执行;或作为独立的软件包,部分在用户电脑上执行,且部分在远端电脑上执行,或完全在远端电脑或服务器上执行。在后一种场景中,远端电脑可以通过任何类型的网络与用户电脑连接,包括局域网(localareanetwork,简称lan)或广域网(wideareanetwork,简称wan),或者可以(例如,使用因特网服务提供方提供的因特网)在外部电脑上建立所述连接。在一些实施例中,包括可编程逻辑电路、现场可编程门阵列(fieldprogrammablegatearray,简称fpga)或可编程逻辑阵列(programmablelogicarray,简称pla)等的电子电路可以利用计算机可读程序指令的状态信息执行所述计算机可读程序指令以个性化所述电子电路,以便执行本发明的各方面。此处,结合本发明实施例的方法、装置(系统)以及计算机程序产品的流程图和/或框图描述本发明的各方面。应当理解,流程图和/或框图的每个框以及流程图和/或框图中的框的组合可以由计算机可读程序指令来实现。附图中的流程图和框图示出了根据本发明的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。此时,流程图或框图中的每个框都可以代表一个模块、分段或部分指令,所述部分指令包括一个或多个用于实现特定逻辑功能的可执行指令。在一些可选的实现方式中,框中指出的功能可以不按照图中的顺序实现。例如,事实上,连续展示的两个框可以大体上同时执行,或者有时候可以按照相反的顺序执行,这取决于所涉及的功能。还应注意的是,框图和/或流程图中每一个框以及框图和/或流程图中框的组合可以由基于专用硬件的系统执行,所述系统执行指定的功能或动作,或者执行专用硬件和计算机指令的组合。此处使用的术语“分类器模型”、“模型”和“模型参数”有时可以互换。模型参数可以可选地实现为结构化数字集或数字向量。此处使用的术语“分布式系统”和“(针对)并行处理(而准备的处理器,或设计的系统)”在指代ps的实现方式时可以互换。现在对术语“(分类器)模型”的含义进行简要讨论。分类器模型基于应用程序的域,例如,执行应用程序的代码指令可以接收数字图像以进行分析。代码指令确定哪些对象出现在来自预定的一组类的图像中,例如鸟、人脸和飞机。应用程序的代码指令使用分类器模型来接收数字图像并返回在图像内检测到的对象类。可以使用一种或多种机器学习方法来实现分类器模型,例如,支持向量机、线性回归、人工神经网络和统计分类器等。代码指令从图像中提取一组特征(例如,实现为特征向量和/或其他合适的数据结构),并使用分类器模型将特征向量映射到类。分类器模型可以通过一组参数来参数化。参数可以是数字。最初训练分类器模型以执行分类。可以根据目标应用程序调整组模型参数。使用训练集训练模型。例如,在图像分类中,训练集包括一组标记图像。在这样的训练集中,每个图像与正确描述图像内容的类配对。在训练阶段,分类器从训练集中分析图像及其正确的标签,从而调整模型参数。在应用程序中,使用受过训练的模型对与训练集中的图像来自相同域的图像进行分类。当模型本身和训练集很大时,在单个计算设备上训练模型需要数周甚至数月。为了加快训练过程,将训练过程映射到多个计算设备,例如,映射到可以包括从几台机器到数千台机器的集群。在这种映射中,模型和训练集可以分布在集群中的许多机器上。因此,可以在许多并行的集群机器中执行计算。此处使用的术语“参数服务器”(parameterserver,简称ps)指一组计算设备,其共同存储模型并使用模型更新来更新它。现参考图1,图1为本发明一些实施例提供的描述ps操作的示意图。为清楚起见,首先参考图1描述ps的操作过程,而没有提供本文所述的容错机制的组件(即,没有控制器、梯度数据集、全局数据集和模型下载数据集)。实现为布置用于并行处理的多个处理器104的参数服务器102存储和更新分类器模型(表示为m)。基于由机器学习工作节点108(实现为单个计算设备或分布式系统)从数据分片106计算出的模型更新(表示为δm)来执行训练过程。训练过程可以在数学上表示为m’=m-ηδm,其中η表示步长(例如,标量),其中模型沿着模型更新的矢量前进。训练过程迭代进行。每个ml工作节点108基于从ps102接收的m的副本计算相应的模型更新。根据数学关系m'=m-ηδm在ps102中更新模型。现参考图2a-2c,图2a-2c为本发明一些实施例提供的描述其他容错机制的示意图,这些容错机制比本文所述的容错机制更慢、更复杂且/或需要更多资源。图2a-b涉及一种被称为基于快照的方法的容错方法。图2a描述了无故障操作。箭头202表示时间的进度。块204表示模型更新的计算。块206表示存储在存储设备208中的模型的快照。块204和206迭代进行。图2b描述了表示为交叉210的故障恢复。在故障时,从存储设备208读取最后的模型快照并将其分配给ps。重新计算模型更新(表示为块212)以获得发生故障前的模型。基于快照的方法在每个快照期间存储整个模型的副本。由于模型的大小,存储所述快照需要相对较长的时间段,并且需要大量存储和/或处理资源来执行所述存储操作。由于执行所述存储操作需要时间和/或资源的原因,因此很少执行快照。因此,所述模型的实际存储副本,相比自上次快照以来计算出的大量更新,已经过时。故障发生时,从所述存储设备恢复的所述模型相对较旧,因为此后已经实施了多个更新。需要重新计算所述多个更新以获得丢失的模型版本,这需要大量的时间和处理器资源。相比之下,本文描述的故障恢复机制提供了恢复到更新模型的较快方法,这种方法使用更少的存储和/或处理资源。与基于快照的方法和/或其他方法(其将整个模型存储在数据存储设备中,这一过程较为缓慢)相反,基于本文描述的故障恢复机制(其通过使用模型更新进行恢复)的恢复可以从ps设备的主存储器(例如,节点)和/或从ml工作节点设备的主存储器执行,这要快得多。图2c涉及描述为基于复制的方法的容错机制,该方法基于具有密钥集的分布式哈希表。所述整个密钥被划分为密钥范围。每个分区被分配给一个ps计算设备。把密钥范围分配给ps计算设备的所述分配被布置成环形。分配给机器si的密钥范围在机器si-1处被复制。当ps的计算设备发生故障时,故障计算设备上的密钥范围的密钥范围副本被复制到其他计算设备上。由于所述复制机制的分布式哈希表的管理,所述基于复制的方法会产生运行时开销。由于实现复杂性高,需要大量存储和/或处理资源来执行,因此,这一过程需要相当长的时间。相比之下,本文描述的故障机制提供了恢复到更新模型的较快方法,这种方法使用更少的存储和/或处理资源。与需要大量和/或复杂簿记的其他方法(例如,快照和分布式哈希表)相比,本文描述的故障机制使用相对少量的内存簿记就可实现,且运行时开销非常小。现参考图3,图3为根据本发明一些实施例提供的在训练分类器模型期间向参数服务器302提供容错的系统300的组件的框图。同时参考图4,图4为根据本发明一些实施例提供的用以恢复ps创建的分类器模型的容错机制实现方法的流程图。ps302是一个专为代码指令并行执行而设计的分布式系统。ps302使用多个节点304来实现。ps302可以实现为单个单元(例如,方框),或者实现为多个互连单元(例如,彼此连接的多个方框)。每个节点304可以实现为,例如,单个处理器、用于并行处理的一组处理器、多核处理器、计算设备(即,至少有一个处理器和相关联的数据存储设备)和/或用作子分布式系统的一组计算设备。节点304可以是同构的或异构的。节点304可以是独立的计算组件,例如,网络服务器、web服务器、计算云、本地服务器、远程服务器、运行代码的客户终端、移动设备、固定设备、服务器、智能手机、笔记本电脑、平板电脑、可穿戴计算设备、眼镜计算设备、手表计算设备和台式计算机。处理器(节点304)被实现为,例如中央处理器(centralprocessingunit,简称cpu)、图形处理单元(graphicsprocessingunit,简称gpu)、现场可编程门阵列(fieldprogrammablegatearray,简称fpga)、数字信号处理器(digitalsignalprocessor,简称dsp)和专用集成电路(applicationspecificintegratedcircuit,简称asic)。ps302与数据存储设备306相关联,该数据存储设备306存储(或存储到另一存储设备的链接)分类器模型306a、全局数据集306b和模型下载数据集306c。数据(即,分类器模型306a、全局数据集306b和模型下载数据集306c中的一个或多个)可以存储在ps302的主存储器中(例如,在ps302的一个或多个节点304的主存储器中)。主存储器存储提供了快速实现容错机制的方式。数据存储设备306的可实现方式包括:在ps302内,在ps302的一个或多个节点304内,在控制器计算设备308内,和/或在外部和/或远程存储设备内实现。数据存储设备306可以实现为,例如,随机存取存储器(randomaccessmemory,简称ram)和/或存储设备,其中包括,非易失性存储器、磁介质、半导体存储器设备、硬盘驱动器、可移动存储器和光学器件(例如,dvd和只读光盘)等。控制器计算设备308与ps302相关联。控制器308可以实现为,例如,由ps302处理器存储和执行的软件代码指令、由ps的一个或多个节点304存储和执行的代码指令、安装在ps302内和/或一个或多个节点304内的硬件卡、和/或通过网络或直接连接(例如,电缆和短程无线链路)本地或远程连接到ps302的独立计算设备。ps302通过网络312与多个ml工作节点310(为清楚起见,示出了两个ml工作节点310a-b)通信。网络312的示例包括因特网、无线网络、蜂窝网络、专用网络、虚拟专用网络和局域网。每个ml工作节点310a-b包括一个或多个处理器314a-b。应注意的是,ml工作节点310可以是一个分布式子系统,该系统包括多个处理器、多核处理器和/或连接到网络的计算设备。为清楚起见,图3示出了处理器314。但是应该理解,处理器314可以表示分布式子系统,例如,处理器314可以如参考节点304所描述的那样实现。可选地,至少两个ml工作节点使用不同的计算设备。每个ml工作节点310a-b与数据存储设备316a-b相关联。存储设备316a-b可以如参考数据存储设备306所描述的那样实现。每个数据存储设备316a-b存储相应的梯度数据集316a'-b'。应注意的是,由梯度数据集、全局数据集和模型下载数据集存储的数据可以直接存储在数据集内,或者从相应数据集的外部存储,其中相应数据集内存储到外部存储数据的链接。ps302、节点304、ml工作节点310a-b和控制器308中的一个或多个可以与一个或多个用户界面318相关联(为清楚起见,示出了一个用户界面318)。示例性用户界面318(其可以与显示器集成,或者作为单独的设备来实现)包括以下中的一个或多个:触摸屏、键盘、鼠标和使用扬声器和麦克风操作的语音激活软件。现再次参考图4,参考图4描述的方法的动作可通过执行相应动作的相关计算设备(或分布式子系统)的一个或多个处理器执行的代码指令来实现。在402处,ps302通过网络312向每一个ml工作节点310a-b提供所述分类器模型306a。ps302可以自动发送所述模型的更新版本,可以在ml工作节点发出请求后发送更新版本,和/或可以为ml准备可用的更新模型以供其下载。模型下载数据集306c存储与分类器模型从ps至某个特定ml工作节点每一次传输(比如,下载)相关联的ml-worker-id和model-version。收到向ml工作节点提供模型更新版本的要求后,更新模型下载数据集306c(例如,通过ps302和/或控制器308的一个或多个处理器执行的代码指令来进行更新)。模型下载数据集306c可以实现为表格、矩阵或其他合适的数据结构等。示例性表的实现方式如下所示:ml-worker-idmodel-version321659…………每次ml工作节点从ps处接收所述(例如,下载)模型时,都会通过输入ml工作节点的ml-worker-id值,将一行附加到该表。其中,ml工作节点已经下载模型以及下载模型的model-version。该表是全局管理的(例如,由ps管理)。在404处,一个或多个ml工作节点310a-b使用从ps302处接收的模型来计算模型更新。模型更新可以通过紧凑的表示形式来实现。紧凑形式可以在占用较少数据存储空间的情况下存储,和/或可以通过网络更有效地发送至ps。神经网络模型包括各种类型的多个层。神经网络模型的模型更新可以划分为层更新-神经网络中每个单独层的一层更新。全连接层是具有最大权重数的层类型。全连接层(和/或其他层)的更新权重可以通过矩阵来实现。矩阵可以表示为相乘的两个向量。所述两个向量表示紧凑形式的实现方式。模型更新可以表示为比模型本身的参数数量少一个数量级的数量级。两个模型更新可以存储在每个ml工作节点上,其存储要求可忽略不计(即,非常低)。所述相应梯度数据集316a'-b'存储可指示由相应ml工作节点310a-b计算的相应模型更新的模型更新标识(delta-m-id)。与每个相应的delta-m-id相关联的模型更新可以存储在相应的梯度数据集内,或者存储在梯度数据集的外部,如果所述梯度数据集内存储了到外部存储模型更新的链接(例如,指针)的话。梯度数据集316a’-b’可以实现为,例如,表格、矩阵或其他合适的数据结构。示例性表的实现方式如下所示:δmidδm1δm12δm23δm3…………δmid表示由ml工作节点计算出的模型更新的delta-m-id。delta-m-id在集群中是唯一的。例如,delta-m-id可以基于ml工作节点中的模型更新索引和mlworkerid来创建,或者通过创建唯一delta-m-id的其他方法来创建。δm表示所述模型更新的存储。每个ml工作节点可以管理自己的梯度数据集。当ml工作节点创建所述的模型更新时,所述的模型更新存储在与delta-m-id相关联的表中。当某一ml工作节点计算某一模型更新时,所述某一模型更新和与所述某一模型更新相关联的delta-m-id存储在与所述某一ml工作节点相关联的相应梯度数据集中。在406处,ps302接收由ml工作节点310a-b计算出的所述模型更新,并使用每个接收到的模型更新来迭代地更新所述分类器模型306a。针对每次更新迭代,全局数据集306b存储:*每次相应迭代中与ps使用的所述模型更新相关联的delta-m-id,以更新分类器模型;*计算所述相应迭代中模型更新的所述ml工作节点标识(ml-worker-id);*所述分类器模型的model-version,其是通过将模型更新与ps中先前版本的分类器模型合并而得到的。model-version标记ps302中的新分类器模型306a,其通过将模型更新与ps中的先前分类器模型合并来计算。全局数据集306b可以实现为表格、矩阵或其他合适的数据结构等。示例性表的实现方式如下所示:δmidml-worker-idmodelversion………………当模型更新梯度δm(其关联δmid来自某一具备ml-worker-id的ml工作节点)与ps存储的所述最近模型合并时,通过添加调整了modelversion的新行来更新该表(例如,增加1)。当ps302通过合并所述接收到的模型更新和所述分类器当前模型来创建所述分类器更新模型后,以下内容被存储到所述全局数据集中:所述接收的模型更新的delta-m-id,提供所述模型更新的ml工作节点的ml-worker-id,以及所述的更新的分类器模型的更新的model-version。在408处,框402-406迭代地创建经训练的分类器模型。当另一ml工作节点从ps接收分类器更新的模型时,分类器的更新的模型的model-version和另一ml工作节点的ml-worker-id存储在模型下载数据集306c中。在410处,可选地由控制器308接收ps302的至少一个处理器和/或节点304中的故障指示。故障发生在分类器模型训练期间,例如,发生在块402-408的迭代期间。现参考图5,图5为根据本发明一些实施例提供的故障恢复方法流程图。参考图5描述的方法的动作可以由执行数据存储设备中存储的代码指令的控制器308(和/或节点304和/或ps302)的一个或多个处理器来实现。在502处,访问模型下载数据集306c以识别最新的model-version以及下载有分类器最新模型306a的最新ml工作节点(例如,310a)的关联ml-worker-id。最新的model-version表示模型下载数据集306c中的最新条目。在504处,使用从模型下载数据集306c获得的最新ml-worker-id来访问最新的ml工作节点310a。根据最新的model-version,可以检索最新的分类器模型。在506处,使用检索到的分类器最新模型来初始化ps302。在508处,访问全局数据集306b以检索另一个delta-m-id和与另一个model-version相关联的另一个ml-worker-id,其中,另一个model-version表示全局数据集中在最新的model-version之后的最新条目。在510处,根据检索到的另一个ml-worker-id访问另一个ml-worker(例如310b),以根据另一个delta-m-id检索另一个模型更新。在512处,指示ps302将所述另一模型更新与最近模型合并,以恢复分类器另一(即,最新)模型至发生故障前对应的分类器另一(即,最新)模型。现再次参考图4,在412处,控制器308接收到位于最近ml工作节点310a(存储正用于重新初始化ps302的模型)的一个或多个处理器和/或节点处的故障指示。应注意的是,最新ml工作节点310a的ml-worker-id由模型下载表的最后一个条目(例如,表实现中的最后一行)读取。当接收到故障指示时,可以访问所述模型下载表中最后一个条目之前的条目并将其用于容错过程。当ml工作节点(使用最后一个条目之前的条目访问)也失败时,可以访问较早的条目(在最后一个条目之前的条目之前)并将其用于恢复过程。当额外的ml工作节点失败时,可以访问模型下载表中的早期条目,直到所有条目都用完为止。应注意的是,在选择条目的数量(例如,行)时,应使得在恢复过程期间模型下载表中引用的所有ml工作节点失败的概率可忽略不计(例如,低于定义的可忽略的概率值)。现参考图6,图6为根据本发明一些实施例提供的最新ml-worker310a处理器和/或节点故障恢复方法的流程图。参考图6描述的方法的动作可以由执行数据存储设备中存储的代码指令的控制器308(和/或节点304和/或ps302和/或其他处理器和/或ml-worker310a其他节点)的一个或多个处理器来实现。在602处,访问模型下载数据集306c以识别较早的model-version以及下载有分类器较早模型的较早的ml工作节点(图中未示出)的关联较早ml-worker-id。较早的model-version表示最近的model-version之前的模型下载数据集306c中的条目。在604处,使用较早的ml-worker-id访问较早的ml-worker310a。根据从模型下载数据集306c获得的早期model-version检索分类器的早期模型。或者,可以计算较早的model-version并将其存储在另一个ml-worker中,例如ml-worker310b。在606处,使用分类器早期模型来初始化ps302。在608处,访问全局数据集306b以检索最近和较早的delta-m-id以及与最近和较早的model-version相关联的最近的ml-worker-id。应注意的是,由于已经计算了较早的模型,因此计算了两个模型更新,即最近的模型更新和较早的模型更新。较早的model-version表示最近的model-version之前的全局数据集306b中的条目。在610处,根据检索到的最近和早期ml-worker-id访问最近和早期的ml-worker310a和310b,以根据最近和早期的delta-m-id检索最近和早期的模型更新。在612处,指示ps302将早期和最近的模型更新与分类器的早期模型合并,以把分类器的最近模型恢复至ps处理器和/或节点发生故障之前对应的分类器的最近模型。现再次参考图4,在414处,执行模型下载数据集306c和/或全局数据集306b和/或梯度数据集316a'-b'的优化。当新条目被添加到相应数据集306c、306b和316a'-b'时,可以执行优化,如块402-406所描述的一样。优化可以基于对数据集中条目数的定义和/或数据集中旧条目的删除。例如,可以由控制器308自动指示删除旧条目。可选地,选择模型下载数据集306c中的model-version和关联ml-worker-id条目数量时,使得所有ml-worker310a-b(其对应ml-worker-id存储在模型下载数据集306c中)在故障恢复过程中失败的概率小于预定义的要求。可替代地或附加地,当ml-worker310a-b具有类似的计算性能特征时(例如,在定义统计上相似表现的容限要求范围内类似),在梯度数据集316a'-b'中存储delta-m-id和相关模型更新的条目的数量最多为2。可替代地或附加地,选择模型下载数据集306c中的条目数n,使得n或更少的ml工作节点在恢复过程期间失败的概率可忽略不计,例如,低于定义阈值。当至少一个ml工作节点是活跃时,可以使用本文所述的模型下载数据集中的数据来恢复模型。可替代地或附加地,当模型下载数据集306中添加和存储了model-version和关联ml-worker-id新条目时,存储在模型下载数据集306c中的model-versio和关联ml-worker-id旧条目会被删除。新条目(例如,表实现中的行)可以替换最旧的现有条目,或者删除最旧的条目,并且添加新条目,维持恒定的条目数。可替代地或附加地,从全局数据集306b中删除model-version值相当于模型下载数据集306c中已删除的最旧条目中model-version早期值或相等值的条目。在恢复过程期间,使用全局数据集306b中的条目(例如,表实现中的行),所述条目具备的model-version值至少和模型下载数据集306c中的最小model-version值一样小(如本文所述)。当从下载数据集306c移除最旧的条目(例如,行)时,删除来自全局数据集306b的行,所述行具备的model-version值最多与模型下载数据集306c的已删除条目(例如,行)中的model-version的值一样大。可替代地或附加地,移除与梯度数据集相关联的条目,所述条目具有的delta-m-id值出现在被删除的全局数据集306b的相应条目中。现参考图7-10,图7-10是根据本发明的一些实施例描绘的参考图3描述的系统300的数据流的示意图,和/或参考图4描述的方法的示意图。现参考图7,图7为根据本发明一些实施例提供的用于描述图8-10数据流的组件的示意图。ps702(对应于图3的ps302)包括多个ps工作节点(表示为wps,1、wps,2和wps,3,并且由呼出号码704a-c表示),所述ps工作节点存储和/或计算模型分类(表示为m)。每个ml工作节点(表示为wml,1、wml,2和wml,3,并由呼出号706a-c表示)与相应的梯度数据集(即,表)708a-c相关联。全局管理的数据(例如,由ps和/或控制器管理的数据)包括全局数据集(即表格)710和模型下载数据集(即表格)712。现参考图8,图8为根据本发明的一些实施例提供的描绘当ml工作节点706b计算模型更新δm时的数据流的示意图。所述数据流基于参考图3描述的系统300和/或参考图4描述的方法。图8中的组件是参考图7进行描述的。在802处,更新梯度表708b。在新行中,键(2,1)存储在列δmid中,并且新计算的模型更新δm存储在列δm中。基于2表示ml工作节点706b的ml-worker-id,以及1表示ml工作节点706b内的本地模型更新id,创建键(2,1)。在804处,将模型更新δm发送到ps702。在806处,模型更新δm与分类器现有模型m合并,表示为δm+m。在808处,更新梯度表710。基于所述新创建的模型来创建新行。键(2,1)插入到δmid列中,表示模型更新已用于创建最新模型。通过递增表示较早的modelversion(即,2)的值,在modelversion列填充值3,以创建新的模型。在810处,工作节点706b下载所述新模型。在812处,创建包括modelversion值3(即,下载的新模型的模型版本)的新行和表示ml工作节点706b的id的ml-worker-id2来更新模型下载表712。现参考图9,图9为根据本发明的一些实施例描绘ml工作节点704c故障期间的恢复机制的数据流的示意图。所述数据流基于参考图3描述的系统300和/或参考图4描述的方法。图9中的组件是参考图7进行描述的。在902处,ml工作节点706a计算模型更新δm。更新梯度表708a以包括用于δmid列的键(1,2)并将所述创建的模型更新δm存储在模型更新(δm)列中。在904处,将模型更新δm发送到ps702。在906处,模型更新δm与分类器现有模型m合并,表示为δm+m。在908处,更新梯度表710。基于所述新创建的模型来创建新行。键(1,2)插入到δmid列中,表示所述模型更新的模型更新id。通过递增表示较早的modelversion(即,3)的值,在modelversion列填充值4,以创建新的模型。在910处,ps工作节点(即,ps节点)704c出现故障,从而触发故障恢复机制。在912处,使用模型下载表712将所述模型的最近下载版本识别为具有modelversion3。ml-worker-id2表示使用modelversion3(从同一行的ml-worker-id列识别)下载模型的最后ml工作节点。在914处,具有ml-worker-id2的ml工作节点706b读取具有modelversion3的模型,并将其用于初始化ps702。在916处,在全局表710中识别具有高于3的modelversion值的行。读取所识别的行的δmid列的对应值(即,(1,2))。回想一下,那些δmid的第一个组件指向存储这些模型更新的ml工作节点(具有ml-worker-id1的ml-worker706a),而第二个组件指向ml-worker706a内的本地模型更新id(即2)。因此,δmid值指向所述ml工作节点(706a),其存储的模型更新应该合并与所述ps模型合并,来获得具有更高modelversion的模型。所述δmid值包括相应ml工作节点中的模型更新的本地模型更新id(即,2)。访问ml工作节点706a。在918处,从ml工作节点706a的梯度表708a读取与δmid值(即,(1,2))相对应的模型更新,并将其提供给ps702。ps302使用收到的模型和模型更新,将所述模型恢复至故障发生之前的状态。当在恢复过程期间ml工作节点706b(具有在模型下载表712的最近行中出现的ml-worker-id)也出现故障时,识别在最近行之前创建的行。如本文所述使用所识别的较早行的值来执行所述恢复过程。选择模型下载表712中的行数,使得表712中的行中引用的所有ml工作节点在恢复过程期间发生故障的概率低于可忽略的值。现参考图10,图10为根据本发明一些实施例,描述参考图3所述、并使用apachesparktm的系统300示例性实现方式1100的示意图。分布式收集存储所述分类器模型。分布式收集可以被视为分布在一组ps分区工作节点机器1102a-d上的阵列。ml工作节点1104a-c的分布式收集用于控制ml引擎,以便于下载模型并将模型更新从ml工作节点1104a-c注入模型更新的分布式收集中。一旦一组模型更新被注入到所述模型更新的分布式收集中,就可以将这些模型更新合并到ps模型中。每个ml工作节点使用机器学习(machinelearning,简称ml)引擎1106a-c(例如,café)来产生模型更新。为了产生所述模型更新,ml引擎1106a-c从分布式存储器1108读取训练数据。在apachesparktm控制器1112内实现的模型更新调度器1110(modelupdatescheduler1110)调度周期性合并操作。过时性控制器1114有助于使ml工作节点中的本地模型复制品不会彼此分开太远。现参考图11,图11为根据本发明一些实施例,描述参考图10所述的示例性实现方式1100的示意图,包括相应的梯度数据集(例如,表)1202a-c、全局数据集(例如,表)1204和模型下载表1206。梯度表1202a-c由相应的ml工作节点1104a-c存储和管理。全局表1204和模型下载表1206由apachesparktm控制器1112存储和管理。现在讨论参考图3描述的系统300的其他实现细节和/或参考图4描述的在apachesparktm环境中的方法。ml工作节点组织在ml弹性分布式数据集(resilientdistributeddataset,简称rdd)中。mlrdd控制ml工作节点。mlrdd中的每个数据项对应于单个ml引擎。每个ml工作节点的所述梯度表存储在相应的ml引擎中。每个ml工作节点管理相应的ml引擎,例如,café。ml引擎根据集群中计算设备的可用性来分布。全局和模型下载表由sparkmaster存储和管理。ps实现为rdd,所述rdd将模型存储为分布式阵列。实现了在ps机器故障时通知master的机制。在ps机器故障时,sparkmaster访问模型下载表并找到所述行(model-version,ml-worker-id),其中ml-worker-id表示最后从ps下载模型的ml工作节点的id,model-version表示该模型的版本。sparkmaster现在启动一个程序来重建参数的rdd(并将其正确放置在ps机器中)。创建新的rdd并其分区,所述rdd内含有来自ml工作节点的模型(有ml-worker-id)。然后,将所述rdd连接到一个新的、创建并分发给ps工作节点的空rdd上。此连接将数据重排,并有效地将最新模型的分区从ml-worker移动到ps机器上。然后,sparkmaster可以向其他ml工作节点宣布这个新rdd的存在,这通常发生在系统操作期间。下一个sparkmaster使用model-version的值访问全局表,并识别模型版本至少为model-version的行。然后,spark从这些行中提取模型更新的δmid值。这些模型更新,当与ps中的所述模型合并时,会在ps机器发生故障之前重建ps中的最新模型。sparkmaster使用模型更新id值来创建梯度rdd,其中梯度表的每一行(δmid,δm)被映射到δm。然后sparkmaster将此rdd与psrdd连接,以将所需的模型更新合并到psrdd中的模型。现参考图12,图12为根据本发明一些实施例,用于帮助解释分析以确定在每个梯度数据集(例如,表)中实现多少条目(例如,行)的示意图。该分析基于所有ml工作节点具有相似性能特征的假设(例如,在性能容限要求内,例如定义可接受的统计变化的范围)。如本文详细讨论的,每个ml工作节点从ps下载最近模型m的副本,计算模型更新δm,并将模型更新上载到ps,然后ps将模型更新与先前模型m+=δm合并。在ps将模型更新合并到模型中之后,并且在将当前模型或稍后的模型下载到至少两个ml工作节点之后,模型更新从梯度数据集中移除。接下来示出了在一示例性实施方式中,每个ml工作节点中的梯度数据集中的条目数量确实不必超过2。首先,讨论的是关于下载数据集中的条目数量足以满足任何实际需要。首先,一小时对ps机器故障恢复来说是非常保守的上限。其次,在现代系统中,一小时内发生一次特定机器故障的概率非常低。两台特定机器在一小时内发生故障的概率按照单台机器发生故障的概率的二次方来计算,这个概率对于任何实际应用而言应足够小。因此,在下载数据集中具有两个条目对于任何实际应用都是足够的。在所描述的分析中,假设选择下载数据集中的条目数,使得它不超过系统中ml工作节点的数量,这对于任何实际应用来说是非常保守的假设。现在,回想一下,每个ml工作节点遵循以下循环,如图4所示。1、ps处接收模型。2、计算模型更新。3、将模型更新传输到ps以与ps模型合并。4、回到步骤1。由于所有ml工作节点具有相似的性能特征(此假设前文讨论过),当第一个ml工作节点将其第二个模型更新传输到ps并开始第二次下载ps模型时,所有其他ml工作节点都已经计算了它们自己的模型更新,把它们传输到ps以与ps模型合并,并把更新的ps模型传输给自己。这意味着当第一个ml工作节点开始第二次下载ps模型时,所有其他ml工作节点已经下载了ps模型并在下载数据集中添加了一个条目。现在,当第一个ml工作节点第二次下载ps模型时,所有其他工作节点添加的条目数加上与首次下载ps模型相对应的下载数据集中的条目数的总和至少为n。因此,根据所述策略从下载数据集中删除条目,并假设下载数据集中的条目数最多等于ml工作节点的数量,当第一个ml工作节点第二次下载ps模型时,从下载数据集中删除与其第一次下载对应的条目,从而从梯度数据集中删除该条目。因此,每个梯度数据集中的条目数不超过2。通过研究以下附图和详细描述,本发明的其他系统、方法、特征和优点对于本领域技术人员将是或将变得显而易见。所有这些附加系统、方法、特征和优点都意图涵盖在本说明范围内、本发明范围内,并且由所附权利要求保护。对本发明各个实施例的描述只是为了说明的目的,而这些描述并不旨在穷举或限于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下,本领域技术人员可以清楚理解许多修改和变化。相比于市场上可找到的技术,选择此处使用的术语可最好地解释本实施例的原理、实际应用或技术进步,或使本领域其他技术人员理解此处公开的实施例。预计在本申请专利成熟的期间,将开发许多相关的参数服务器,术语参数服务器的范围旨在先验地包括所有这些新技术。本文所使用的术语“约”是指±10%。术语“包括”以及“有”表示“包括但不限于”。这个术语包括了术语“由……组成”以及“本质上由……组成”。短语“主要由……组成”意指组成物或方法可以包含额外成分和/或步骤,但前提是所述额外成分和/或步骤不会实质上改变所要求的组成物或方法的基本和新颖特性。除非上下文中另有明确说明,此处使用的单数形式“一个”和“所述”包括复数含义。例如,术语“一个复合物”或“至少一个复合物”可以包括多个复合物,包括其混合物。此处使用的词“示例性的”表示“为一个例子、示例或说明”。任何“示例性的”实施例并不一定理解为优先于或优越于其他实施例,和/或并不排除其他实施例特点的结合。此处使用的词语“可选地”表示“在一些实施例中提供且在其他实施例中没有提供”。本发明的任意特定的实施例可以包含多个“可选的”特征,除非这些特征相互矛盾。在整个本申请案中,本发明的各种实施例可以范围格式呈现。应理解,范围格式的描述仅为了方便和简洁起见,并且不应该被解释为对本发明范围的固定限制。因此,对范围的描述应被认为是已经具体地公开所有可能的子范围以及所述范围内的个别数值。例如,对例如从1到6的范围的描述应被认为是已经具体地公开子范围,例如从1到3、从1到4、从1到5、从2到4、从2到6、从3到6等,以及所述范围内的个别数字,例如1、2、3、4、5和6。不管范围的宽度如何,这都适用。当此处指出一个数字范围时,表示包含了在指出的这个范围内的任意所列举的数字(分数或整数)。短语“在第一个所指示的数和第二个所指示的数范围内”以及“从第一个所指示的数到第二个所指示的数范围内”在这里互换使用,表示包括第一个和第二个所指示的数以及二者之间所有的分数和整数。应了解,为简洁起见在单独实施例的上下文中描述的本发明的某些特征还可以组合提供于单个实施例中。相反地,为简洁起见在单个实施例的上下文中描述的本发明的各个特征也可以单独地或以任何合适的子组合或作为本发明的任何合适的其它实施例提供。在各个实施例的上下文中描述的某些特征未视为那些实施例的基本特征,除非没有这些元素所述实施例无效。此处,本说明书中提及的所有出版物、专利和专利说明书都通过引用本说明书结合在本说明书中,同样,每个单独的出版物、专利或专利说明书也具体且单独地结合在此。此外,对本申请的任何参考的引用或识别不可当做是允许这样的参考在现有技术中优先于本发明。就使用节标题而言,不应该将节标题理解成必要的限定。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1