基于区块链的边缘节点训练方法、区块链及存储介质与流程

专利2022-06-29  150


本申请涉及边缘智能区块链技术领域,尤其涉及一种基于区块链的边缘节点训练方法、区块链及存储介质。



背景技术:

近年来ai技术特别是深度学习技术的快速发展,引起了5g时代的一系列变革。深度学习的数据训练需要大量的数据和计算量,当前这些计算任务需要交付给云端进行处理,这给网络的传输能力和云端计算能力提出了严峻的挑战。传统的计算模式已经出现了云端功耗较大、业务响应延迟高等一系列问题,而且这些问题已经逐渐成为诸多技术的发展瓶颈,特别是在一些时延敏感的应用场景中。针对上述问题,边缘智能作为下一代通信网络的关键技术之一,可以提供有效的解决方案。

而网络边缘侧设备的资源受限,比如说计算资源和存储资源等,传统的边缘智能技术通常只利用单一的边缘训练设备进行深度网络的训练,仍然具有较差的时间效率和训练效率。如果可以进行边缘设备的互通,实现边缘智能的共享和交互,可以有效地解决上述问题,但是边缘设备之间的异构性和不信任性阻碍了边缘设备之间边缘智慧能力的共享和交互。



技术实现要素:

本申请实施例第一方面提供一种基于区块链的边缘节点训练方法,包括:

将每个边缘节点进行本地训练,经过一个训练周期后,得到各边缘节点经本地训练后的深度网络参数,并将各边缘节点的深度网络参数打包到各边缘节点的本地交易中,所述本地交易包括loss_reduce值;

每个边缘节点向其他各边缘节点发送本地交易,以使各边缘节点处均有相同的交易;

获取目标边缘节点,由所述目标边缘节点生成待验证区块,并将所述目标边缘节点生成的待验证区块发送给其他各边缘节点,所述目标边缘节点本地交易中的loss_reduce值和接收到的来自其他节点的本地交易中的loss_reduce值相比,所述目标边缘节点本地交易中的loss_reduce值最小;

当其他各边缘节点接收到所述待验证区块后,各边缘节点分别对所述待验证区块进行验证;

若所有边缘节点均验证成功时,则将所述待验证区块添加到本地的链式结构中,并且每个边缘节点中的深度网络参数均替换成具有最小loss_reduce值的深度网络的参数。

可选的,所述交易包括input_set、loss_reduce、output_set、param_set和sender_id;

所述input_set为最后一次本地训练后深度网络的输出数据集合;

所述loss_reduce为经过当前训练周期的训练后损失函数减少的百分比;

所述output_set为最后一次本地训练后深度网络的输入数据集合;

所述param_set为最后一次本地训练后深度网络的所有参数;

所述sender_id为封装该交易的边缘节点id号。

可选的,所述待验证区块包括index、previous_hash、proof、timestamp和transactions。

所述index为当前区块的编号;

所述previous_hash为上一区块的哈希值;

所述proof为当前训练周期中,最小的loss_reduce;

所述timestamp为当前区块的创建时间;

所述transactions为当前训练周期中,全部节点提交的交易集合。

可选的,所述各边缘节点分别对所述待验证区块进行验证包括:

获取当前边缘节点;

验证所述待验证区块中proof是否小于所述当前边缘节点当前训练周期训练后的loss_reduce;

若是,则验证所述待验证区块中的previous_hash是否与保存的上一区块的哈希值一致;

若一致,则获取所述待验证区块中loss_reduce值最小的边缘节点的本地交易,并将所有节点的深度网络参数替换为所述边缘节点本地交易中的param_set;

分别输入所述边缘节点的本地交易中的input_set,如果得到的输出结果与所述边缘节点的本地交易中的output_set一致,则当前边缘节点验证成功。

本申请实施例第二方面提供一种区块链,包括:

训练模块,用于将每个边缘节点进行本地训练,经过一个训练周期后,得到各边缘节点经本地训练后的深度网络参数,并将各边缘节点的深度网络参数打包到各边缘节点的本地交易中,所述本地交易包括loss_reduce值;

发送模块,用于每个边缘节点向其他各边缘节点发送本地交易,以使各边缘节点处均有相同的交易;

生成模块,用于获取目标边缘节点,由所述目标边缘节点生成待验证区块,并将所述目标边缘节点生成的待验证区块发送给其他各边缘节点,所述目标边缘节点本地交易中的loss_reduce值和接收到的来自其他节点的本地交易中的loss_reduce值相比,所述目标边缘节点本地交易中的loss_reduce值最小;

验证模块,用于当其他各边缘节点接收到所述待验证区块后,各边缘节点分别对所述待验证区块进行验证;

添加模块,用于若所有边缘节点均验证成功时,则将所述待验证区块添加到本地的链式结构中,并且每个边缘节点中的深度网络参数均替换成具有最小loss_reduce值的深度网络的参数。

可选的,所述交易包括input_set、loss_reduce、output_set、param_set和sender_id;

所述input_set为最后一次本地训练后深度网络的输出数据集合;

所述loss_reduce为经过当前训练周期的训练后损失函数减少的百分比;

所述output_set为最后一次本地训练后深度网络的输入数据集合;

所述param_set为最后一次本地训练后深度网络的所有参数;

所述sender_id为封装该交易的边缘节点id号。

可选的,所述待验证区块包括index、previous_hash、proof、timestamp和transactions。

所述index为当前区块的编号;

所述previous_hash为上一区块的哈希值;

所述proof为当前训练周期中,最小的loss_reduce;

所述timestamp为当前区块的创建时间;

所述transactions为当前训练周期中,全部节点提交的交易集合。

可选的,所述验证模块包括:

获取子模块,用于获取当前边缘节点;

第一验证子模块,用于验证所述待验证区块中proof是否小于所述当前边缘节点当前训练周期训练后的loss_reduce;

第二验证子模块,用于若是,则验证所述待验证区块中的previous_hash是否与保存的上一区块的哈希值一致;

替换子模块,用于若一致,则获取所述待验证区块中loss_reduce值最小的边缘节点的本地交易,并将所有节点的深度网络参数替换为所述边缘节点本地交易中的param_set;

输入子模块,用于分别输入所述边缘节点的本地交易中的input_set,如果得到的输出结果与所述边缘节点的本地交易中的output_set一致,则当前边缘节点验证成功。

本申请实施例第三方面提供了一种区块链,包括:

存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现本申请实施例第一方面提供的基于区块链的边缘节点训练方法。

本申请实施例第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本申请实施例第一方面提供的基于区块链的边缘节点训练方法。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请一实施例提供的基于区块链的边缘节点训练方法的流程示意图;

图2为本申请一实施例提供的基于区块链的边缘节点训练方法的训练次数和联合资源利用率的关系示意图;

图3为本申请一实施例提供的区块链的结构示意图;

图4示出了一种区块链的硬件结构示意图。

具体实施方式

为使得本申请的申请目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而非全部实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在本申请中,假设有n个边缘节点,本申请的目的为在这n个节点之间利用区块链技术,实现n个边缘节点的合作边缘智能。此外假设,每个边缘节点本地训练的深度网络的结构是相同的,例如,都有x个训练层,每层中都有y个神经元。

请参阅图1,图1为本申请一实施例提供的基于区块链的边缘节点训练方法的流程示意图,该方法主要包括以下步骤:

s101、将每个边缘节点进行本地训练,经过一个训练周期后,得到各边缘节点经本地训练后的深度网络参数,并将各边缘节点的深度网络参数打包到各边缘节点的本地交易中,该本地交易包括loss_reduce值;

利用本地训练方法,每个边缘节点首先进行本地的训练学习过程,一个训练周期后,每个边缘节点将本地的深度网络的参数打包到一个交易中。

