一种适用于大规模分布式机器学习的新型拓扑设计方法

文档序号:32309669发布日期:2022-11-23 11:09阅读:114来源:国知局
一种适用于大规模分布式机器学习的新型拓扑设计方法

1.本发明涉及拓扑设计技术领域,尤其是涉及一种适用于大规模分布式机器学习的新型拓扑设计方法。


背景技术:

2.近年来,机器学习(machine learning,ml)被广泛应用于各个领域,如医疗、计算机视觉和语音识别。随着模型和训练数据规模的不断增大,分布式机器学习(distributed machine learning,dml)训练已经成为一种必然趋势,即多台机器协同并行地训练同一个模型。数据并行是一种常用的分布式训练方法,其中训练数据集被划分为多个切片,每个训练节点需要根据分配的数据切片进行模型训练。
3.大多ml都是以迭代的方式进行训练的,有时甚至需要迭代数百万次才能达到理想的收敛精度。每次迭代都要执行大量计算和通信。训练过程一般使用能保证模型收敛和重现的同步训练模式。在同步模式下的每一次迭代中,每个训练节点需要等待其他节点的模型更新,然后才能继续下一次迭代。参数服务器(parameter server,ps)和mpi allreduce(如tree allreduce和ring allreduce)是两种广泛使用的同步模式通信架构。在ps架构中,有两种服务器,一种是负责基于本地数据集进行本地训练的计算节点(worker),另一种是负责模型同步的参数服务器节点。而在mpi allreduce架构中,没有负责模型聚合的中心节点,不同的mpi allreduce架构是以不同的规则同步模型参数。
4.为了支持计算密集型和通信密集型的dml任务,许多it公司如微软和谷歌,利用gpu等加速硬件在数据中心建立了专门用于ml训练的集群。加速硬件的使用大大提高了dml的样本处理速度,每个计算节点在单位时间内可以处理更多的样本,这也意味着网络在单位时间内需要传输更多的数据。此时,网络的通信能力已成为dml训练的性能瓶颈。虽然已有很多从通信角度加快dml训练的方案,但它们忽略了网络拓扑对训练性能的影响。
5.不同的通信架构具有不同的同步规则和流量特点,对硬件和网络的需求也不同。实际上,现有的网络拓扑设计一般追求高吞吐、高可扩展性等通用目标,不针对某种特定应用,并不能很好地适应大规模dml训练。而网络拓扑与上层应用的不匹配会直接影响应用的性能。虽然已有文献设计了针对dml训练的专用拓扑,但通常局限于dml的某种通信架构。比如psnet就是针对ps架构的专用拓扑,并没有考虑不同通信架构共存的情况。 psnet是为使用ps架构进行训练的dml集群设计的新型网络拓扑,其主要思想是把服务器分为参数服务器和worker两类节点,并结合可重构的光电交换机或电路交换机实现了拓扑的灵活变换。虽然上述拓扑可以提升训练效率,但只适合使用ps架构的dml训练,不适合tree架构、ring架构等常用的mpi allreduce通信架构。
6.不同的通信架构具有不同的流量模式,对网络的需求也不同,这对设计适用于多种通信架构的拓扑提出了新的挑战。因此,为了解决这一挑战,考虑到不同通信架构的不同通信需求,本发明提供了一种适用于大规模分布式机器学习的新型拓扑设计方法。


技术实现要素:

7.本发明提供一种适用于大规模分布式机器学习的新型拓扑设计方法,可以同时满足ps、tree和ring这三种广泛使用的通信架构的通信需求。在本发明中,通过分析三种架构的流量模式和通信特点,总结出其对拓扑结构的需求,再设计满足通信需求的物理拓扑。
8.为实现上述目的,本发明采用了如下技术方案:一种适用于大规模分布式机器学习的新型拓扑设计方法,包括:步骤s1.分析parameter server架构、tree allreduce架构和ring allreduce架构的通信需求;步骤s2.分析适用于分布式机器学习训练的通用拓扑需求;步骤s3.使用电路交换机或光电交换机和分组交换机,基于所述parameter server架构、tree allreduce架构和ring allreduce架构的通信需求,以及所述通用拓扑需求,构建由模块内和模块间组成的拓扑。
9.在一些实施例中,所述模块内包括上层和下层,所述上层包括t个具有n*n端口的分组交换机和u个服务器,所述下层包括e个具有k*k个端口的电路交换机或光电交换机和d个服务器;所述模块内的连接步骤如下:步骤a1.为下层的d个服务器分别配置e个网卡,分别连接到e个电路交换机或光电交换机;步骤a2.为上层的u个服务器分别配置t个网卡,分别连接到t个分组交换机;步骤a3.每个分组交换机使用e个端口分别连接到e个电路交换机或光电交换机。
10.在一些实施例中,所述模块间的连接步骤如下:步骤b1.准备h个模块,编号为[1,h],若h为偶数,转至步骤b2,否则转至步骤b3;步骤b2.随机选择h/2个模块,并为每个模块准备h/2个分组交换机预留端口和(h-2)/2个电路交换机预留端口或光电交换机预留端口,且为剩余的每个模块准备(h-2)/2个分组交换机预留端口和h/2个电路交换机预留端口或光电交换机预留端口;这些准备好的预留端口称为备用端口;令k=1,转至步骤b4;步骤b3.为每个模块准备(h-1)/2个分组交换机预留端口和(h-1)/2个电路交换机预留端口或光电交换机预留端口;这些准备好的预留端口称为备用端口,令k=1,转至步骤b4;步骤b4.如果k《h,转至步骤b5,否则转至步骤b6;步骤b5.对于模块k,随机选择h-k个备用端口,分别连接到模块[k+1,h]的备用端口;注意,相连接的两个备用端口需要分别为分组交换机预留端口和电路交换机预留端口或光电交换机预留端口,不能同时为分组交换机预留端口和电路交换机预留端口或光电交换机预留端口;令k=k+1,转至步骤b4;步骤b6.结束。
[0011]
综上所述,本发明至少具有以下有益效果:本发明每个服务器都配置多个网卡,具有较大带宽,可以满足ps架构中的参数服务器和tree架构中的父节点等这些需要负责参数聚合的节点的大带宽要求。
[0012]
本发明服务器间存在多条不相交路径。服务器与分组交换机和电路交换机或光电交换机间,分组交换机和电路交换机或光电交换机间都连接成完全二部图,可为服务器之
间提供多条不相交路径,不会产生单点失效问题;当服务器、链路或交换机发生故障时,可以使用相同位置和性能的节点或链路进行替换,具有较高的容错能力,同时服务器间也容易构成环形,可以满足ps架构、tree架构和ring架构的通信需求,以及满足通用拓扑需求。
[0013]
本发明服务器间路径跳数差异不大。在模块内部,服务器之间的路径跳数差不超过1跳,不同模块服务器间的路径跳数差不超过2跳。因此,不同服务器间路径的跳数差异很小,不会产生掉队者现象,有利于模型同步。
附图说明
[0014]
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0015]
图1为本发明中所涉及的适用于大规模分布式机器学习的新型拓扑设计方法的示意图。
[0016]
图2为本发明中所涉及的模块内的连接步骤的示意图。
[0017]
图3为本发明中所涉及的模块间的连接步骤的示意图。
[0018]
图4为本发明中所涉及的模块内连接示意图。
[0019]
图5为本发明中所涉及的模块间连接示意图。
具体实施方式
[0020]
在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本发明实施例的精神或范围的情况下,可通过各种不同方式修改所描述的实施例。因此,附图和描述被认为本质上是示例性的而非限制性的。
[0021]
下文的公开提供了许多不同的实施方式或例子用来实现本发明实施例的不同结构。为了简化本发明实施例的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本发明实施例。此外,本发明实施例可以在不同例子中重复参考数字和/或参考字母,这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施方式和/或设置之间的关系。
[0022]
下面结合附图对本发明的实施例进行详细说明。
[0023]
如图1所示,本实施例提供了一种适用于大规模分布式机器学习的新型拓扑设计方法,包括:步骤s1.分析parameter server架构(以下简称ps架构)、tree allreduce架构(以下简称tree架构)和ring allreduce架构(以下简称ring架构)的通信需求;步骤s2.分析适用于分布式机器学习训练的通用拓扑需求;步骤s3.使用电路交换机(electrical circuit switch, ecs)或光电交换机(optical circuit switch, ocs)和分组交换机,基于所述parameter server架构、tree allreduce架构和ring allreduce架构的通信需求,以及所述通用拓扑需求,构建由模块内和模块间组成的拓扑。
[0024]
在一些实施例中,所述模块内包括上层和下层,所述上层包括t个具有n*n端口的
分组交换机和u个服务器,所述下层包括e个具有k*k个端口的电路交换机或光电交换机和d个服务器;如图2所示,所述模块内的连接步骤如下:步骤a1.为下层的d个服务器分别配置e个网卡,分别连接到e个电路交换机或光电交换机;步骤a2.为上层的u个服务器分别配置t个网卡,分别连接到t个分组交换机;步骤a3.每个分组交换机使用e个端口分别连接到e个电路交换机或光电交换机。
[0025]
在一些实施例中,如图3所示,所述模块间的连接步骤如下:步骤b1.准备h个模块,编号为[1,h],若h为偶数,转至步骤b2,否则转至步骤b3;步骤b2.随机选择h/2个模块,并为每个模块准备h/2个分组交换机预留端口和(h-2)/2个电路交换机预留端口或光电交换机预留端口,且为剩余的每个模块准备(h-2)/2个分组交换机预留端口和h/2个电路交换机预留端口或光电交换机预留端口;这些准备好的预留端口称为备用端口;令k=1,转至步骤b4;步骤b3.为每个模块准备(h-1)/2个分组交换机预留端口和(h-1)/2个电路交换机预留端口或光电交换机预留端口;这些准备好的预留端口称为备用端口,令k=1,转至步骤b4;步骤b4.如果k《h,转至步骤b5,否则转至步骤b6;步骤b5.对于模块k,随机选择h-k个备用端口,分别连接到模块[k+1,h]的备用端口;注意,相连接的两个备用端口需要分别为分组交换机预留端口和电路交换机预留端口或光电交换机预留端口,不能同时为分组交换机预留端口和电路交换机预留端口或光电交换机预留端口;令k=k+1,转至步骤b4;步骤b6.结束。
[0026]
为了进一步说明清楚本发明的技术方案,本发明的发明构思如下:本发明所要解决的问题是:如何连接交换机和服务器才能使拓扑满足三种通信架构的通信需求,且具有高可扩展性和高容错性特点。
[0027]
本发明的目的是:提出一种基于电路交换的适用于多种通信架构的大规模dml训练的拓扑结构。该方案首先分析ps架构、tree架构和ring架构三种通信架构的流量模式和通信特点,总结出它们对拓扑的需求,并综合考虑分布式机器学习训练对拓扑的高可扩展性和高容错性需求,接着采用模块化思想设计能满足所有需求的拓扑结构。其中,模块内部是由电路交换机和分组交换机连接的网络,模块间则把所有模块连接成一个完全图。
[0028]
一、ps架构的通信需求分析在ps架构中,训练节点被分为两类:参数服务器和计算节点(worker),其中参数服务器负责模型参数的聚合,worker负责根据本地数据集训练模型。每一次迭代过程如下:首先,每个worker从参数服务器获取全局模型(pull阶段);接着,每个worker根据分配的数据片进行局部训练(compute阶段);接着,每个worker将计算好的模型更新(权重或梯度)推送到参数服务器(push阶段)。最后,参数服务器在接收到所有worker的数据后更新全局模型(model update阶段)。然后开始下一次迭代。
[0029]
通过分析ps架构的流量模式,本发明总结了以下三个构建适用于ps架构的拓扑需求:1)参数服务器应该比worker拥有更多带宽(p1)
随着gpu的大规模使用,计算节点(worker)的样本处理能力得到了极大提高,这给网络带来了巨大的通信压力。在这种情况下,带宽对模型同步起着重要作用。另外,参数服务器作为数据聚合节点,极易成为通信瓶颈,与worker相比,对带宽的要求更高。在分析参数服务器链路带宽对训练性能影响的实验中,在worker带宽不变的情况下,可以看到单次迭代时间随着参数服务器带宽的增加而减少。因此,与worker相比,参数服务器需要更多的带宽,以加快模型同步过程。在本发明中,假设参数服务器接收参数更新的带宽至少比计算节点发送参数更新使用的带宽多2倍,则认为参数服务器具有更多带宽。
[0030]
2)参数服务器到worker之间应该有多条不相交的路径(p2)在同步模式下,每个参数服务器在执行模型更新之前,将等待所有worker的更新数据。如果多个worker共享到参数服务器的路径或链路,这些路径或链路很容易发生拥塞,成为数据传输的通信瓶颈,影响参数同步过程。反之,如果worker和参数服务器之间有多条不相交的路径,worker可以选择不同的路径以避免过多的共享链路,因此可缓解网络中的拥塞,有利于加快参数同步。因此,当所有节点都参与训练时,一些服务器作为参数服务器,其他所有服务器作为worker,要求拓扑可为每个worker到每个参数服务器提供多条不相交的路径。在本发明中,假设参数服务器到每个worker之间至少拥有3条不相交的路径,则认为参数服务器到worker间有多条不相交路径。
[0031]
3)参数服务器到worker的路径跳数差异不大(p3)与大部分worker相比,当某些worker需要花费更多时间向参数服务器传输更新数据时,就会出现掉队者(straggler)现象。为了减少straggler造成的等待时间,worker到参数服务器的路径最好是相似的,比如具有相似的路径带宽、延迟、跳数等,这样可以确保从worker到参数服务器传输数据(模型更新)所需的时间大致相同。在拓扑构建中,重点是节点(即服务器和交换机)如何连接,而不是指定网络中链路的带宽。默认情况下,各链路的带宽和延迟都是相同的。因此,在本发明中,路径的相似性主要强调路径的跳数,这在拓扑互联中也是非常直观的。同时,在本发明中,我们设置相似路径之间的跳数差异不超过3跳。
[0032]
二、tree架构的通信需求分析在tree架构中,所有的计算节点都参与训练,形成一个树结构来完成参数更新。具体来说,在每次迭代的模型聚合期间,每个非叶子节点等待从子节点接收数据,执行求和操作,然后将结果发送给父节点;在模型分发期间,当根节点完成模型更新时,新模型将沿着树结构原路分发给所有节点。
[0033]
tree架构的拓扑需求如下:1)服务器应该很容易形成一个树状结构 (t1)这个需求可以分为两部分:第一,网络中有大量适合作为父节点的服务器,其带宽比其他服务器大(t1.1)。在树结构中,除叶子以外的所有节点都是数据聚合节点,需要聚合子节点的模型更新数据。在ps通信架构中,参数服务器的数量通常比worker的数量少得多。因此,在tree架构中,这些作为父节点的服务器也需要更多的带宽。tree架构与ps架构的区别是:tree架构需要更多的高带宽服务器。第二,子节点和父节点之间的路径最好不相交(t1.2)。在tree架构中,每个父节点也是另一个节点的子节点。为避免带宽竞争,每个子节点到父节点的路径最好不重叠。
[0034]
2)从所有子节点到其父节点的路径跳数差异不大(t2)
ecs)或光电交换机(optical circuit switch, ocs))构建拓扑。在使用ecs或ocs的拓扑中,可以通过调整ecs或ocs的线路动态改变线路间的连接,得到不同的拓扑结构,从而可根据上层应用需求改变物理拓扑,非常适用于多种通信架构共存的dml训练场景。
[0041]
为了满足所有拓扑需求,本发明设计了一种新的模块化拓扑dmlnet,主要思想是结合分组交换机和线路交换机(以ecs为例),采用模块化分层设计思想构建拓扑。该拓扑由模块内和模块间两部分组成,下面分别介绍两部分的构建步骤:1)模块内连接方法模块内部可分为上下两层,下层包含e个具有k*k个端口的电路交换机ecs和d个服务器,上层包含t个具有n*n端口的分组交换机(即tor交换机)和u个服务器。当e=3,d=5,u=4,t=2时的模块内连接示意图如图4所示。
[0042]
模块内连接步骤如下:步骤a1.为下层的d个服务器分别配置e个网卡,分别连接到e个ecs;步骤a2.为上层的u个服务器分别配置t个网卡,分别连接到t个tor交换机;步骤a3.把tor交换机和ecs连接成一个完全二部图,即每个tor交换机使用e个端口分别连接到e个ecs。
[0043]
此时,每个ecs和tor交换机剩余端口(或称为预留端口)数量分别为2*k-d-t,2*n-u-e,这些端口均可用于模块间的互联。每个模块内部剩余的ecs和tor端口数分别为:2ek-ed-et、2tn-tu-et。要求e(k-d)与t(n-u)相差不大,即e(k-d) ≈t(n-u),则每个模块剩余的ecs和tor端口数量相差不大。
[0044]
2)模块间连接方法准备h个模块,编号为[1,h],通过连接处于不同模块的tor交换机端口和ecs端口,把h个模块连接成一个完全图,即每对不同的模块之间都有一条边相连,需要连接条边,当h=4时的模块间连接示意图如图5所示。
[0045]
模块间连接步骤如下:步骤b1.若h为偶数,转步骤2,否则转步骤3;步骤b2.随机选择个模块,并为每个模块准备个tor预留端口和个ecs预留端口,且为剩余的每个模块准备个tor预留端口和个ecs预留端口;这些准备好的预留端口称为备用端口;令k=1,转步骤4;步骤b3.为每个模块准备个tor预留端口和个ecs预留端口;这些准备好的预留端口称为备用端口,令k=1,转步骤4;步骤b4.如果k《h,转步骤5,否则转步骤6;步骤b5.对于模块k,随机选择h-k个备用端口,分别连接到模块[k+1,h]的备用端口;注意,相连接的两个备用端口需要分别为tor端口和ecs端口,不能同时为tor端口或ecs端口;k=k+1,转步骤4;
步骤b6.结束。注意,不管h是偶数还是奇数,所有模块的tor备用端口数量总和为,ecs备用端口数量总和也为,这样可以保证能构成条由tor端口和ecs端口为顶点的链路。因此,h个模块可以成功连接成一个完全图。
[0046]
经过上述步骤构建的dmlnet具有以下特点:1)节点间的数据传输使用一条路径,每个服务器都配置多个网卡,作为聚合节点的参数服务器或父节点有多个网卡接收来自不同节点的参数更新,具有较大带宽,可以满足ps架构中的参数服务器和tree架构中的父节点的大带宽要求,即满足p1和t1.1。
[0047]
2)服务器间存在多条不相交路径。服务器与ecs/tor交换机间,tor交换机与ecs间都连接成完全二部图,可为服务器之间提供多条不相交路径,不会产生单点失效问题;当服务器、链路或交换机发生故障时,可以使用相同位置和性能的节点或链路进行替换,具有较高的容错能力,同时服务器间也容易构成环形,因此满足p2、t1.2、r1和c2。
[0048]
3)服务器间路径跳数差异不大。ecs从一个端口到另一个端口的数据传输时间低至2ns,这对上层应用可以看作是透明的,因此连接到ecs的分组交换机可看作不知道ecs的存在,并把它当作一条链路。因此,在模块内部,ecs的透明性使得服务器之间的路径始终为2跳,不同模块中服务器之间的路径最多为3跳。具休地,模块内服务器之间的路径为:服务器

