一种任务部署方法、装置、电子设备及存储介质

文档序号:7307 发布日期:2021-09-17 浏览:23次 英文

一种任务部署方法、装置、电子设备及存储介质

技术领域

本公开涉及图像处理应用

技术领域

,尤其涉及一种任务部署方法、装置、电子设备及存储介质。

背景技术

随着深度学习技术的迅速发展,以深度学习训练任务为代表的多角色多副本计算任务,在集群中如何调度资源部署执行,已成为计算平台必须面对的问题。

特别地,针对部分TensorFlowc++训练任务,相关平台主要采用较为传统的整机固定比例分配角色、多进程绑核部署的方式进行任务部署,这样一来,势必导致计算资源使用不充分、环境未充分隔离导致绑核效果打折扣等问题。在计算资源紧张、业务吞吐压力大的现状下,我们提出一种基于容器化绑核的任务部署模式,任务调度更快捷,对环境的统一性强保证,同时显著提升集群整体算力。

因此,如何在计算资源紧张、业务吞吐压力大的现状下,确保任务调度更加快捷以及环境的统一性,同时显著提升集群整体算力已成为亟待解决的问题。

发明内容

本公开提供一种任务部署方法、装置、电子设备及存储介质,以至少解决相关技术中存在的计算资源使用不充分、环境未充分隔离导致绑核效果打折扣等问题。本公开的技术方案如下:

根据本公开实施例的第一方面,提供一种任务部署方法,包括:在第一物理机上部署第一容器,其中,所述第一容器内用于运行参数服务器对应的第一任务进程;在所述第一物理机和第二物理机上分别部署第二容器,其中,所述第二容器用于运行工作服务器对应的第二任务进程或样本服务器对应的第三任务进程,所述第二物理机为与所述第一物理机不同的物理机。

根据本公开的一个实施例,所述在所述第一物理机和第二物理机上分别部署第二容器,包括:根据预设的优先级顺序在所述第一物理机和所述第二物理机上分别部署所述第二容器,所述预设的优先级顺序为所述第一物理机的优先级高于所述第二物理机的优先级。

根据本公开的一个实施例,所述第一容器内运行单个所述第一任务进程,所述第二容器内运行单个所述第二任务进程或所述第三任务进程。

根据本公开的一个实施例,还包括:对所述第一容器和所属的所述第一物理机的中央处理器进行绑核;对所述第二容器和所属的所述第一物理机或所述第二物理机的中央处理器进行绑核。

根据本公开的一个实施例,所述对所述第一容器和所属的所述第一物理机的中央处理器进行绑核;对所述第二容器和所属的所述第一物理机或所述第二物理机的中央处理器进行绑核,包括:对所述第一容器和所属的所述第一物理机的中央处理器进行物理绑核;对所述第二容器和所属的所述第一物理机或所述第二物理机的中央处理器进行物理绑核。

根据本公开的一个实施例,所述在第一物理机上部署第一容器,包括:若在所述参数服务器上堆积的梯度更新任务的数量不超过堆积数量阈值,则在所述第一物理机上部署所述第一容器。

根据本公开的一个实施例,所述在所述第一物理机和第二物理机上分别部署第二容器,包括:若所述样本服务器缓存的待训练样本数据未被读空,则在所述第一物理机和所述第二物理机上分别部署所述第三任务进程对应的所述第二容器。

根据本公开的一个实施例,所述在所述第一物理机和第二物理机上分别部署第二容器,包括:根据所述第一物理机上的容器占用率,在所述第一物理机和第二物理机上分别部署所述第二任务进程对应的所述第二容器和/或所述第三任务进程对应的所述第二容器。

根据本公开实施例的第二方面,提供一种任务部署装置,所述装置包括:第一部署单元,被配置为执行在第一物理机上部署第一容器,其中,所述第一容器内用于运行参数服务器对应的第一任务进程;