本地训练是指对本地的数据进行本地的深度网络学习和训练。在本申请中,可采用传统的深度强化学习算法进行本地数据的深度网络学习和训练。需要说明的是,图1中的lossfunction(损失函数)由如下公式计算得到:

上述深度网络学习和训练的过程,就是不断最小化损失函数的过程,因此可认为,更小的损失函数,意味着当前的深度网络更能估计到真实的q函数,也就是说当前的深度网络更加优化,如果将当前更加优化的深度网络进行分享,那么就可以进一步提高其他节点的训练收敛速度。

在本申请其中一个实施例中,该交易包括input_set、loss_reduce、output_set、param_set和sender_id;该input_set为最后一次本地训练后深度网络的输出数据集合;该loss_reduce为经过当前训练周期训练后损失函数减少的百分比;该output_set为最后一次本地训练后深度网络的输入数据集合;该param_set为最后一次本地训练后深度网络的所有参数;该sender_id为封装该交易的边缘节点id号。下表1给出了交易的格式。

表1

s102、每个边缘节点向其他各边缘节点发送本地交易,以使各边缘节点处均有相同的交易;

可利用p2p网络传输技术,每个边缘节点向其他各边缘节点发送自身的本地交易,这样使得每个边缘节点处均有相同的交易。

s103、获取目标边缘节点,由该目标边缘节点生成待验证区块,并将该目标边缘节点生成的待验证区块发送给其他各边缘节点,该目标边缘节点本地交易中的loss_reduce值和接收到的来自其他节点的本地交易中的loss_reduce值相比,该目标边缘节点本地交易中的loss_reduce值最小;

得到边缘节点的过程可按下述方法进行,首先每个边缘节点将本地训练得到的loss_reduce值和来自其他节点的loss_reduce相比较,如果本地训练的loss_reduce值不是最小的,那么对该交易不做任何处理;如果本地的loss_reduce值是最小的,那么该本地的loss_reduce值的边缘节点即为目标边缘节点,由该边缘节点生成待验证区块。

在本申请其中一个实施例中,该待验证区块包括index、previous_hash、proof、timestamp和transactions。该index为当前区块的编号;该previous_hash为上一区块的哈希值;该proof为当前训练周期中,最小的loss_reduce;该timestamp为当前区块的创建时间;该transactions为当前训练周期中,全部节点提交的交易集合。下表1给出了待验证区块链的格式。

s104、当其他各边缘节点接收到该待验证区块后,各边缘节点分别对该待验证区块进行验证;

在本申请其中一个实施例中,步骤s104包括:

获取当前边缘节点;

验证该待验证区块中proof是否小于该当前边缘节点当前训练周期训练后的loss_reduce;

若是,则验证所述待验证区块中的previous_hash是否与保存的上一区块的哈希值一致;

若一致,则获取该待验证区块中loss_reduce值最小的边缘节点的本地交易,并将所有节点的深度网络参数替换为该边缘节点本地交易中的param_set。示例性,有4个边缘节点,边缘节点1封装的本地交易中loss_reduce=0.3,边缘节点2封装的本地交易中loss_reduce=0.25,边缘节点3封装的本地交易中loss_reduce=0.35,边缘节点4封装的本地交易中loss_reduce=0.18,那么在这一验证阶段中,全部节点的深度网络参数均要替换成边缘节点4的本地交易中的param_set。

分别输入该边缘节点的本地交易中的input_set,如果得到的输出结果与该边缘节点的本地交易中的output_set一致,则当前边缘节点验证成功。示例性的,依照上述示例,替换之后,分别输入边缘节点4的本地交易中的input_set,如果得到的输出结果与边缘节点4的本地交易中的output_set一致,那么验证成功。否则,丢弃该待验证区块。

