一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

资源分配的方法以及装置与流程

2021-12-07 20:18:00 来源:中国专利 TAG:


1.本技术涉及网络通信技术领域,更具体地,涉及一种资源分配的方法以及装置。


背景技术:

2.人工智能(artificial intelligence,ai)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。
3.在ai训练过程中,需要为用户提交的作业分配资源。在私有云数据中心的场景下,多个用户共享节点集群中的资源,因此,如何实现多个用户之间资源的公平分配成为亟需要解决的问题。


技术实现要素:

4.本技术提供一种资源分配的方法以及装置,可以实现资源的公平分配,避免参数设置的不当产生的资源分配不公平的问题。
5.第一方面,提供了一种资源分配的方法,包括:确定预设时间段内提交的多个作业的特征;根据所述多个作业的特征确定第一影响因子和第二影响因子,其中,所述第一影响因子为集群的历史资源使用信息对应的权重,所述第二影响因子是所述集群的实时资源使用信息对应的权重;根据用户的历史资源使用信息、所述第一影响因子、实时资源使用信息以及所述第二影响因子确定目标用户。
6.上述技术方案中,通过根据预设时间段内集群中提交的多个作业的特征确定集群的历史资源使用信息对应的权重以及集群的实时资源使用信息对应的权重。一方面,确定出的集群的历史资源使用信息对应的权重以及集群的实时资源使用信息对应的权重较准确。另一方面,上述权重的灵活性较好,在集群作业类型或特征发生变化时,集群的历史资源使用信息对应的权重以及集群的实时资源使用信息对应的权重也会进行相应的变化。这样,可以避免出现资源分配不公平或其他用户的作业饿死等问题。
7.在一种可能的实现方式中,所述多个作业的特征包括所述多个作业中高资源消耗的作业的占比,所述高资源消耗的作业为占用的资源大于第一阈值的作业。
8.在另一种可能的实现方式中,所述高资源消耗的作业的占比包括以下中的一种或多种:所述高资源消耗的作业的用户数量所占的用户比例、所述高资源消耗的作业的数量与所述多个作业的数量的比例。
9.在另一种可能的实现方式中,如果所述高资源消耗的作业的占比大于第二阈值,则将所述第一影响因子设置为与所述占比正相关的值;如果所述高资源消耗的作业的占比小于或等于所述第二阈值,则将所述第一影响因子设置为与所述占比正相关的值。
10.在另一种可能的实现方式中,还包括:通过用户界面ui显示如下的一种或多种:所述多个作业的特征、所述第一影响因子和所述第二影响因子;其中,所述ui界面用于对所述第一影响因子和所述第二影响因子进行调整。
11.在另一种可能的实现方式中,根据多个用户的历史资源使用信息确定所述多个用户的每个用户在集群中的历史资源使用占比;根据所述至少一个用户的实时资源使用信息确定所述至少一个用户的每个用户在集群中的实时资源使用占比;根据所述多个用户的历史资源使用占比、所述第一影响因子、所述至少一个用户的实时资源使用占比以及所述第二影响因子确定所述目标用户。
12.在另一种可能的实现方式中,所述第一影响因子与所述高资源消耗的作业的占比正相关,所述第二影响因子与所述高资源消耗的作业的占比负相关。
13.在另一种可能的实现方式中,根据用户的历史资源使用信息、所述第一影响因子、实时资源使用信息、所述第二影响因子以及用户的权重确定所述目标用户。
14.第二方面,提供了一种资源分配的装置,包括:
15.确定模块,用于确定预设时间段内提交的多个作业的特征;
16.所述确定模块还用于,根据所述多个作业的特征确定第一影响因子和第二影响因子,其中,所述第一影响因子为集群的历史资源使用信息对应的权重,所述第二影响因子是所述集群的实时资源使用信息对应的权重;
17.所述确定模块还用于,根据用户的历史资源使用信息、所述第一影响因子、实时资源使用信息以及所述第二影响因子确定目标用户。
18.在一种可能的实现方式中,所述多个作业的特征包括所述多个作业中高资源消耗的作业的占比,所述高资源消耗的作业为占用的资源大于第一阈值的作业。
19.在另一种可能的实现方式中,所述高资源消耗的作业的占比包括以下中的一种或多种:所述高资源消耗的作业的用户数量所占的用户比例、所述高资源消耗的作业的数量与所述多个作业的数量的比例。
20.在另一种可能的实现方式中,所述确定模块具体用于:如果所述高资源消耗的作业的占比大于第二阈值,则将所述第一影响因子设置为与所述占比正相关的值;如果所述高资源消耗的作业的占比小于或等于所述第二阈值,则将所述第一影响因子设置为与所述占比正相关的值。
21.在另一种可能的实现方式中,还包括:显示模块,用于通过用户界面ui显示如下的一种或多种:所述多个作业的特征、所述第一影响因子和所述第二影响因子;其中,所述ui界面用于对所述第一影响因子和所述第二影响因子进行调整。
22.在另一种可能的实现方式中,所述确定模块具体用于:根据多个用户的历史资源使用信息确定所述多个用户的每个用户在集群中的历史资源使用占比;根据所述至少一个用户的实时资源使用信息确定所述至少一个用户的每个用户在集群中的实时资源使用占比;根据所述多个用户的历史资源使用占比、所述第一影响因子、所述至少一个用户的实时资源使用占比以及所述第二影响因子确定所述目标用户。
23.在另一种可能的实现方式中,所述第一影响因子与所述高资源消耗的作业的占比正相关,所述第二影响因子与所述高资源消耗的作业的占比负相关。
24.在另一种可能的实现方式中,所述确定模块具体用于:根据用户的历史资源使用信息、所述第一影响因子、实时资源使用信息、所述第二影响因子以及用户的权重确定所述目标用户。
25.应理解,在上述第一方面中对相关内容的扩展、限定、解释和说明也适用于第二方
面中相同的内容。
26.第三方面,提供了一种资源分配的装置,包括:存储器,用于存储程序;处理器,用于执行该存储器存储的程序,当该存储器存储的程序被执行时,该处理器用于执行:
27.确定预设时间段内提交的多个作业的特征;根据所述多个作业的特征确定第一影响因子和第二影响因子,其中,所述第一影响因子为集群的历史资源使用信息对应的权重,所述第二影响因子是所述集群的实时资源使用信息对应的权重;根据用户的历史资源使用信息、所述第一影响因子、实时资源使用信息以及所述第二影响因子确定目标用户。
28.在一种可能的实现方式中,所述多个作业的特征包括所述多个作业中高资源消耗的作业的占比,所述高资源消耗的作业为占用的资源大于第一阈值的作业。
29.在另一种可能的实现方式中,所述高资源消耗的作业的占比包括以下中的一种或多种:所述高资源消耗的作业的用户数量所占的用户比例、所述高资源消耗的作业的数量与所述多个作业的数量的比例。
30.在另一种可能的实现方式中,如果所述高资源消耗的作业的占比大于第二阈值,则将所述第一影响因子设置为与所述占比正相关的值;
31.如果所述高资源消耗的作业的占比小于或等于所述第二阈值,则将所述第一影响因子设置为与所述占比正相关的值。
32.在另一种可能的实现方式中,还包括:通过用户界面ui显示如下的一种或多种:所述多个作业的特征、所述第一影响因子和所述第二影响因子;其中,所述ui界面用于对所述第一影响因子和所述第二影响因子进行调整。
33.在另一种可能的实现方式中,根据多个用户的历史资源使用信息确定所述多个用户的每个用户在集群中的历史资源使用占比;根据所述至少一个用户的实时资源使用信息确定所述至少一个用户的每个用户在集群中的实时资源使用占比;根据所述多个用户的历史资源使用占比、所述第一影响因子、所述至少一个用户的实时资源使用占比以及所述第二影响因子确定所述目标用户。
34.在另一种可能的实现方式中,所述第一影响因子与所述高资源消耗的作业的占比正相关,所述第二影响因子与所述高资源消耗的作业的占比负相关。
35.应理解,在上述第一方面中对相关内容的扩展、限定、解释和说明也适用于第三方面中相同的内容。
36.第四方面,提供一种计算机存储介质,该计算机存储介质存储有程序代码,该程序代码包括用于执行第一方面以及第一方面中的任意一种实现方式中资源分配的方法中的步骤的指令。
37.上述存储介质具体可以是非易失性存储介质。
38.第五方面,提供一种芯片,该芯片包括处理器与数据接口,该处理器通过该数据接口读取存储器上存储的指令,执行上述第一方面以及第一方面的任意一种实现方式中资源分配的方法。
39.可选地,作为一种实现方式,该芯片还可以包括存储器,该存储器中存储有指令,该处理器用于执行该存储器上存储的指令,当该指令被执行时,该处理器用于执行第一方面以及第一方面中的任意一种实现方式中资源分配的方法。
附图说明
40.图1是本技术实施例提供的典型的全连接网络模型的示意图。
41.图2是本技术实施例提供的神经网络模型的训练流程的示意图。
42.图3是适用于本技术实施例的一种可能的系统架构示意图。
43.图4是本技术实施例提供的一种资源分配的方法的示意性流程图。
44.图5是步骤420的一种具体实现方式的示意性流程图。
45.图6是步骤430的一种具体实现方式的示意性流程图。
46.图7是本技术实施例提供的资源分配的装置700的示意性框图。
47.图8是本技术实施例提供的资源分配的装置800的硬件结构示意图。
具体实施方式
48.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
49.应理解,在本技术的各实施例中,“第一”、“第二”、“第三”、“第四”等仅是为了指代不同的对象,并不表示对指代的对象有其它限定。
50.由于本技术实施例涉及大量的专业术语,为了便于理解,下面先对本技术实施例可能涉及的相关术语和概念进行介绍。
51.1、作业
52.作业可以是完成一项特定的计算业务所需要执行的一组程序实例的集合,通常对应于一台或多台计算机上的一组进程、容器或其他运行时实体。一个作业可以包含多个任务。
53.2、任务
54.一个作业内程序实例集合中的一个实例个体,通常对应于一台计算机上的一个进程、容器或其他运行时实体。
55.3、深度神经网络
56.深度神经网络(deep neural network,dnn),也称多层神经网络,可以理解为具有多层隐藏层的神经网络。按照不同层的位置对dnn进行划分,dnn内部的神经网络可以分为三类:输入层,隐藏层,输出层。一般来说第一层是输入层,最后一层是输出层,中间的层数都是隐藏层。层与层之间是全连接的,也就是说,第i层的任意一个神经元一定与第i 1层的任意一个神经元相连。
57.例如,如图1所示的为典型的全连接网络模型,包括了输入层110、隐藏层120、隐藏层130以及输出层140;数据从输入层110流入,逐步经过计算最终从在输出层140得到结果;其中,中间每一层都会若干个参数,和上一层的输入进行计算得到输出;模型参数需要大量数据通过模型训练拟合,从而得到最佳的模型效果。
58.本技术实施例中,深度神经网络训练过程中的训练作业也可以称为深度学习类作业。
59.4、高资源性消耗的作业
60.高资源性消耗的作业为该作业所占用的资源大于第一阈值。本技术实施例中的高资源消耗的作业可以包括但不限于:长时作业、大作业等。
61.5、长时作业
62.长时作业可以是该作业单次所执行的时间大于预设阈值时间。具体的,一种示例,深度神经网络中单次深度学习类作业所执行的时间较长,可以被理解为长时作业。
63.为了便于描述,下面先对深度神经网络模型的训练流程进行说明。
64.示例性地,图2是本技术实施例提供的深度神经网络模型的训练流程的示意图。训练流程包括步骤s210至步骤s280,下面对步骤s210至步骤s280进行详细描述。
65.s210、网络模型初次加载。
66.s220、向网络模型中输入训练数据。
67.s230、根据训练数据使得网络模型的参数初始化。
68.s240、前向传播。
69.其中,前向传播算法是指利用若干个权重系数矩阵w,偏倚向量b和输入值向量x进行一系列线性运算和激活运算;即从输入层开始一层一层的向后计算,一直到运算到输出层,得到输出结果为值。
70.s250、根据结果计算损失。
71.例如,在训练深度神经网络的过程中,因为希望深度神经网络的输出尽可能的接近真正想要预测的值,所以可以通过比较当前网络的预测值和真正想要的目标值,再根据两者之间的差异情况来更新每一层神经网络的权重向量(当然,在第一次更新之前通常会有初始化的过程,即为深度神经网络中的各层预先配置参数);比如,如果网络的预测值高了,就调整权重向量让它预测低一些,不断地调整,直到深度神经网络能够预测出真正想要的目标值或与真正想要的目标值非常接近的值。
72.因此,就需要预先定义“如何比较预测值和目标值之间的差异”,这便是损失函数(loss function)或目标函数(objective function),它们是用于衡量预测值和目标值的差异的重要方程。其中,以损失函数举例,损失函数的输出值(loss)越高表示差异越大,那么深度神经网络的训练就变成了尽可能缩小这个loss的过程。
73.s260、反向传播。
74.例如,神经网络可以采用误差反向传播(back propagation,bp)算法在训练过程中修正初始的神经网络模型中参数的大小,使得神经网络模型的重建误差损失越来越小。具体地,前向传递输入信号直至输出会产生误差损失,通过反向传播误差损失信息来更新初始的神经网络模型中参数,从而使误差损失收敛。反向传播算法是以误差损失为主导的反向传播运动,旨在得到最优的神经网络模型的参数,例如权重矩阵。
75.s270、网络模型参数不断更新。
76.s280、保存网络模型的参数或者权重。
77.由于上述网络模型的训练过程需要大量迭代训练(成千上万次)才能得到最终的模型参数值,满足相应的任务需求,深度神经网络的模型训练往往是一个非常费时的过程。因此,深度学习类作业中长时作业的数量较多。
78.在给这类深度学习类作业分配资源时,一旦分配资源开始运行,可能需要数天才会释放资源,如果不通过抢占等机制,那么其他用户在这段时间内是不能使用这部分资源
的。在排队中的其他作业可能需要等待很长时间才能获得资源,出现其他用户的作业饿死的情况。
79.6、大作业
80.大作业可以是该作业单次运行所需要的资源大于预设阈值。具体的,一种示例,深度神经网络中单次深度学习类作业单次运行所需要的资源较多,可以被理解为大作业。
81.在深度神经网络中,随着网络模型越来复杂,数据量越来越大,模型训练的计算量变得异常庞大;因此,通过分布式训练来满足模型生成的时效性需求。分布式训练是指通过多个节点或多个处理器协同处理一个深度学习类作业。因此,深度神经网络中单个深度学习类作业需求的资源量很大。
82.需要说明的是,深度学习类作业与大数据类作业不同的地方在于,深度学习类作业的多个不同的子任务不能分批处理,而需要成组调度。成组调度是并行系统的调度算法,调度多个节点或多个处理器上的任务同时运行。因此,在给这类深度学习类作业分配资源时,要么全部满足该作业中的多个任务运行所需要的资源,要么不要分配任何资源,因为部分资源满足只会导致资源浪费。因此,深度学习类作业中大作业的数量较多。
83.7、资源池化
84.由于深度学习类作业中大作业的数量较多,因此,深度学习类作业做需要的资源量较大。同时,由于运行深度学习类作业的资源,例如,计算节点的中央处理器(central processing unit,cpu)或者图形处理器(graphics processing unit,gpu)设备较为昂贵,因此,云数据中心成为这类作业运行的最佳载体。在云环境下,通过分时共享、资源弹性等方式,减轻单个用户的软硬件环境构架成本,最大化资源使用率。
85.8、资源分配
86.在私有云数据中心的场景下,即多用户共享资源池,不再是单人独享专有资源的模式,多个用户/租户会共享集群资源。因此,需要由专门的调度器为不同用户的作业进行调度,为作业的不同任务选择合适的节点运行。一方面可以满足作业对运硬件和软件环境的需求,另一方面也可以提高资源的利用率,达到资源共享分时复用的目的。
87.基本的资源分配,即在集群中的用户有资源需求时,对多用户的不同作业进行资源调度,为不同作业选择合适的节点和资源来放置任务。具体的,可以是根据一定的规则将集群中的空闲资源分配给用户,从而使得用户获得资源完成其作业/任务。
88.公平的资源分配,即多个用户/租户会共享集群资源,由于没有价格杠杆,因此,需要保证用户之间的资源公平分配,避免多个用户之间进行恶意的资源竞争。
89.作为示例,在私有云或者企业数据中心,集群总资源是有限的,多用户共享资源。一方面,当处理深度学习类作业负载时,由于处理数据量巨大,往往会造成中集群资源僧多粥少的局面。另一方面,用户在使用共享集群中,可能倾向于申请大量的资源,从而期望在各用户博弈中获得更多的资源。因此,在此类共享集群场景下,公平调度成为数据中心资源管理和调度的常用方法和机制。
90.一般,可以通过权重来定义不同用户期望能够获得的资源使用量,如a、b、c用户的权重为1:1:2,那么在作业充分竞争的情况下,a、b、c分别能够得到1/4、1/4、1/2的集群资源。a、b之间的作业不再有绝对的静态优先级配置,而是基于用户的权重和他们已经获得的资源计算出动态优先级,从而实现公平的资源分配。
91.在资源公平分配的场景中,用户的权重由管理员定义。集群管理员基于各方面因素(如各部门的人员或付出的成本等)为不同的用户或者部门分配权重,将其作为公平调度输入,用户可以任意提交作业或任务类资源需求,调度系统基于公平的资源分配方法,根据不同用户的权重、当前集群信息等自动为用户分配资源,使得用户能够获得相应权重的资源,保障用户对集群资源使用的公平性。
92.公平的资源分配一方面能够激励资源的充分共享,提高资源的利用率。另一方面,给出集群资源紧张场景下多用户的资源分配方案,避免恶意竞争,同时也避免用户的作业饿死问题发生。如果没有公平的资源分配机制,放任集群中的用户作业自由竞争,会导致恶意用户获得过度资源,占有整个集群,其他用户的作业饿死、失败,资源无序分配,企业的业务执行需求(如周期性的模型训练更新)无法及时响应,进而影响整个企业的业务运转。
93.9、层次化用户模型
94.在企业或者大型组织的实际资源使用和管理场景,所有用户的管理往往不是扁平化的,多个用户形成一个小组,多个小组形成一个部门,多个部门形成一个大的组织架构,这样层次化的用户模型往往更符合企业或者组织的管理需求。因此,在资源的公平分配方案中,需要考虑各个组织层面的公平分配需求,组织的层次化资源管理模型和各个组织的权重可以由管理员定义。资源分配方案需要根据集群资源使用情况和层次化管理模型分配资源,满足每一层级的公平分配需求。
95.相关的技术方案中,根据每个用户的历史资源使用信息和实时资源使用信息计算各个用户的动态优先级,为高优先级用户的作业的不同任务选择合适的节点(例如为服务器)并分配资源,从而用于运行高优先级用户的作业所包括的任务。
96.但是,由于该相关技术中,历史资源使用信息的权重(也可以称为影响因子)和实时资源使用信息的权重(也可以称为影响因子)的设置依赖于管理员的经验。一方面,基于管理员的经验配置的权重不是很准确,这样会导致资源分配不公平的问题。如果实时资源使用信息的权重设置过大,在大作业较多的场景,例如,深度神经网络模型的训练场景中,可能会导致实时资源使用信息较少的用户获得较多的资源,其他用户无法获得资源完成其作业/任务,从而出现其他用户的作业饿死的情况。如果历史资源使用信息的权重设置过大,会忽略用户实时资源的使用情况,不断的给高优先级(历史资源使用信息较少的用户优先级最高)分配用于运行其作业/任务的资源,在大作业较少,小作业较多的场景中,会出现一次性为高优先级的用户分配大量的资源,造成单个用户在单次循环时分配过多的资源,其他用户的排队时间较长等问题。另一方面,由于上述权重是在集群启动时管理员手动配置好的,其灵活性较差,只能适应集群作业类型单一,且长期不变的场景。如果集群中作业类型发生,上述权重不能够实时进行调整,从而导致资源分配不公平或其他作业饿死的问题。
97.有鉴于此,本技术提出了一种资源分配的方法以及资源分配的装置,通过实时自动感知和分析集群作业的特点,并根据集群作业的特点实时调整历史资源使用信息的权重和实时资源使用信息的权重。提高了参数配置的准确性,避免集群资源分配的参数设置对管理员的经验依赖,降低配置难度,从而减少不同场景下的作业饿死问题和不公平性等问题发生。
98.图3是适用于本技术实施例的一种可能的系统架构示意图。
99.如图3所示,该系统架构中可以包括控制节点310和基础硬件资源320。其中,控制节点310中可以包括用户图形界面/客户端311、作业管理服务312、资源管理服务313。
100.示意性地,用户图形界面/客户端311可以用于接收来自不同用户提交的作业。作业管理服务312可以用于对接收来自不同用户的作业进行管理与提交。资源管理服务313中可以包括资源管理装置3131以及资源分配装置3132,其中,资源管理装置3131可用于绑定以及释放资源,资源分配装置3132可根据不同作业的需求为作业调度资源。基础硬件资源320可以包括但不限于中央处理器(central processing unit,cpu)、内存、网络、gpu以及远程直接数据存取(remote direct memory access,rdma)。
101.示例性地,用户可以通过用户图形界面/客户端311提交作业;作业管理服务312接收到请求后可以对作业进行解析,并且将资源请求提交到资源管理服务313;资源管理服务313接收到请求后可以通过资源分配装置3132从所管理的基础硬件资源320(即底层物理资源)中选择合适的节点进行作业的放置;资源分配装置3132完成节点的选取后,在相应的节点上启动对应作业,这部分资源被该作业占用,直至该作业结束后通过资源管理装置3131释放该资源。
102.下面结合图4对本技术实施例的资源分配的方法进行详细的介绍。
103.图4所示的资源分配的方法可以由图3所示的资源分配装置3132来执行,应用于图3所示的系统架构中。图4所示的方法包括410-440,下面分别对步骤410-440进行详细描述。
104.步骤410:确定预设时间段内提交的多个作业的特征。
105.本技术实施例中可以确定过去一段时间内提交的多个作业的特征。具体的,作为示例,该多个作业的特征可以包括多个作业中高资源消耗的作业的占比。其中,该高资源消耗的作业的占比可以包括以下中的一种或多种:高资源消耗的作业的用户数量所占的用户比例、高资源消耗的作业的数量与所述多个作业的数量的比例。
106.应理解,高资源消耗的作业的用户数量所占的用户比例可以是高资源消耗的作业的用户数量和所有作业对应的用户数量的比值。该所有的作业可以是当前正在运行的历史作业和当前提交的作业,或者还可以是历史一段时间内的历史作业和当前提交的作业,本技术对此不做具体限定。
107.步骤420:根据所述多个作业的特征确定第一影响因子和第二影响因子。
108.第一影响因子为集群的历史资源使用信息对应的权重,所述第二影响因子是所述集群的实时资源使用信息对应的权重。应理解,在一些实施例中,第一影响因子和第二影响因子之和小于或等于1。
109.本技术实施例中,作业的特征和第一影响因子正相关,和第二影响因子负相关。作为示例,以作业的特征为多个作业中高资源消耗的作业的占比。也就是说,如果多个作业中高资源消耗的作业的占比较大,可以将第一影响因子设置的较大,将第二影响因子设置的较小;如果多个作业中高资源消耗的作业的占比较小,可以将第一影响因子设置的较小,将第二影响因子设置的较大。
110.一种可能的实现方式中,如果高资源消耗的作业的占比大于第二阈值,则将第一影响因子设置为一个和所述高资源消耗的作业的占比正相关的值,将第二影响因子设置为一个和所述高资源消耗的作业的占比负相关的值。另一种可能的实现方式中,如果高资源消耗的作业的占比小于或等于第二阈值,则将第一影响因子设置为一个和所述高资源消耗
的作业的占比正相关的值,将第二影响因子设置为一个和所述高资源消耗的作业的占比负相关的值。
111.步骤430:根据用户的历史资源使用信息、所述第一影响因子、实时资源使用信息以及所述第二影响因子确定目标用户。
112.本技术实施例中的目标用户可以是高优先级的用户,也就是说,对于集群中的多个用户而言,可以根据每个用户的历史资源使用信息、所述第一影响因子、每个用户的实时资源使用信息以及所述第二影响因子,对所述多个用户进行优先级的排序,并从该多个用户中选择出高优先级的用户。
113.需要说明的是,本技术实施例中确定出的第一影响因子和第二影响因子是针对整个集群而言的,也就是说,对于该集群中的多个用户而言,每个用户所使用的第一影响因子和第二影响因子是相同的。
114.可选地,在一些实施例中,还可以根据多个用户的历史资源使用信息确定所述多个用户的每个用户在集群中的历史资源使用占比,并根据所述至少一个用户的实时资源使用信息确定所述至少一个用户的每个用户在集群中的实时资源使用占比,从而根据所述多个用户的历史资源使用占比、所述第一影响因子、所述至少一个用户的实时资源使用占比以及所述第二影响因子确定所述目标用户。
115.步骤440:为目标用户提交的至少一个作业或任务分配资源。
116.本技术实施例中可以在确定了目标用户后,从该目标用户提交的至少一个作业中选择一个作业,并为该作业选择节点并分配任务。还可以从该目标用户的一个作业中包括的多个任务中选择一个任务,并为该任务选择节点并分配任务。
117.上述技术方案中,通过根据预设时间段内集群中提交的多个作业的特征确定集群的历史资源使用信息对应的权重以及集群的实时资源使用信息对应的权重。一方面,确定出的集群的历史资源使用信息对应的权重以及集群的实时资源使用信息对应的权重较准确。另一方面,上述权重的灵活性较好,在集群作业类型或特征发生变化时,集群的历史资源使用信息对应的权重以及集群的实时资源使用信息对应的权重也会进行相应的变化。这样,可以避免出现资源分配不公平或其他用户的作业饿死等问题。
118.可选地,在一些实施例中,还可以通过用户界面(user interface,ui)显示如下的一种或多种:所述多个作业的特征、所述第一影响因子和所述第二影响因子。其中,所述ui界面用于对所述第一影响因子和所述第二影响因子进行调整。
119.可选地,ui界面还可以显示如下的一种或多种:集群资源使用情况、作业排队情况等。
120.下面以图3所示的系统架构为例,结合图5中具体的例子,对步骤420的一种具体实现方式进行说明。
121.应理解,图5的例子仅仅是为了帮助本领域技术人员理解本技术实施例,而非要将申请实施例限制于图5的具体数值或具体场景。本领域技术人员根据所给出的例子,显然可以进行各种等价的修改或变化,这样的修改和变化也落入本技术实施例的范围内。
122.图5所示的方法可以包括步骤510-530,下面分别对步骤510-530进行详细描述。
123.步骤510:实时采集和记录集群中所有用户的任务运行情况。
124.本技术实施例中,集群中用户的任务运行情况可以包括但不限于:用户已完成任
务和正在运行任务的资源使用量、任务运行的起始时间等信息。
125.可选地,在一些实施例中,还可以通过滑动平均等方式对每个用户在过去一段时间的历史资源使用进行处理,增大近期资源使用对优先级分配的影响。
126.可选地,在一些实施例中,还可以通过周期性计算的方式,只记录每段周期内用户的资源使用量,无需实时更新,从而可以提高处理效率。
127.步骤520:统计和分析集群最近一段时间内的作业特点。
128.本技术实施例中,可以根据步骤510中采集和记录的集群中所有用户的任务运行情况确定该集群最近一段时间内的作业特点。该作业特点可以包括但不限于:高资源消息需求作业的数量和比例、作业平均等待时间、排队作业数量及所需资源等信息。
129.应理解,本技术实施例中的高资源消息需求的作业可以包括但不限于:大作业、长时作业。
130.下面介绍一种可能的确定用户提交的作业是否为大作业的方法。
131.本技术实施例中可以计算每个用户理论上应该获得资源量r
i
。若资源总量为total,一种可能的实现方式中,在用户没有权重的场景下,每个用户应得资源量其中,n是用户数量。另一种可能的实现方式中,在用户有权重的场景下,若用户权重为w
i
,则每个用户应得资源量如果某个任务或某个作业中需要同时调度的多个任务的资源需求超过了该用户的应得资源量r
i
,则可以将该作业确定为大作业。
132.下面介绍一种可能的确定用户提交的作业是否为长时作业的方法。
133.本技术实施例中,如果某个任务或者某个作业的运行时间超过了预设阈值,则可以将该作业确定为长时作业。
134.需要说明的是,上述预设阈值可以是历史资源使用统计的一个周期,或者也可以是以管理员自定义设置的值,本技术对此不做具体限定。
135.本技术实施例中,还可以将分析得到的集群最近一段时间内的作业特点通过可视化方式呈现给管理员,例如通过用户图形界面/客户端311呈现给管理员。
136.步骤530:根据集群最近一段时间内的作业特点确定历史资源使用的影响因子参数以及实时资源使用的影响因子参数。
137.本技术实施例中,可以获取集群最近一段时间内的作业特点,例如,高资源消息需求作业的数量和比例、作业平均等待时间等信息,从而计算出历史资源使用的影响因子参数的参考值以及实时资源使用的影响因子参数的参考值。
138.作为示例,可以确定过去一段时间内集群中高资源消耗的作业占比信息,并根据该高资源消耗的作业占比信息确定历史资源使用的影响因子参数的参考值。再根据历史资源使用的影响因子参数的参考值确定实时资源使用的影响因子参数的参考值。
139.具体的,如果过去一段时间内集群中高资源消耗的作业占比越大,那么倾向于基于历史资源使用进行资源分配,可以将历史资源使用的影响因子参数的参考值设为较高,这样能够避免用户的这类大作业饿死。反之,如果该高资源消耗的作业占比越小,那么倾向于基于实时资源使用占比进行资源分配,可以将实时资源使用的影响因子参数的参考值设
为较高,这样,在小作业较多的场景中,可以避免出现一次性为高优先级的用户分配大量的资源,造成单个用户在单次循环时分配过多的资源,其他用户的排队时间较长等问题。
140.应理解,确定过去一段时间内集群中高资源消耗的作业占比信息的实现方式有多种,本技术实施例对此不做具体限定。一种可能的实现方式中,高资源消耗的作业占比可以是过去一段时间内高资源消耗的作业数量与过去一段作业总量的比值。另一种可能的实现方式中,高资源消耗的作业占比还可以是过去一段时间内提交该高资源消耗的作业的用户数量与总用户数量的比值。
141.具体的,假设高资源消耗的作业占比为β,本技术实施例中可以基于高资源消耗的作业占比β计算出历史资源使用的影响因子的参考值α,其中,影响因子的参考值α和高资源消耗的作业占比β线性相关。例如,α=kβ v,其中,k和v可以根据算法自行设置,能够保证α≤1即可。
142.需要说明的是,k和v无需管理员配置,由算法开发设置好即可。例如,k=0.8,v=0.2。又如,k=1,v=0。
143.本技术实施例中,历史资源使用的影响因子的参考值为α,实时资源使用的影响因子的参考值即为1-α。
144.本技术实施例中,还可以将历史资源使用的影响因子的参考值和实时资源使用的影响因子的参考值通过可视化方式呈现给管理员,例如通过用户图形界面/客户端311呈现给管理员。
145.一种可能的实现方式中,管理员可以通过用户图形界面/客户端311获取集群最近一段时间内的作业特点,并基于该作业特点对历史资源使用的影响因子的参考值和实时资源使用的影响因子的参考值进行修改或调整,从而根据修改或调整后的历史资源使用的影响因子的参考值和实时资源使用的影响因子的参考值确定用户的优先级。这样,管理员可以跟随根据集群运行情况调整历史资源使用和实时资源使用的影响因子参数的取值,使得该影响因子参数的取值更准确,从而实现集群内资源的公平分配。另一种可能的实现方式中,管理员也可以选择不对历史资源使用的影响因子的参考值和实时资源使用的影响因子的参考值进行修改或调整。
146.另一种可能的实现方式中,管理员还可以通过用户图形界面/客户端311界面选择自动执行方式,直接根据历史资源使用的影响因子的参考值和实时资源使用的影响因子的参考值确定用户的优先级。这样,可以让参数自动执行更新,减少管理员的人工参与。
147.下面以图3所示的系统架构为例,结合图6中具体的例子,对步骤430的一种具体实现方式进行说明。
148.应理解,图6的例子仅仅是为了帮助本领域技术人员理解本技术实施例,而非要将申请实施例限制于图6的具体数值或具体场景。本领域技术人员根据所给出的例子,显然可以进行各种等价的修改或变化,这样的修改和变化也落入本技术实施例的范围内。
149.图6所示的方法可以包括步骤610-650,下面分别对步骤610-650进行详细描述。
150.步骤610:计算每个用户的历史资源使用占比。
151.本技术实施例中,可以统计每个用户的所有任务在过去一段时间内的历史资源使用信息。该历史资源的使用信息可以是已完成任务的资源使用量
×
资源使用时间。并根据该历史资源的使用信息计算每个用户的历史资源使用占比。
152.作为示例,对于每一个用户,每一维资源可以单独统计,并计算每个用户单维资源在整个集群中的历史使用占比(也可以简称为历史资源使用占比)。应理解,在其多维资源使用占比中,可以找出其主导使用的资源维度。一般性地,可以取多维资源中的最大值,作为该用户最终的历史资源使用占比。
153.步骤620:计算每个用户的实时资源使用占比。
154.本技术实施例中,可以获取每个用户正在运行任务的资源使用量,并根据该资源使用量确定该用户的实时资源使用占比。
155.应理解,计算每个用户的实时资源使用占比的方法与上述计算每个用户的历史资源使用占比类似,对于每一个用户,也可以计算每个用户单维资源在整个集群中的实时资源使用占比。
156.步骤630:根据每个用户的历史资源使用占比和实时资源使用占比计算每个用户的最终资源使用占比。
157.本技术实施例中,可以根据历史资源使用占比、历史资源使用的影响因子α、实时资源使用占比、实时资源使用的影响因子1-α,采用加权求和的方式确定每个用户的最终资源使用占比。作为示例,用户的最终资源使用占比=历史资源使用占比*α 实时资源使用占比*(1-α)。
158.步骤640:找出优先级最高的用户。
159.本技术实施例中,还可以根据用户的最终资源使用占比动态确定用户的优先级。具体的实现方式有多种,下面介绍两种可能的实现方式。
160.一种可能的实现方式中,在每个用户的权重相同的情况下,最终资源使用占比最小的用户的优先级最高,并优先尝试为该最高优先级的用户提交的作业/任务分配资源。
161.另一种可能的实现方式中,在每个用户的权重不相同的情况下,每个用户的权重即该用户应得的资源。可以通过对比用户最终资源使用占比和应得资源占比,找出优先级最高的用户。例如,计算用户最终资源使用占比和应得资源占比的比值,该比值越小,说明该用户的优先级越高,可以优先尝试为该最高优先级的用户提交的作业/任务分配资源。
162.步骤650:为最高优先级的用户提交的作业/任务分配资源。
163.本技术实施例中,在确定出最高优先级的用户之后,还可以确定该用户提交的任务/作业中优先级最高的任务/作业,并根据集群运行情况,优先尝试为该最高优先级的任务/作业从所管理的基础硬件资源320(即底层物理资源)中选择合适的节点进行任务/作业的放置。
164.应理解,上述集群运行情况可以包括但不限于:集群总资源、节点数量、资源利用率等。
165.上述技术方案中,通过引入集群作业负载特征的自动分析和感知机制,将集群负载特点和建议的影响因子参数呈现给管理员,以便以半自动化或全自动化的方式做出集群配置的最佳决策。管理员可以设置让集群自动化的计算和更新算法参数配置,也可以根据系统给出的建议值和自己的经验手动调整集群的这类配置参数,从而避免了对管理员的经验依赖,提高参数配置的准确性,减少参数设置的不当可能产生的资源分配不公平的问题。
166.应理解,上述举例说明是为了帮助本领域技术人员理解本技术实施例,而非要将本技术实施例限于所例示的具体数值或具体场景。本领域技术人员根据所给出的上述举例
说明,显然可以进行各种等价的修改或变化,这样的修改或变化也落入本技术实施例的范围内。
167.上文结合图1至图6,详细描述了本技术实施例中的资源分配的方法,下面将结合图7和图8,详细描述本技术的装置实施例。应理解,本技术实施例中的资源分配的装置可以执行前述本技术实施例的各种资源分配的方法,即以下各种产品的具体工作过程,可以参考前述方法实施例中的对应过程。
168.图7是本技术实施例提供的资源分配的装置700的示意性框图。
169.应理解,资源分配的装置700能够执行图4至图6所示的资源分配的方法中的各个步骤,为了避免重复,此处不再详述。资源分配的装置700包括:确定模块710,
170.确定模块710,用于确定预设时间段内提交的多个作业的特征;
171.所述确定模块710还用于,根据所述多个作业的特征确定第一影响因子和第二影响因子,其中,所述第一影响因子为集群的历史资源使用信息对应的权重,所述第二影响因子是所述集群的实时资源使用信息对应的权重;
172.所述确定模块710还用于,根据用户的历史资源使用信息、所述第一影响因子、实时资源使用信息以及所述第二影响因子确定目标用户。
173.可选地,所述多个作业的特征包括所述多个作业中高资源消耗的作业的占比,所述高资源消耗的作业为占用的资源大于第一阈值的作业。
174.可选地,所述高资源消耗的作业的占比包括以下中的一种或多种:所述高资源消耗的作业的用户数量所占的用户比例、所述高资源消耗的作业的数量与所述多个作业的数量的比例。
175.可选地,所述确定模块710具体用于:如果所述高资源消耗的作业的占比大于第二阈值,则将所述第一影响因子设置为与所述占比正相关的值;如果所述高资源消耗的作业的占比小于或等于所述第二阈值,则将所述第一影响因子设置为与所述占比正相关的值。
176.可选地,还包括:显示模块720,用于通过用户界面ui显示如下的一种或多种:所述多个作业的特征、所述第一影响因子和所述第二影响因子;其中,所述ui界面用于对所述第一影响因子和所述第二影响因子进行调整。
177.可选地,所述确定模块710具体用于:根据多个用户的历史资源使用信息确定所述多个用户的每个用户在集群中的历史资源使用占比;根据所述至少一个用户的实时资源使用信息确定所述至少一个用户的每个用户在集群中的实时资源使用占比;根据所述多个用户的历史资源使用占比、所述第一影响因子、所述至少一个用户的实时资源使用占比以及所述第二影响因子确定所述目标用户。
178.可选地,所述第一影响因子与所述高资源消耗的作业的占比正相关,所述第二影响因子与所述高资源消耗的作业的占比负相关。
179.可选地,所述确定模块710具体用于:根据用户的历史资源使用信息、所述第一影响因子、实时资源使用信息、所述第二影响因子以及用户的权重确定所述目标用户。
180.应理解,这里的资源分配的装置700以功能单元的形式体现。这里的术语“单元”可以通过软件和/或硬件形式实现,对此不作具体限定。
181.例如,“单元”可以是实现上述功能的软件程序、硬件电路或二者结合。所述硬件电路可能包括应用特有集成电路(application specific integrated circuit,asic)、电子
电路、用于执行一个或多个软件或固件程序的处理器(例如共享处理器、专有处理器或组处理器等)和存储器、合并逻辑电路和/或其它支持所描述的功能的合适组件。
182.因此,在本技术的实施例中描述的各示例的单元,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
183.图8是本技术实施例提供的资源分配的装置800的硬件结构示意图。
184.图8所示的资源分配的装置800可以包括存储器801、处理器802、通信接口803以及总线804。其中,存储器801、处理器802、通信接口803通过总线804实现彼此之间的通信连接。
185.存储器801可以是只读存储器(read-only memory,rom),静态存储设备和随机存取存储器(random access memory,ram)。存储器801可以存储程序,当存储器801中存储的程序被处理器802执行时,处理器802和通信接口803用于执行本技术实施例的资源分配的方法的各个步骤,例如,可以执行图4至图6所示的资源分配的方法的各个步骤。
186.处理器802可以采用通用的cpu、微处理器、asic、gpu或者一个或多个集成电路,用于执行相关程序,以实现本技术实施例的图7所示的资源分配的装置中的单元所需执行的功能,或者执行本技术方法实施例的资源分配的方法。
187.处理器802还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本技术实施例的资源分配的方法的各个步骤可以通过处理器802中的硬件的集成逻辑电路或者软件形式的指令完成。
188.上述处理器802还可以是通用处理器、dsp、asic、fpga或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器801,处理器802读取存储器801中的信息,结合其硬件完成本技术实施例的资源分配的装置中包括的单元所需执行的功能,或者执行本技术方法实施例的资源分配的方法。
189.例如,处理器802可以与图7所示的资源分配的装置中的确定模块710对应。
190.通信接口803使用例如但不限于收发器一类的收发装置,来实现资源分配的装置800与其他设备或通信网络之间的通信。
191.总线804可包括在资源分配的装置800各个部件(例如,存储器801、处理器802、通信接口803)之间传送信息的通路。
192.应注意,尽管上述资源分配的装置800仅仅示出了存储器、处理器、通信接口,但是在具体实现过程中,本领域的技术人员应当理解,资源分配的装置800还可以包括实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当理解,上述资源分配的装置800还可包括实现其他附加功能的硬件器件。此外,本领域的技术人员应当理解,上述资源分配的装置800也可仅仅包括实现本技术实施例所必须的器件,而不必包括图8中所
示的全部器件。
193.本技术实施例还提供一种芯片,该芯片包括收发单元和处理单元。其中,收发单元可以是输入输出电路、通信接口;处理单元为该芯片上集成的处理器或者微处理器或者集成电路;该芯片可以执行上述方法实施例中的资源分配的方法。
194.本技术实施例还提供一种计算机可读存储介质,其上存储有指令,该指令被执行时执行上述方法实施例中的资源分配的方法。
195.本技术实施例还提供一种包含指令的计算机程序产品,该指令被执行时执行上述方法实施例中的资源分配的方法。
196.应理解,本技术实施例中的处理器可以为中央处理单元(central processing unit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
197.还应理解,本技术实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,rom)、可编程只读存储器(programmable rom,prom)、可擦除可编程只读存储器(erasable prom,eprom)、电可擦除可编程只读存储器(electrically eprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(random access memory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(random access memory,ram)可用,例如静态随机存取存储器(static ram,sram)、动态随机存取存储器(dram)、同步动态随机存取存储器(synchronous dram,sdram)、双倍数据速率同步动态随机存取存储器(double data rate sdram,ddr sdram)、增强型同步动态随机存取存储器(enhanced sdram,esdram)、同步连接动态随机存取存储器(synchlink dram,sldram)和直接内存总线随机存取存储器(direct rambus ram,dr ram)。
198.上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令或计算机程序。在计算机上加载或执行所述计算机指令或计算机程序时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质。半导体介质可以是固态硬盘。
199.应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况,其中a,b可以是单数或者复数。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的
关系,但也可能表示的是一种“和/或”的关系,具体可参考前后文进行理解。
200.本技术中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
201.应理解,在本技术的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
202.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
203.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
204.在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
205.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
206.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
207.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
208.以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献