第二部署单元,被配置为执行在所述第一物理机和第二物理机上分别部署第二容器,其中,所述第二容器用于运行工作服务器对应的第二任务进程或样本服务器对应的第三任务进程,所述第二物理机为与所述第一物理机不同的物理机。

根据本公开的一个实施例,所述第一部署单元,还被配置为执行:根据预设的优先级顺序在所述第一物理机和所述第二物理机上分别部署所述第二容器,所述预设的优先级顺序为所述第一物理机的优先级高于所述第二物理机的优先级。

根据本公开的一个实施例,所述第一容器内运行单个所述第一任务进程,所述第二容器内运行单个所述第二任务进程或所述第三任务进程。

根据本公开的一个实施例,还包括:绑核单元,被配置为执行对所述第一容器和所属的所述第一物理机的中央处理器进行绑核;对所述第二容器和所属的所述第一物理机或所述第二物理机的中央处理器进行绑核。

根据本公开的一个实施例,所述绑核单元,还被配置为执行:对所述第一容器和所属的所述第一物理机的中央处理器进行物理绑核;对所述第二容器和所属的所述第一物理机或所述第二物理机的中央处理器进行物理绑核。

根据本公开的一个实施例,所述第一部署单元,还被配置为执行:若在所述参数服务器上堆积的梯度更新任务的数量不超过堆积数量阈值,则在所述第一物理机上部署所述第一容器。

根据本公开的一个实施例,所述第二部署单元,还被配置为执行:若所述样本服务器缓存的待训练样本数据未被读空,则在所述第一物理机和所述第二物理机上分别部署所述第三任务进程对应的所述第二容器。

根据本公开的一个实施例,所述第二部署单元,还被配置为执行:根据所述第一物理机上的容器占用率,在所述第一物理机和第二物理机上分别部署所述第二任务进程对应的所述第二容器和所述第三任务进程对应的所述第二容器。

根据本公开实施例的第三方面,提供一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如本公开第一方面提供的方法。

根据本公开实施例的第四方面,提供一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如本公开第一方面提供的方法。

根据本公开实施例的第七方面,提供一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如本公开第一方面提供的方法。

本公开的实施例提供的技术方案至少带来以下有益效果:

本公开通过在第一物理机上部署第一容器,其中,第一容器内用于运行参数服务器对应的第一任务进程,并在第一物理机和第二物理机上分别部署第二容器,其中,第二容器用于运行工作服务器对应的第二任务进程或样本服务器对应的第三任务进程,第二物理机为与第一物理机不同的物理机,以实现任务部署。由此,本公开不再依赖整机固定比例分配角色、同时将多个任务进程部署于单台物理机上的方式进行任务部署,而是基于进程的不同计算密集特点、结合容器化部署方式实现任务部署,使资源之间形成了物理隔离,从而减少了资源竞争,提高了任务部署效率,并根据训练各角色的计算密集特点和当前任务的负载状况等作为依据,可实现各角色的资源使用及副本数量的灵活调整。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。

图1是根据一示例性实施例示出的一种物理机上的任务部署方式的示意图。

图2是根据一示例性实施例示出的一种任务部署方法的流程图。

图3是根据一示例性实施例示出的另一种物理机上的任务部署方式的示意图。

图4是根据一示例性实施例示出的一种任务部署装置的框图。

图5是根据一示例性实施例示出的另一种任务部署装置的框图。

图6是根据一示例性实施例示出的一种电子设备的框图。

具体实施方式

为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。

需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

需要说明的是,相关技术中,通常以整机为单位,在每台物理机上按固定比例分配各任务进程,任务进程数量比例根据各机器计算资源量和各任务进程所需计算资源量来确定。

举例而言,如图1所示,共有1-1~1-3,3台物理机,在每台物理机上部署任务进程数量比例固定,即Worker:Ps的比例为3:1。其中,针对密集型任务进程,Worker在核(core)数量为64或更多的物理机上通常可部署多个。