s105、若所有边缘节点均验证成功时,则将该待验证区块添加到本地的链式结构中,并且每个边缘节点中的深度网络参数均替换成具有最小loss_reduce值的深度网络的参数;

更多的,若验证失败,则丢弃该待验证区块,并再次执行步骤s101至s105。

由于边缘节点的计算和存储能力有限,利用这种方法,就可以实现更加优化的深度网络的共享和交互,轻量级的边缘节点就无需自己训练得到更加优化的深度网络。利用区块链技术实现了各个边缘节点之间的深度网络训练结果的共享。

请参阅图2,图2为本申请一实施例提供的基于区块链的边缘节点训练方法的训练次数和联合资源利用率的关系示意图。可以看出基于区块链的合作边缘智能算法具有更快的收敛速度,极大的提高了深度学习的时间效率,降低了用户的等待时间。

请参阅图3,图3是本申请一实施例提供的区块链的结构示意图,该装置主要包括:

训练模块201,用于将每个边缘节点进行本地训练,经过一个训练周期后,得到各边缘节点经本地训练后的深度网络参数,并将各边缘节点的深度网络参数打包到各边缘节点的本地交易中,该本地交易包括loss_reduce值;

发送模块202,用于每个边缘节点向其他各边缘节点发送本地交易,以使各边缘节点处均有相同的交易;

生成模块203,用于获取目标边缘节点,由该目标边缘节点生成待验证区块,并将该目标边缘节点生成的待验证区块发送给其他各边缘节点,该目标边缘节点本地交易中的loss_reduce值和接收到的来自其他节点的本地交易中的loss_reduce值相比,该目标边缘节点本地交易中的loss_reduce值最小;

验证模块204,用于当其他各边缘节点接收到该待验证区块后,各边缘节点分别对该待验证区块进行验证;

添加模块205,用于若所有边缘节点均验证成功时,则将该待验证区块添加到本地的链式结构中,并且每个边缘节点中的深度网络参数均替换成具有最小loss_reduce值的深度网络的参数。

在本申请其中一个实施例中,该交易包括input_set、loss_reduce、output_set、param_set和sender_id;

该input_set为最后一次本地训练后深度网络的输出数据集合;

该loss_reduce为经过当前训练周期的训练后损失函数减少的百分比;

该output_set为最后一次本地训练后深度网络的输入数据集合;

该param_set为最后一次本地训练后深度网络的所有参数;

该sender_id为封装该交易的边缘节点id号。

在本申请其中一个实施例中,该待验证区块包括index、previous_hash、proof、timestamp和transactions。

该index为当前区块的编号;

该previous_hash为上一区块的哈希值;

该proof为当前训练周期中,最小的loss_reduce;

该timestamp为当前区块的创建时间;

该transactions为当前训练周期中,全部节点提交的交易集合。

在本申请其中一个实施例中,该验证模块包括:

获取子模块,用于获取当前边缘节点;

第一验证子模块,用于验证该待验证区块中proof是否小于该当前边缘节点当前训练周期训练后的loss_reduce;

第二验证子模块,用于若是,则验证所述待验证区块中的previous_hash是否与保存的上一区块的哈希值一致;

替换子模块,用于若一致,则获取该待验证区块中loss_reduce值最小的边缘节点的本地交易,并将所有节点的深度网络参数替换为该边缘节点本地交易中的param_set;

输入子模块,用于分别输入该边缘节点的本地交易中的input_set,如果得到的输出结果与该边缘节点的本地交易中的output_set一致,则当前边缘节点验证成功。

本申请实施例还提供了一种区块链,该区块链包括:存储器、处理器及存储在所存储器上并可在该处理器上运行的计算机程序,该处理器执行该计算机程序时,实现如前述图1至图2所示实施例中描述的基于区块链的边缘节点训练方法。

本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是设置于上述各实施例中的电子装置中,该计算机可读存储介质可以是上述各实施例中设置在主控芯片和数据采集芯片中的存储单元。该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现前述图1至图2所示实施例中描述的基于区块链的边缘节点训练方法。