ecs

服务器、服务器

tor

ecs

服务器、服务器

tor

服务器。不同模块中服务器之间的路径为:服务器

ecs

tor

ecs

服务器、服务器

ecs

tor

服务器、服务器

tor

ecs

服务器、服务器

tor

ecs

服务器、服务器

tor

ecs

服务器、服务器

tor

ecs

服务器。因此,任意服务器之间的距离不超过2跳,满足p3、t2、r2。此外,dmlnet通过连接备用端口进行扩展,不改变原有的节点或链路。因此,也满足c1。注意,当使用ocs替换ecs时,模块内的不同服务器间路径跳数变为:2跳或3跳,模块间的不同服务器间的路径跳数变为:3跳或4跳,同样的,当使用ocs时,任意服务器间的路径跳数同样不超过2跳,也满足p3、t2和r2。
[0049]
综上,dmlnet能够满足常用的三种通信体系结构的拓扑需求,以及高可扩展性和高容错性两种通用的拓扑需求,非常适用大规模dml训练。
[0050]
以上所述实施例是用以说明本发明,并非用以限制本发明,所以举例数值的变更或等效元件的置换仍应隶属本发明的范畴。
[0051]
由以上详细说明,可使本领域普通技术人员明了本发明的确可达成前述目的,实已符合专利法的规定。
[0052]
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,应当指出的是,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
[0053]
应当注意的是,上述有关流程的描述仅仅是为了示例和说明,而不限定本说明书的适用范围。对于本领域技术人员来说,在本说明书的指导下可以对流程进行各种修正和
改变。然而,这些修正和改变仍在本说明书的范围之内。
[0054]
上文已对基本概念做了描述,显然,对于阅读此申请后的本领域的普通技术人员来说,上述发明披露仅作为示例,并不构成对本技术的限制。虽然此处并未明确说明,但本领域的普通技术人员可能会对本技术进行各种修改、改进和修正。该类修改、改进和修正在本技术中被建议,所以该类修改、改进、修正仍属于本技术示范实施例的精神和范围。
[0055]
同时,本技术使用了特定词语来描述本技术的实施例。例如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本技术至少一个实施例有关的某一特征、结构或特性。因此,应当强调并注意的是,本说明书中在不同位置两次或以上提及的“一实施例”或“一个实施例”或“一替代性实施例”并不一定是指同一实施例。此外,本技术的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
[0056]
此外,本领域的普通技术人员可以理解,本技术的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的过程、机器、产品或物质的组合,或对其任何新的和有用的改进。因此,本技术的各个方面可以完全由硬件实施、可以完全由软件(包括固件、常驻软件、微代码等)实施、也可以由硬件和软件组合实施。以上硬件或软件均可被称为“单元”、“模块”或“系统”。此外,本技术的各方面可以采取体现在一个或多个计算机可读介质中的计算机程序产品的形式,其中计算机可读程序代码包含在其中。
[0057]
本技术各部分操作所需的计算机程序代码可以用任意一种或以上程序设计语言编写,包括如java、scala、smalltalk、eiffel、jade、emerald、c++、c#、vb.net、python等的面向对象程序设计语言、如c程序设计语言、visualbasic、fortran2103、perl、cobol2102、php、abap的常规程序化程序设计语言、如python、ruby和groovy的动态程序设计语言或其它程序设计语言等。该程序代码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或服务器上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(lan)或广域网(wan),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(saas)。
[0058]
此外,除非权利要求中明确说明,本技术所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本技术流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本技术实施例实质和范围的修正和等价组合。例如,尽管上述各种组件的实现可以体现在硬件设备中,但是它也可以实现为纯软件解决方案,例如,在现有服务器或移动设备上的安装。
[0059]
同理,应当注意的是,为了简化本技术披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本技术的实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。然而,本技术的该方法不应被解释为反映所申明的客体需要比每个权利要求中明确记载的更多特征的意图。相反,发明的主体应具备比上述单一实施例更少的特征。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1