此种情况下,物理机为保障训练任务的运行环境正确、统一,势必导致任务部署效率极低,且需要投入更大的运维成本。

由此,本公开提出的任务部署方法,能够基于容器化部署方式提升训练任务的单位时间样本吞吐以及任务部署效率。

图2是根据一示例性实施例示出的一种任务部署方法的流程图。其中,需要说明的是,本公开的任务部署方法的执行主体为任务部署装置。本公开实施例的任务部署方法可以由本公开实施例的任务部署装置执行,任务部署装置具体可以为硬件设备,或者硬件设备中的软件等。其中,硬件设备例如终端设备、服务器等。如图2所示,本实施例提出的任务部署方法,包括以下步骤:

在步骤101中,在第一物理机上部署第一容器,其中,第一容器内用于运行参数服务器对应的第一任务进程。

其中,第一物理机,可以为任一物理机。

其中,第一容器,可以为参数服务器(Parameter Server,简称Ps)。

需要说明的是,训练的Ps任务进程因其需要独占物理机的SHM(公用媒介),此种情况下,可以在第一物理机上部署第一容器,第一容器内用于运行参数服务器对应的第一任务进程。

在步骤102中,在第一物理机和第二物理机上分别部署第二容器,其中,第二容器用于运行工作服务器对应的第二任务进程或样本服务器对应的第三任务进程,第二物理机为与第一物理机不同的物理机。

需要说明的是,本公开中对于在第一物理机和第二物理机上分别部署第二容器的具体方式不作限定,可以根据实际情况进行选取。

可选地,训练的示例服务器(SampleServer)和工作服务器(Worker)作为重度计算密集型任务,可以优先在Ps所占物理机上,即第一物理机上,分配其剩余资源部署一个或多个第二容器。进一步地,可以在新的物理机上,即第二物理机上,分配资源部署一个或多个第二容器。

本公开不再依赖整机固定比例分配角色、同时将多个任务进程部署于单台物理机上的方式进行任务部署,而是基于进程的不同计算密集特点、结合容器化部署方式实现任务部署,使资源之间形成了物理隔离,从而减少了资源竞争,提高了任务部署效率,并根据训练各角色的计算密集特点和当前任务的负载状况等作为依据,可实现各角色的资源使用及副本数量的灵活调整。

需要说明的是,相关技术中,任务占用若干台完整的物理机,每种角色(Worker、Ps)启动多个进程。此种情况下,由于Worker为计算密集型角色,因此对各Worker进程绑核,即进程绑定指定的CPU集合。同时,由于Ps整体上不是计算密集型角色,因此不进行绑核。在单台物理机上,各任务各进程均部署在同一环境下。

本公开中,每种任务的每个进程均部署在独立的容器中,即每个容器中只运行一个任务进程。在单台物理机上,可部署多个不同任务进程的容器。此种情况下,容器在完成物理绑核之后,容器间竞争的主要资源为网卡带宽与外存储器(IO),在当前大多数训练任务中共享带宽与磁盘尚未形成性能瓶颈。

需要说明的是,本公开中,在试图在第一物理机和第二物理机上分别部署第二容器时,可以基于预先设定的顺序进行部署。可选地,可以根据预设的优先级顺序在第一物理机和第二物理机上分别部署第二容器。其中,预设的优先级顺序为第一物理机的优先级高于第二物理机的优先级。

本公开通过根据预设的优先级顺序在第一物理机和第二物理机上分别部署第二容器,预设的优先级顺序为第一物理机的优先级高于第二物理机的优先级,使得对应于计算密集型角色的第二容器可以优先部署在对应于非计算密集型角色的第一物理机上,以实现根据训练任务各角色的差异化需求进行任务部署的目的。

进一步地,本公开中,训练的Ps由于具有大内存使用量的特点仅能部署单个进程的特点,且Worker为重度计算密集型任务,由此,第一容器内可以运行单个第一任务进程,第二容器内可以运行单个第二任务进程或第三任务进程。