进一步地,该电子设备还包括:

至少一个输入设备43;至少一个输出设备44。

上述存储器41、处理器42输入设备43和输出设备44通过总线45连接。

其中,输入设备43具体可为摄像头、触控面板、物理按键或者鼠标等等。输出设备44具体可为显示屏。

存储器41可以是高速随机存取记忆体(ram,randomaccessmemory)存储器,也可为非不稳定的存储器(non-volatilememory),例如磁盘存储器。存储器41用于存储一组可执行程序代码,处理器42与存储器41耦合。

进一步地,本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是设置于上述各实施例中的终端中,该计算机可读存储介质可以是前述图4所示实施例中的存储器。该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现前述图1或图2所示实施例中描述的基于区块链的边缘节点训练方法。

进一步地,该计算机可存储介质还可以是u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

需要说明的是,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

以上为对本申请所提供的基于区块链的边缘节点训练方法、区块链及存储介质的描述,对于本领域的技术人员,依据本申请实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。


技术特征:

1.一种基于区块链的边缘节点训练方法,其特征在于,包括:

将每个边缘节点进行本地训练,经过一个训练周期后,得到各边缘节点经本地训练后的深度网络参数,并将各边缘节点的深度网络参数打包到各边缘节点的本地交易中,所述本地交易包括loss_reduce值;

每个边缘节点向其他各边缘节点发送本地交易,以使各边缘节点处均有相同的交易;

获取目标边缘节点,由所述目标边缘节点生成待验证区块,并将所述目标边缘节点生成的待验证区块发送给其他各边缘节点,所述目标边缘节点本地交易中的loss_reduce值和接收到的来自其他节点的本地交易中的loss_reduce值相比,所述目标边缘节点本地交易中的loss_reduce值最小;

当其他各边缘节点接收到所述待验证区块后,各边缘节点分别对所述待验证区块进行验证;

若所有边缘节点均验证成功时,则将所述待验证区块添加到本地的链式结构中,并且每个边缘节点中的深度网络参数均替换成具有最小loss_reduce值的深度网络的参数。

2.根据权利要求1所述的基于区块链的边缘节点训练方法,其特征在于,所述交易包括input_set、loss_reduce、output_set、param_set和sender_id;

所述input_set为最后一次本地训练后深度网络的输出数据集合;

所述loss_reduce为经过当前训练周期的训练后损失函数减少的百分比;

所述output_set为最后一次本地训练后深度网络的输入数据集合;

所述param_set为最后一次本地训练后深度网络的所有参数;

所述sender_id为封装该交易的边缘节点id号。

3.根据权利要求2所述的基于区块链的边缘节点训练方法,其特征在于,所述待验证区块包括index、previous_hash、proof、timestamp和transactions。

所述index为当前区块的编号;

所述previous_hash为上一区块的哈希值;

所述proof为当前训练周期中,最小的loss_reduce;

所述timestamp为当前区块的创建时间;

所述transactions为当前训练周期中,全部节点提交的交易集合。

4.根据权利要求3所述的基于区块链的边缘节点训练方法,其特征在于,所述各边缘节点分别对所述待验证区块进行验证包括:

获取当前边缘节点;

验证所述待验证区块中proof是否小于所述当前边缘节点当前训练周期训练后的loss_reduce;

若是,则验证所述待验证区块中的previous_hash是否与保存的上一区块的哈希值一致;

若一致,则获取所述待验证区块中loss_reduce值最小的边缘节点的本地交易,并将所有节点的深度网络参数替换为所述边缘节点本地交易中的param_set;

分别输入所述边缘节点的本地交易中的input_set,如果得到的输出结果与所述边缘节点的本地交易中的output_set一致,则当前边缘节点验证成功。

5.一种区块链,其特征在于,包括:

训练模块,用于将每个边缘节点进行本地训练,经过一个训练周期后,得到各边缘节点经本地训练后的深度网络参数,并将各边缘节点的深度网络参数打包到各边缘节点的本地交易中,所述本地交易包括loss_reduce值;

发送模块,用于每个边缘节点向其他各边缘节点发送本地交易,以使各边缘节点处均有相同的交易;

生成模块,用于获取目标边缘节点,由所述目标边缘节点生成待验证区块,并将所述目标边缘节点生成的待验证区块发送给其他各边缘节点,所述目标边缘节点本地交易中的loss_reduce值和接收到的来自其他节点的本地交易中的loss_reduce值相比,所述目标边缘节点本地交易中的loss_reduce值最小;

验证模块,用于当其他各边缘节点接收到所述待验证区块后,各边缘节点分别对所述待验证区块进行验证;

添加模块,用于若所有边缘节点均验证成功时,则将所述待验证区块添加到本地的链式结构中,并且每个边缘节点中的深度网络参数均替换成具有最小loss_reduce值的深度网络的参数。

6.根据权利要求5所述的区块链,其特征在于,所述交易包括input_set、loss_reduce、output_set、param_set和sender_id;

所述input_set为最后一次本地训练后深度网络的输出数据集合;

所述loss_reduce为经过当前训练周期的训练后损失函数减少的百分比;

所述output_set为最后一次本地训练后深度网络的输入数据集合;

所述param_set为最后一次本地训练后深度网络的所有参数;

所述sender_id为封装该交易的边缘节点id号。

7.根据权利要求6所述的区块链,其特征在于,所述待验证区块包括index、previous_hash、proof、timestamp和transactions。

所述index为当前区块的编号;

所述previous_hash为上一区块的哈希值;

所述proof为当前训练周期中,最小的loss_reduce;

所述timestamp为当前区块的创建时间;

所述transactions为当前训练周期中,全部节点提交的交易集合。

8.根据权利要求7所述的区块链,其特征在于,所述验证模块包括:

获取子模块,用于获取当前边缘节点;

第一验证子模块,用于验证所述待验证区块中proof是否小于所述当前边缘节点当前训练周期训练后的loss_reduce;

第二验证子模块,用于若是,则验证所述待验证区块中的previous_hash是否与保存的上一区块的哈希值一致;

替换子模块,用于若一致,则获取所述待验证区块中loss_reduce值最小的边缘节点的本地交易,并将所有节点的深度网络参数替换为所述边缘节点本地交易中的param_set;

输入子模块,用于分别输入所述边缘节点的本地交易中的input_set,如果得到的输出结果与所述边缘节点的本地交易中的output_set一致,则当前边缘节点验证成功。

9.一种区块链,包括:存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现权利要求1至4中的任一项所述的基于区块链的边缘节点训练方法中的各个步骤。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现权利要求1至4中的任一项所述的基于区块链的边缘节点训练方法中的各个步骤。

技术总结
一种基于区块链的边缘节点训练方法,包括:将每个边缘节点进行本地训练,得到各边缘节点经本地训练后的深度网络参数,并将各边缘节点的深度网络参数打包到各边缘节点的本地交易中,每个边缘节点向其他各边缘节点发送本地交易,获取目标边缘节点,由目标边缘节点生成待验证区块,并将目标边缘节点生成的待验证区块发送给其他各边缘节点,当其他各边缘节点接收到待验证区块后,各边缘节点分别对待验证区块进行验证,若所有边缘节点均验证成功时,则将待验证区块添加到本地的链式结构中,并且每个边缘节点中的深度网络参数均替换成具有最小Loss_reduce值的深度网络的参数。本申请还公开了一种区块链及存储介质,实现基于区块链的合作边缘智能。

技术研发人员:王晓飞;仇超;姚海鹏
受保护的技术使用者:天津大学
技术研发日:2020.01.13
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-15596.html

最新回复(0)