本公开通过第一容器内运行单个第一任务进程,第二容器内运行单个第二任务进程或第三任务进程,使得针对单台物理机,内存使用量较大的第一容器中仅部署单个进程,并在第二容器中部署计算密集型进程,在确保了第一任务进程、第二任务进程和第三任务进程的运行效果的同时,实现了更充分的资源利用。

需要说明的是,相关技术中,由于多个任务进程均部署在同一环境内,即均部署于单台物理机上。这样一来,势必导致CPU(Central Processing Unit,中央处理器)资源相互竞争,进而导致为计算密集型Worker设计的进程的绑核效果不佳。

由此,本公开中,可以以容器为单位,对第一容器和所属的第一物理机的中央处理器进行绑核,并对第二容器和所属的第一物理机或第二物理机的中央处理器进行绑核。

本公开通过对第一容器和所属的第一物理机的中央处理器进行绑核,并对第二容器和所属的第一物理机或第二物理机的中央处理器进行绑核,通过以容器为单位进行绑核,使得容器内仅运行单个角色的单个进程,降低了进程间的cpu的竞争,并降低了抢核的上下文切换开销。

可选地,可以对第一容器和所属的第一物理机的中央处理器进行物理绑核,并对第二容器和所属的第一物理机或第二物理机的中央处理器进行物理绑核。

下面以训练任务运行在Kubernete(容器编排工具)集群为例,对通过修改物理机上的kubelet服务配置,实现容器的CPU绑核过程进行解释说明。

可选地,可以停止机器上的kubelet(节点代理)服务。

进一步地,可以向/etc/systemd/system/kubelet.service的ExecStart配置中,注入配置项--cpu-manager-policy=static。

进一步地,可以删除kubelet/cpu_manager_state缓存文件。

进一步地,可以重启机器上的kubelet服务。

由此,训练任务运行在Kubernete集群时,可以通过每台物理机节点上的kubelet服务,实现对物理机节点的资源掌控,从而将任务调度到适合的节点上。

本公开通过对第一容器和所属的第一物理机的中央处理器进行物理绑核,并对第二容器和所属的第一物理机或第二物理机的中央处理器进行物理绑核,不再依赖逻辑绑核方式,通过物理绑核方式,使得资源隔离更加充分。

需要说明的是,相关技术中,由于各台机器上任务进程数量比例固定,计算资源利用不充分。这样一来,在实际应用中,在按照一定比例分配资源的训练任务中,极可能出现其中某个任务资源过剩、其他任务资源不足的情形,但由于整机部署、分配比例固定,不能灵活调整,导致资源浪费。由此,本公开中可以针对各容器按需分配计算资源。

本公开实施例中,针对训练,Ps的计算资源分配,以不使Ps成为明显训练瓶颈,即梯度更新任务不在Ps上堆积过多为指标;SampleServer同样作为训练支撑服务,其计算资源分配以不使SampleServer成为明显训练瓶颈,即缓存的待训练Batch(批处理)不被读空为指标。此外,针对SampleServer和Worker的计算资源分配,还要考虑除去Ps占用资源外,能恰好完整地分配掉剩余资源,在容器分配利用率上尽可能达到100%,不出现计算资源的边角余料。其中,整体分配指标上以CPU资源为主,内存、外存、网络带宽等以保障够用为辅。

针对在第一物理机上部署第一容器阶段,作为一种可能的实现方式,若在参数服务器上堆积的梯度更新任务的数量不超过堆积数量阈值,则在第一物理机上部署第一容器。

本公开通过在第一物理机上部署第一容器时,若在参数服务器上堆积的梯度更新任务的数量不超过堆积数量阈值,则在第一物理机上部署第一容器,以避免参数服务器上堆积的梯度更新任务的数量超过堆积数量阈值时,致使第一容器成为明显训练瓶颈的技术问题。

针对在第一物理机和第二物理机上分别部署第二容器阶段,作为一种可能的实现方式,若样本服务器缓存的待训练样本数据未被读空,则在第一物理机和第二物理机上分别部署第三任务进程对应的第二容器。

本公开通过在第一物理机和第二物理机上分别部署第二容器时,若样本服务器缓存的待训练样本数据未被读空,则在第一物理机和第二物理机上分别部署第三任务进程对应的第二容器,以避免样本服务器缓存的待训练样本数据被读空时,致使第二容器成为明显训练瓶颈的技术问题。

作为另一种可能的实现方式,可以根据第一物理机上的容器占用率,在第一物理机和第二物理机上分别部署第二任务进程对应的第二容器和/或第三任务进程对应的第二容器。

本公开通过在第一物理机和第二物理机上分别部署第二容器时,根据第一物理机上的容器占用率,在第一物理机和第二物理机上分别部署第二任务进程对应的第二容器和/或第三任务进程对应的第二容器,使得通过综合考虑除去第一容器占用资源外,能够确保可以将剩余资源全部分配,尽可能提升容器分配利用率,避免计算资源边角预料的产生。

这样一来,基于上述分配策略,可以使有限的资源被尽可能充分利用起来,提升训练Kubernete集群整体的吞吐能力,核心优势体现在容器化部署、对容器绑核、计算资源按需分配三个方面。

下面分别针对容器化部署、对容器绑核和计算资源按需分配三个方面进行解释说明。

针对容器化部署,不仅在环境保障及运维上有诸多好处,而且使得资源分配摆脱以整机为最小单位的束缚。任务不再必须占用若干台完整的同型号物理机,有助于实现多型号集群、多任务混布集群,甚至离线任务与承接潮汐型流量的在线服务混布。

针对对容器绑核,容器内运行的单进程不再进行绑核,可屏蔽物理机上运行的其他非任务进程(通常为一些运维进程)与任务进程的CPU竞争。不同于以往对部分非计算密集型角色的考量而采用的部分进程绑核、部分进程非绑核方案,本公开对所有容器绑核,可有效避免任务进程建的CPU竞争。具体到深度学习训练任务,相关技术中,对Ps的非计算密集型的判定是从整体上作出的,由于Worker需访问所有Ps分片且id分配不可能完全均匀,Ps会出现瓶颈效应,整体看来大多数Ps无法占满cpu资源,实际在较短的时间片上总会有至少一个Ps占满cpu资源(代码实现合理且带宽未满的情况下)。因此,即便是单独来看Ps角色的容器,绑核同样有性能收益。

需要说明的是,上述容器绑核方式可以适用于多种场景下,例如资源超卖、在离线混布等。容器按时间片分配资源亦有其实用价值。此外,绑核容器内的进程仍然可以再根据需求对线程绑核,二者并无冲突。

此外,绑核模式采用物理绑核,即进程绑定core,与逻辑绑核,即进程绑定processor相比资源隔离更充分。举例而言,c机器有2个物理CPU(Physical CPU),每个physical CPU包含16个core,每个core对应2个processor,processor0和processor32对应同一个core,依次类推。

针对计算资源按需分配,以绑核容器化部署为基础,各任务的计算资源和副本数量可以按需分配。如图3所示,在N台机器的集群中,可以在Ps资源充裕时部署少于N个Ps容器,节省下的计算资源可部署Worker容器,从而提高整体吞吐。此外,更多类型的角色如SampleServer加入训练任务也可更灵活的分配。SampleServer为计算密集型服务,在不同的业务场景下对计算资源的需求差异极大,在传统的固定比例分配模式下非常浪费CPU资源,绑核容器化部署下的按需分配即可解决该问题。与前文图对应,本方案的部署例子如上图所示。

本公开通过针对各容器按需分配计算资源,根据训练各任务进程的计算密集特点和当前任务的负载状况,灵活地调整各任务进程的资源使用及副本数量。

进一步地,基于本公开提出的任务部署方法,平台可以迁移设置和极速版触发模型、电商精排模型、调研模型、eyeshot_cascade模型、全链路优化组直播间透出模型等训练任务,依据支持绑核容器化部署后,性能收益(单位时间的样本吞吐量/占用物理机数量)均超过50%(已排除SampleServer优化收益)。在线预估服务上也获得了不同程度的性能收益。不仅训练任务的样本吞吐量提高了,而且通过监测各容器内的进程发现,CPU占用率基本占满分配资源,符合设计预期,整体上提高了集群的计算资源使用率。各训练任务迁移到新平台后,平均节省了50%的机器资源。

图4是根据一示例性实施例示出的一种任务部署装置的框图。如图4所示,该任务部署装置100,包括:第一部署单元11和第二部署单元12。

其中,第一部署单元11,被配置为执行在第一物理机上部署第一容器,其中,所述第一容器内用于运行参数服务器对应的第一任务进程;

第二部署单元12,被配置为执行在所述第一物理机和第二物理机上分别部署第二容器,其中,所述第二容器用于运行工作服务器对应的第二任务进程或样本服务器对应的第三任务进程,所述第二物理机为与所述第一物理机不同的物理机。

可选地,第一部署单元11,还被配置为执行:

根据预设的优先级顺序在所述第一物理机和所述第二物理机上分别部署所述第二容器,所述预设的优先级顺序为所述第一物理机的优先级高于所述第二物理机的优先级。

可选地,所述第一容器内运行单个所述第一任务进程,所述第二容器内运行单个所述第二任务进程或所述第三任务进程。

可选地,如图5所示,图4中的任务部署装置100,还包括:

绑核单元13,被配置为执行对所述第一容器和

所属的所述第一物理机的中央处理器进行绑核;

对所述第二容器和所属的所述第一物理机或所述第二物理机的中央处理器进行绑核。

可选地,绑核单元13,还被配置为执行:

对所述第一容器和所属的所述第一物理机的中央处理器进行物理绑核;

对所述第二容器和所属的所述第一物理机或所述第二物理机的中央处理器进行物理绑核。

可选地,第一部署单元11,还被配置为执行:

若在所述参数服务器上堆积的梯度更新任务的数量不超过堆积数量阈值,则在所述第一物理机上部署所述第一容器。

可选地,第二部署单元12,还被配置为执行:

若所述样本服务器缓存的待训练样本数据未被读空,则在所述第一物理机和所述第二物理机上分别部署所述第三任务进程对应的所述第二容器。

可选地,第二部署单元12,还被配置为执行:

根据所述第一物理机上的容器占用率,在所述第一物理机和第二物理机上分别部署所述第二任务进程对应的所述第二容器和所述第三任务进程对应的所述第二容器。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

本公开不再依赖整机固定比例分配角色、同时将多个任务进程部署于单台物理机上的方式进行任务部署,而是基于进程的不同计算密集特点、结合容器化部署方式实现任务部署,使资源之间形成了物理隔离,从而减少了资源竞争,提高了任务部署效率,并根据训练各角色的计算密集特点和当前任务的负载状况等作为依据,可实现各角色的资源使用及副本数量的灵活调整。

为了实现上述实施例,本公开还提供了一种电子设备,如图6所示,所述电子设备8000包括:处理器801;用于存储所述处理器801可执行指令的一个或多个存储器802;其中,所述处理器801被配置为执行上述实施例所述的任务部署方法。处理器801和存储器802通过通信总线连接。

在示例性实施例中,本公开还提供了一种包括指令的计算机可读存储介质,例如包括指令的存储器802,上述指令可由装置1000的处理器801执行以完成上述方法。可选地,计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。

在示例性实施例中,还提供一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述实施例所述的任务部署方法。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

完整详细技术资料下载
上一篇:石墨接头机器人自动装卡簧、装栓机
下一篇:一种资源管理系统、方法、装置、设备及介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!