[0001]
本申请涉及存储技术领域,特别涉及一种访问请求的处理方法、装置、设备及存储介质。
背景技术:[0002]
随着存储技术以及人工智能(artificial intelligence,ai)技术的发展,可以使用ai模型学习出上层应用对存储设备中存储的数据的访问模式,当存储设备接收到访问请求时,存储设备可以根据访问请求,利用ai模型来预测出将要使用的指令或数据,从而进行缓存(cache)预取,或者利用ai模型来预测出发送访问请求的工作负载(workload),从而实现工作负载识别功能,或者利用ai模型来预测出需要分配多少资源来处理访问请求,从而实现智能调度功能。
[0003]
存储设备会在运行过程中,基于输入输出(input output,io)请求进行模型训练,得到ai模型。具体而言,在存储设备初始化的过程中,存储设备会创建ai模型,将该ai模型的参数置为预设初始值,得到初始ai模型。之后,存储设备启动,每当接收到对存储的数据的io请求,存储设备会根据io请求,获取初始ai模型的预测结果,再根据预测结果的误差,对初始ai模型的参数进行调整,直至预测结果的误差小于误差阈值为止,将初始ai模型作为训练完成的ai模型。
[0004]
相关技术中,在数据迁移的场景下,比如需要将数据从在旧的存储设备上存储,改为将数据在新的存储设备上存储时,旧的存储设备和新的存储设备均需要为数据执行模型训练流程。具体地,旧的存储设备在历史运行过程中,客户端会向旧的存储设备发送历史io请求,旧的存储设备会接收到历史io请求,历史io请求用于请求读取数据或写入数据。旧的存储设备会根据历史io请求进行模型训练,得到ai模型。当需要迁移数据时,旧的存储设备会向新的存储设备发送数据,新的存储设备会从旧的存储设备接收数据,存储数据,从而完成数据迁移。此后,客户端会向新的存储设备发送io请求,新的存储设备接收到io请求后,会基于io请求,重新执行模型训练的流程,来重新得到ai模型。
[0005]
采用上述方法时,新的存储设备需要重新进行模型训练,才能得到ai模型,而重新进行模型训练会耗费很长的时间,影响了新的存储设备利用ai模型来提供缓存预取、负载识别、智能调度等功能的效率。
技术实现要素:[0006]
本申请实施例提供了一种访问请求的处理方法、装置、设备及存储介质,能够免去新的存储设备重新进行模型训练带来的时间开销,提高新的存储设备利用ai模型提供功能的效率。
[0007]
第一方面,提供了一种访问请求的处理方法,应用于第一存储设备,所述方法包括:接收来自第二存储设备的数据以及人工智能ai模型,所述ai模型由所述第二存储设备在历史运行过程中,基于对所述数据的历史输入输出io请求训练得到;存储所述数据以及
所述ai模型;接收对所述数据的访问请求;根据所述访问请求,获取所述ai模型的预测结果。
[0008]
在数据从第二存储设备迁移至第一存储设备的场景下,通过将ai模型也从第二存储设备迁移至第一存储设备,第一存储设备可以复用第二存储设备已训练的ai模型,来得到ai模型的预测结果,从而免去了第一存储设备重新进行模型训练的流程,进而免去了第一存储设备重新训练ai模型带来的时间开销。由于第一存储设备得到ai模型的速度更快,第一存储设备根据ai模型来得到预测结果的速度也就更快,因此根据预测结果来提供缓存预取、负载识别、智能调度等功能的速度也就更快,从而极大地提高了第一存储设备进行缓存预取、负载识别以及智能调度的效率。
[0009]
可选地,所述数据属于所述第二存储设备的第一逻辑存储单元lun,所述ai模型为所述第一lun对应的目标ai模型。
[0010]
考虑到同一存储设备的不同lun通常会存储不同工作负载的数据,而不同工作负载对数据的访问模式通常不同,导致不同工作负载对相应的lun发送的io请求的规律也会产生区别。因此,通过以lun为粒度,针对属于第一lun的数据的io请求,复用第一lun对应的ai模型,来得到预测结果,灵活性高。并且,由于ai模型是根据属于第一lun的数据的io请求训练得到的,ai模型的参数能够与第一lun匹配,因此ai模型的复用程度更加精细化,提高了ai模型的预测结果的精确性。
[0011]
可选地,所述接收来自第二存储设备的数据以及人工智能ai模型之后,所述方法包括:创建第二lun;根据所述第一lun对应的ai模型,获取所述第二lun对应的ai模型。
[0012]
在存储设备新建lun的场景下,通过复用已有的lun对应的ai模型,来得到新建的lun对应的ai模型,从而免去了为新建的lun进行模型训练的流程,进而免去了为新建的lun进行模型训练带来的时间成本。由于得到新建的lun对应的ai模型的速度更快,根据ai模型得到预测结果的速度也就更快,因此根据预测结果来为新建的lun提供缓存预取、负载识别、智能调度等功能的速度也就更快,从而极大地提高了为新建的lun进行缓存预取、负载识别以及智能调度的效率。
[0013]
可选地,所述根据所述第一lun对应的ai模型,获取所述第二lun对应的ai模型,包括下述任意一项:从一个或多个所述第一lun对应的ai模型中,选择一个ai模型,作为所述第二lun对应的ai模型;对一个或多个所述第一lun对应的ai模型进行加权平均,得到所述第二lun对应的ai模型。
[0014]
通过这种可选方式,提供了多种复用历史创建的lun对应的ai模型的方式,提高了灵活性。
[0015]
可选地,每个第一lun的权重相同;或者,每个第一lun的权重与对应的应用标识在所有第一lun对应的应用标识中所占的比例正相关,或者,每个第一lun的权重与对应的用户标识在所有第一lun对应的用户标识中所占的比例正相关。
[0016]
通过这种可选方式,考虑到在所有的第一lun中,针对应用标识或用户标识所占的比例较大的lun的访问规律更具有普适性和代表性,因此这些lun对应的ai模型能够更准确地反映出新建的lun的访问规律,那么通过为这些lun设置较高的权重,结合每个lun的权重以及ai模型,来为新建的lun获取ai模型,可以提高新建的lun对应的ai模型的准确性。
[0017]
可选地,所述创建第二lun之前,所述方法还包括:分配共享存储空间,所述共享存
储空间用于存储每个lun对应的ai模型;所述存储所述数据以及所述ai模型,包括:将所述第一lun对应的ai模型写入所述共享存储空间;所述根据历史创建的第二lun的人工智能ai模型,获取所述第一lun对应的ai模型之前,所述根据所述第一lun对应的ai模型,获取所述第二lun对应的ai模型之后,所述方法还包括:将所述第二lun对应的ai模型写入所述共享存储空间。
[0018]
通过这种可选方式,将每个lun对应的ai模型均存储在共享存储空间,便于统一地管理每个lun对应的ai模型。
[0019]
可选地,所述根据所述访问请求,获取所述ai模型的预测结果之后,所述方法还包括:根据所述预测结果,对所述ai模型的参数进行调整。
[0020]
通过这种可选方式,新的存储设备能够随着接收到的访问请求,对老的存储设备训练好的ai模型进行模型微调,从而结合自身的运行过程来优化ai模型,使得ai模型的参数在调整后,会与对新的存储设备执行的数据访问过程更加匹配,从而提高ai模型的准确性。
[0021]
可选地,所述ai模型包括第一ai模型,所述根据所述访问请求,获取所述ai模型的预测结果,包括:将所述访问请求输入所述第一ai模型,输出目标访问请求,所述目标访问请求表示所述第一存储设备的处理器将要使用的指令或数据;所述根据所述访问请求,获取所述ai模型的预测结果之后,所述方法还包括:将所述指令或数据写入所述第一存储设备的缓存。
[0022]
通过这种可选方式,利用ai模型实现了缓存预取的功能。通过第一ai模型,来学习出当前接收到的io请求与将要接收到的io请求之间的映射关系,当接收到io请求时,能够通过第一ai模型,预测出将要接收的io请求,从而确定出处理器将要使用哪些指令或数据,那么通过提前将这些指令或数据写入缓存,处理器需要使用指令或数据时,可以直接从缓存中读取指令或数据,因此提高了处理器的执行速度。
[0023]
可选地,所述ai模型包括第二ai模型,所述根据所述访问请求,获取所述ai模型的预测结果,包括:对当前时间段的所述访问请求进行统计,得到访问特征;将所述访问特征输入所述第二ai模型,输出工作负载信息,所述工作负载信息表示发送所述访问请求的工作负载。
[0024]
通过这种可选方式,利用ai模型实现了工作负载识别的功能。通过第二ai模型,来学习出访问请求与发送访问请求的工作负载之间的映射关系,当接收到访问请求时,能够通过第二ai模型,准确地预测出是哪个工作负载发送了该访问请求。
[0025]
可选地,所述ai模型包括第三ai模型,所述根据所述访问请求,获取所述ai模型的预测结果,包括:将所述访问请求以及第一分配信息输入所述第三ai模型,输出第二分配信息,所述第一分配信息表示当前为每个任务分配的处理资源、存储资源或网络资源中的至少一项;所述根据所述访问请求,获取所述ai模型的预测结果之后,所述方法还包括:根据所述第二分配信息,为所述每个任务分配处理资源、存储资源或网络资源中的至少一项。
[0026]
通过这种可选方式,利用ai模型实现了智能调度的功能。通过第三ai模型,来学习出访问请求以及资源分配情况与所需分配的资源之间的映射关系,当接收到访问请求时,能够通过第一ai模型,准确地预测出在当前的访问请求以及资源分配情况下,需要为每个任务分配的资源,从而基于预测结果,能够科学地为每个任务分配资源。
[0027]
第二方面,提供了一种访问请求的处理装置,应用于第一存储设备,所述装置具有实现上述第一方面或第一方面任一种可选方式中访问请求的处理的功能。该装置包括至少一个模块,所述至少一个模块用于实现上述第一方面或第一方面任一种可选方式提供的方法。
[0028]
第三方面,提供了一种第一存储设备,所述第一存储设备包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条指令,所述指令由所述一个或多个处理器执行以实现上述第一方面或第一方面任一种可选方式提供的方法。
[0029]
第四方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述指令由处理器执行以实现上述第一方面或第一方面任一种可选方式提供的方法。
[0030]
第五方面,提供一种计算机程序,所述计算机程序包括用于执行上述第一方面或第一方面任意可选方式的指令。
[0031]
第六方面,提供一种芯片,所述芯片用于执行上述第一方面或第一方面任一种可选方式提供的方法。
附图说明
[0032]
图1是本申请实施例提供的一种访问请求的处理方法的实施环境的架构图;
[0033]
图2是本申请实施例提供的一种第一存储设备或第二存储设备的结构示意图;
[0034]
图3是本申请实施例提供的一种访问请求的处理方法的流程图;
[0035]
图4是本申请实施例提供的一种数据迁移场景下复用ai模型的示意图;
[0036]
图5是本申请实施例提供的一种数据迁移场景下复用ai模型的示意图;
[0037]
图6是本申请实施例提供的一种数据迁移场景下复用ai模型的示意图;
[0038]
图7是本申请实施例提供的一种访问请求的处理方法的流程图;
[0039]
图8是本申请实施例提供的一种新建lun场景下复用ai模型的示意图;
[0040]
图9是本申请实施例提供的一种新建lun场景下复用ai模型的示意图;
[0041]
图10是本申请实施例提供的一种新建lun场景下复用ai模型的示意图;
[0042]
图11是本申请实施例提供的一种访问请求的处理装置的结构示意图。
具体实施方式
[0043]
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
[0044]
本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本申请中的字符“/”,一般表示前后关联对象是一种“或”的关系。
[0045]
本申请中术语“多个”的含义是指两个或两个以上,例如,多个数据包是指两个或两个以上的数据包。
[0046]
本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。
[0047]
以下,对本申请涉及的术语进行解释。
[0048]
io请求:可以包括访问请求或写请求。访问请求用于请求从存储设备读取数据。写请求用于请求向存储设备写入数据。io请求可以包括存储设备上的存储位置。例如,io请求可以包括起始扇区标识以及扇区数量,根据该io请求,可以从该起始扇区标识对应的起始扇区开始,向后连续读取该扇区数量个扇区,从读取的扇区中取出数据,或者向读取的扇区写入数据。
[0049]
访问特征:一段时间内访问请求的特征。例如,访问特征可以包括而不限于一段时间内访问请求的大小、最大访问请求、最小访问请求、平均访问请求、连续访问、随机访问、串行访问、并行访问中的一项或多项。
[0050]
访问请求的大小:可以通过访问请求携带的连续扇区数目表示,例如,如果访问请求携带的连续扇区的数量很大,比如为128、64等,可以将访问请求视为大访问请求。如果访问请求携带的连续读取扇区的数量很小,比如1、4、8等,可以将访问请求视为小访问请求。
[0051]
连续访问:是指本次接收到的访问请求对应的起始存储位置和上一次接收到的访问请求对应的结束存储位置完全连续,或者本次接收到的访问请求对应的起始存储位置和上一次接收到的访问请求对应的结束存储位置虽然具有一定间隔,但间隔小于阈值。对于连续访问来说,由于本次访问的存储位置和上次访问的存储位置相隔很近,磁头几乎不用换道,或换道时间极短。
[0052]
随机访问:是指本次访问请求的初始扇区地址和上一次访问请求的结束扇区地址相隔大于阈值。对于随机访问来说,由于本次初始扇区和上次结束扇区相隔很远,导致磁头需要换道,因此随机访问的读写效率较低。
[0053]
串行访问:是指控制器每一次对多个硬盘发出的指令是一条还是多条。如果是一条,则控制器缓存的访问队列中的每个访问请求只能一个一个的处理,这种情况为串行访问。
[0054]
并行访问:如果控制器同时对多块硬盘分别发送指令,则每次可以同时执行多个访问请求,这种情况为并行访问。
[0055]
ai模型:本申请实施例中,ai模型用于基于存储设备接收到的历史io请求,通过模型训练来学习出对该存储设备存储的数据的访问模式,当接收到对数据的访问请求时,ai模型能够给出预测结果。作为示例,ai模型可以为有监督的机器学习模型,ai模型的类型可以而不限于是神经网络模型、决策树模型、随机森林模型、逻辑回归模型、支持向量机、置信网络、强化学习模型、迁移学习模型、归纳学习模型中的一项或多项。
[0056]
缓存(cache)预取:是指预测出处理器将要使用的指令和/或数据,在该指令和/或数据被真正使用之前,提前将指令和/或数据存放到缓存的技术。通过缓存预取,cache中的数据能够在发生失效之前,提前将被写入至缓存,因此处理器真正需要使用数据时,可以直接对缓存中的数据进行读写,因此可以避免缓存失效造成处理器访问缓存失败,也就避免处理器访问处理器失败带来的时钟周期开销,因此避免处理器停顿,从而加快处理器执行速度。
[0057]
工作负载(workload):是指业务的运行载体。工作负载在处理业务的过程中,会通过向存储设备发送访问请求,来访问存储设备,从而从存储设备读取数据或写入数据。工作负载可以是物理的计算设备,比如服务器或主机,也可以是虚拟化设备,比如虚拟机、容器、pod(pod是指kubernetes中运行、管理、编排容器化应用时的基本单位)等。
[0058]
工作负载(workload)识别:是指识别出发送访问请求的工作负载的功能。通常来讲,相同的工作负载的访问行为具有规律性,本实施例中,可以在历史运行中,基于工作负载发送的历史访问请求,通过模型训练,让ai模型学习出该工作负载的访问行为的规律,得出访问请求与工作负载之间的映射关系,因此在模型训练完成后,如果将访问请求输入至ai模型,ai模型能够输出工作负载信息,从而通过工作负载信息,指明哪一个或哪多个工作负载发送了访问请求。
[0059]
智能调度:是指为存储设备执行的每个任务,自动地分配处理资源、存储资源或网络资源中的至少一项。其中,处理资源可以为对处理器划分得到的资源,例如,处理资源可以是对中央处理器(central process unit,简称:cpu)划分的资源,比如可以为cpu核心,又如,处理器可以是对现场可编程门阵列(field-programmable gate array,简称:fpga)资源划分的资源,比如布线分区等。存储资源可以是对存储器划分得到的资源,例如可以是内存空间。网络资源可以是对收发器划分得到的资源,例如可以是带宽、端口数量等。本实施例中,可以利用ai模型来进行智能调度。具体地,可以由ai模型,学习出在当前接收到的访问请求以及分配的处理资源的情况下,需要为每个任务分配多少处理资源;和/或,由ai模型,学习出在当前接收到的访问请求以及分配的存储资源的情况下,需要为每个任务分配多少存储资源;和/或,由ai模型,学习出在当前接收到的访问请求以及分配的网络资源的情况下,需要为每个任务分配多少网络资源,根据ai模型的预测结果,可以分配相应地处理资源、存储资源、网络资源中的至少一项,从而实现更科学、更准确的资源调度功能。
[0060]
lun:是指通过存储硬件虚拟出的逻辑盘,存储设备的操作系统通常会将lun视为一块可以使用的硬盘。
[0061]
模型微调(fine-tuning):是指对已经训练完成的ai模型训练,来调整已经训练完成的ai模型的参数。模型微调的过程与模型训练的过程类似,相区别的是,模型训练时,会按照ai模型对应的预设方式,对模型参数进行初始化,例如进行高斯随机初始化。而模型微调时,会使用已训练的模型的参数进行初始化,即,将已训练的模型的参数作为微调前的模型的初始化参数。可选地,模型微调的学习率可以小于模型训练的学习率。可选地,模型微调时,可以只训练模型的部分层,比如只训练网络的最后一层或最后几层的权重。
[0062]
以下,示例性介绍本申请的系统架构。
[0063]
图1是本申请实施例提供的一种访问请求的处理方法的实施环境的架构图,该实施环境包括存储系统100以及客户端200,存储系统100和客户端200可以建立通信通路,通过该通信通路进行通信。
[0064]
存储系统100包括第一存储设备以及第二存储设备,第一存储设备可以和第二存储设备建立有线或无线网络连接,从而通过网络连接进行通信,第一存储设备以及第二存储设备的结构可以如图2实施例所示,第一存储设备可以和第二存储设备进行交互来执行下述图3实施例中的方法,另外第一存储设备还可以执行下述图7实施例中的方法。
[0065]
客户端200可以是能够访问数据的任意设备,例如,客户端200可以是应用服务器、主机或终端等。存储系统100可以为客户端200提供数据存储服务。具体来说,客户端200可以根据待存储的数据,生成io请求,向存储系统100发送io请求,该io请求携带需要存储的数据,存储系统100可以从客户端200接收io请求,从io请求中获取数据,存储数据。
[0066]
在一些可能的实施例中,存储系统100可以作为云存储服务提供给用户。具体来
computer system interface,简称:scsi)缓存一致性系统(huawei ccache-coherent system,hccs)、以太网、无限带宽(infiniband,ib)、光纤通道(fibre channel,fc)中的任意一种,网络可以是有线或无线网络,比如以太网,交换设备可以是交换机,比如光纤通道交换机。
[0077]
需要说明的一点是,图2仅是以第一存储设备或第二存储设备包括一个控制器101为例,在一些可能的实施例中,第一存储设备或第二存储设备也可以包括两个或两个以上的控制器101,下述方法实施例中的各个步骤可以分散在不同的控制器101上执行,从而分担整体的计算量。
[0078]
以下,示例性介绍本申请的方法流程。
[0079]
图3是本申请实施例提供的一种访问请求的处理方法的流程图,如图3所示,该方法以第一存储设备以及第二存储设备交互执行为例进行说明,该方法包括下述步骤301至309:
[0080]
步骤301、第二存储设备接收对数据的io请求。
[0081]
示例性地,参见图1,io请求的发送端可以为图1中的客户端200,第二存储设备可以从客户端200接收io请求。当然,也可以由客户端之外的其他设备向第二存储设备发送io请求,本实施例对io请求的发送端不做限定。
[0082]
步骤302、第二存储设备基于io请求进行模型训练,得到ai模型。
[0083]
在一些可能的实施例中,模型训练的过程可以包括下述步骤(1)至步骤(5):
[0084]
步骤(1)第二存储设备创建初始ai模型。
[0085]
具体地,可以在模型训练之前,预先设置ai模型的超参数,该超参数可以用于确定ai模型的结构,比如说如果ai模型为神经网络模型,超参数可以包括神经网络模型的隐藏层数、卷积核大小,卷积操作的步长或卷积核个数等,如果ai模型为决策树,超参数可以包括叶子节点的数量或决策树的深度等,如果ai模型为随机森林,超参数可以包括决策树的数量等。第二存储设备可以存储超参数,根据超参数创建初始ai模型。另外,第二存储设备可以对初始ai模型中超参数之外的其他模型参数进行初始化,例如可以对模型参数进行随机初始化、高斯初始化等,又如可以将模型参数设置为预设数值。
[0086]
在一些可能的实施例中,第二存储设备可以针对不同的应用场景创建不同的初始ai模型。示意性地,初始ai模型可以包括第一初始ai模型、第二初始ai模型、第三初始ai模型中的一项或多项。第一初始ai模型用于训练出用于缓存预取的ai模型(第一ai模型),第二初始ai模型用于训练出用于工作负载识别的ai模型(第二ai模型),第三初始ai模型用于训练出用于智能调度的ai模型(第三ai模型)。举例来说,第一初始ai模型可以是神经网络模型,比如可以是卷积神经网络或者循环神经网络,第二初始ai模型可以是决策树、随机森林或xgboost(将许多弱分类器集成在一起以形成强分类器的一种机器学习模型)等。
[0087]
步骤(2)第二存储设备根据io请求,获取初始ai模型的预测结果。
[0088]
针对缓存预取的应用场景,第二存储设备可以将io请求输入第一初始ai模型,第一初始ai模型可以根据io请求,对第二存储设备的处理器将要使用的指令或数据进行预测,输出目标io请求。其中,目标io请求表示第二存储设备的处理器将要使用的指令或数据。例如,目标io请求可以携带指令或数据的存储地址。
[0089]
针对工作负载识别的应用场景,第二存储设备可以对当前时间段的io请求进行统
计,得到访问特征,将访问特征输入第二初始ai模型,输出工作负载信息。其中,当前时间段的结束点可以为当前时间点,当前时间段的时长可以为预设时长。工作负载信息表示发送io请求的工作负载。例如,工作负载信息可以包括工作负载的标识,工作负载的标识可以而不限于是工作负载的身份标识号码(identity,简称:id)、名称、编号等。
[0090]
针对智能调度的应用场景,第二存储设备可以将io请求以及第一分配信息输入第三初始ai模型,输出第二分配信息。其中,第一分配信息表示当前为每个任务分配的处理资源、存储资源或网络资源中的至少一项,第二分配信息表示ai模型预测出的需要为每个任务分配的处理资源、存储资源或网络资源中的至少一项。在一种可能的实现中,第三初始ai模型可以根据每个任务的优先级,为每个任务分配的处理资源、存储资源或网络资源中的至少一项,其中,任务的优先级越高,则为该任务分配的处理资源可以越多,为该任务分配的存储资源可以越多,为该任务分配的网络资源可以越多,以便提高该任务的处理速度。
[0091]
步骤(3)第二存储设备获取预测结果的误差。
[0092]
第二存储设备可以获取参考结果,对预测结果以及参考结果进行比较,得到预测结果的误差,该预测结果的误差表示预测结果的准确程度。作为示意,第二存储设备可以采用损失函数,对预测结果以及参考结果进行运算,得到预测结果的误差。其中,损失函数包括而不限于交叉熵损失函数、均方误差损失函数等。
[0093]
在一种可能的实现中,如果预测结果是目标io请求,参考结果可以为第二存储设备接收到io请求后,第二存储设备的处理器实际使用的指令或数据。如果预测结果是工作负载信息,参考结果可以为发送io请求的实际工作负载。如果预测结果是第二资源分配信息,参考结果可以为每个任务实际需要的处理资源、存储资源或网络资源中的至少一项。
[0094]
步骤(4)第二存储设备根据预测结果的误差,对初始ai模型的参数进行调整。
[0095]
以初始ai模型为神经网络模型为例,第二存储设备可以根据预测结果的误差,采用反向传播算法,对初始ai模型中的每个层的每个卷积核的权重进行调整。
[0096]
步骤(5)第二存储设备重复执行上述步骤(2)至步骤(4),直至预测结果的误差小于误差阈值或者迭代次数达到预设次数为止。
[0097]
第二存储设备可以每当接收到io请求时,重复执行上述步骤(2)至步骤(4),来调整一次初始ai模型的参数,则初始ai模型会随着参数的不断调整而得到优化。在迭代的过程中,第二存储设备可以判断预测结果的误差是否小于误差阈值,如果预测结果的误差不小于误差阈值,则继续进行模型训练,如果预测结果的误差小于误差阈值,对初始ai模型训练完成,将初始ai模型作为已训练的ai模型。
[0098]
在一些可能的实施例中,第二存储设备可以通过cpu,执行上述模型训练的过程。具体地,如果第二存储设备未安装ai芯片,比如,如果第二存储设备如图2所示,在控制器101的处理器1011中包括cpu而不包括ai芯片的情况下,参见图4,可以由cpu作为模型训练的执行主体,该cpu可以在内存中训练ai模型,例如,cpu可以收集训练ai模型所需的数据,比如接收到的io请求等,将训练ai模型所需的数据缓存在内存中,在训练过程中,每当cpu计算出模型参数时,cpu可以将模型参数缓存至内存中,如果对模型参数进行调整,则cpu对缓存在内存的模型参数进行更新。
[0099]
在另一些可能的实施例中,第二存储设备可以通过ai芯片,执行上述模型训练的过程。具体地,如果第二存储设备安装了ai芯片,比如,如果第二存储设备如图2所示,在控
制器101的处理器1011中包括ai芯片的情况下,参见图5和图6,可以由ai芯片作为模型训练的执行主体。
[0100]
参见图5,ai芯片可以在过第二存储设备自身的内存中训练ai模型。在一种可能的实现中,cpu可以收集训练ai模型所需的数据,将训练ai模型所需的数据发送至ai芯片,ai芯片根据训练ai模型所需的数据,计算出模型参数后,ai芯片可以将模型参数缓存至内存中,如果ai芯片对模型参数进行了调整,ai芯片可以对缓存在内存的模型参数进行更新。
[0101]
参见图6,ai芯片可以在该ai芯片的内存中训练ai模型。在一种可能的实现中,cpu可以收集训练ai模型所需的数据,将训练ai模型所需的数据缓存在cpu对应的内存中,ai芯片可以从cpu对应的内存中,读取训练ai模型所需的数据,在ai芯片中进行模型训练。例如,每当ai芯片计算出模型参数后,ai芯片将模型参数缓存至ai芯片内的内存中,如果ai芯片对模型参数进行了调整,ai芯片可以对缓存在ai芯片的内存的模型参数进行更新。
[0102]
需要说明的另一点是,在训练得到ai模型后,第二存储设备在运行过程中可以继续接收到io请求,第二存储设备可以基于io请求,对ai模型进行模型微调。具体地,第二存储设备可以基于io请求,获取ai模型的预测结果,第二存储设备可以根据预测结果以及参考结果,对ai模型的参数进行调整。其中,对模型参数进行调整的方式还请参见上述步骤(4),在此不做赘述。
[0103]
在一些可能的实施例中,第二存储设备可以包括一个或多个lun,第二存储设备可以在每个lun中分别存储数据,则第二存储设备的不同数据可以属于不同的lun。例如,第二存储设备可以在不同的lun存储不同工作负载的数据,比如说,在lun1存储来自工作负载1的数据,在lun2存储来自工作负载2的数据,那么在第二存储设备中,工作负载1的数据属于lun1,工作负载2的数据属于lun2。第二存储设备在运行过程中,可以接收到对不同lun的io请求,第二存储设备可以基于每个lun对应的io请求,为每个lun分别进行模型训练,得到每个lun对应的ai模型。其中,不同lun对应的ai模型的超参数可以相同,而不同lun对应的ai模型的超参数之外的其他参数,可以由于训练过程或微调过程的不同而产生差异。例如每个lun对应的ai模型都是神经网络模型,且不同lun的神经网络模型的层数和卷积核数量可以相同,而不同lun的神经网络模型中卷积核的权重可以不同。
[0104]
示意性地,如果第二存储设备包括lun0、lun1以及lun2这3个lun,第二存储设备可以基于对lun0的io请求,为lun0进行模型训练,得到lun0对应的ai模型0;基于对lun1的io请求,为lun1进行模型训练,得到lun1对应的ai模型1;基于对lun2的io请求,为lun2进行模型训练,得到lun2对应的ai模型2。在此例中,第二存储设备可以建立如下表1所示的对应关系。
[0105]
表1
[0106][0107][0108]
通过为每个lun分别进行模型训练,由于同一存储设备中不同lun可以存储不同工作负载的数据,而不同工作负载的数据访问模式在一定概率上不同,使得对不同lun的io请
求的规律在一定概率上不同,进而使得不同lun对应的ai模型所适用的模型参数在一定概率上也不同。因此,通过分别基于每个lun对应的io请求,为每个lun分别模型训练,可以保证每个lun对应的ai模型与对应的lun更加匹配,因此可以提高ai模型的精确性。
[0109]
在一些可能的实施例中,第二存储设备可以建立lun与ai模型之间的对应关系,持久化存储lun与ai模型之间的对应关系,以便基于对应关系管理每个lun对应的ai模型。其中,第二存储设备可以分配硬盘空间,在硬盘空间中,存储lun与ai模型之间的对应关系,从而对lun与ai模型之间的对应关系持久化存储。另外,第二存储设备可以定期持久化存储lun与ai模型之间的对应关系,也可以在掉电时持久化存储lun与ai模型之间的对应关系,本实施例对持久化存储的时机不做限定。lun与ai模型之间的对应关系可以包括lun的标识以及ai模型的标识,lun的标识用于确定对应的lun,例如可以为lun的id、编号、名称等,ai模型的标识用于确定对应的ai模型,例如可以为ai模型的id、编号、名称等。结合缓存预取、工作负载识别以及智能调度这三种应用场景,lun与ai模型之间的对应关系可以包括lun与第一ai模型之间的对应关系、lun与第二ai模型之间的对应关系、lun与第三ai模型之间的对应关系中的一项或多项。
[0110]
步骤303、第二存储设备持久化存储ai模型。
[0111]
在一些可能的实施例中,第二存储设备可以分配硬盘空间,将ai模型写入硬盘空间,从而通过硬盘对ai模型持久化存储。例如,参见图2,第二存储设备的处理器1011可以训练得到ai模型,为ai模型分配一个或多个硬盘102,将ai模型写入硬盘102。
[0112]
在一些可能的实施例中,如果第二存储设备通过cpu执行模型训练的过程,参见图4,可以由cpu将ai模型从内存持久化存储至硬盘中。如果第二存储设备通过ai芯片执行模型训练的过程,参见图5,可以由ai芯片将ai模型从ai芯片持久化存储至硬盘中。或者,参见图6,可以由ai芯片将ai模型从cpu对应的内存持久化存储至硬盘中。
[0113]
第二存储设备可以在任意时机下执行本步骤303。示例性地,第二存储设备可以而不限于在下述情况一至情况三中的任一项下执行步骤303。
[0114]
情况一、定期存储。第二存储设备可以每隔预设时长,存储一次ai模型。该预设时长可以根据实验、经验或需求设置,本实施例对此不做限定。
[0115]
情况二、内存不足时存储。具体地,第二存储设备可以判断内存是否小于内存阈值,如果内存小于内存阈值,则将内存中的ai模型写入硬盘空间。
[0116]
情况三、掉电时存储。具体地,当第二存储设备掉电时,第二存储设备的备份电源可以提供电能,第二存储设备可以使用备份电源的电能,将内存中的ai模型写入硬盘空间。
[0117]
需要说明的一点是,如果第二存储设备在训练得到ai模型后,基于继续接收到的io请求,对ai模型进行模型微调,第二存储设备可以持久化存储微调后的ai模型。在一种可能的实现中,如果第二存储设备的硬盘空间已经存储了ai模型,第二存储设备可以删除已存储的ai模型,存储微调后的ai模型,从而对存储的ai模型进行更新。
[0118]
在一些可能的实施例中,第二存储设备持久化存储ai模型后,第二存储设备可以在上电时从硬盘空间中读取ai模型,加载至内存中。另外,第二存储设备也可以在任意需要使用ai模型的情况下,比如要提供缓存预取、工作负载识别、智能调度等功能时,从硬盘空间中读取ai模型,加载至内存中,以便调用ai模型。
[0119]
步骤304、第二存储设备向第一存储设备发送数据以及ai模型。
[0120]
步骤305、第一存储设备接收来自第二存储设备的数据以及ai模型,该ai模型由该第二存储设备在历史运行过程中,基于对该数据的历史io请求训练得到。
[0121]
第一存储设备和第二存储设备为不同的设备。可选地,第二存储设备可以为旧设备,第一存储设备可以为新设备。通过将数据从第二存储设备迁移到第一存储设备,能够让数据的存储设备升级换代。
[0122]
在一些可能的实施例中,第二存储设备可以接收发送指令,根据发送指令,向第一存储设备发送数据以及ai模型,第一存储设备可以从第一存储设备接收数据以及ai模型。其中,该发送指令用于指示第二存储设备发送数据以及ai模型,发送指令可以由用户在第二存储设备上的操作触发,发送指令可以包括第二存储设备的标识、数据在第一存储设备上的原存储位置、ai模型在第一存储设备上的原存储位置、数据在第二存储设备上的目标存储位置、ai模型在第二存储设备上的目标存储位置中的一项或多项。其中,数据在第二存储设备上的目标存储位置和/或ai模型在第二存储设备上的目标存储位置可以位于第二存储设备的硬盘上,以便将数据和/或ai模型迁移至第二存储设备的硬盘。
[0123]
步骤306、第一存储设备存储数据以及ai模型。
[0124]
第一存储设备可以持久化存储数据以及ai模型。例如,第一存储设备可以在硬盘空间上存储数据以及ai模型。
[0125]
在一些可能的实施例中,第二存储设备可以向第一存储设备发送同一个lun对应的数据以及ai模型,第一存储设备可以接收同一个lun对应的数据以及ai模型,对应存储数据以及ai模型。示例性地,第二存储设备发送的数据可以属于第二存储设备的第一lun,第二存储设备发送的ai模型可以为第一lun对应的ai模型。其中,第一lun可以为第二存储设备的一个或多个lun中的任意lun。示例性地,参见表1,如果第二存储设备发送的数据属于lun0,第二存储设备发送的ai模型可以为lun0对应的ai模型0,如果第二存储设备发送的数据属于lun1,第二存储设备发送的ai模型可以为lun1对应的ai模型1。
[0126]
需要说明的一点是,上述仅是以发送属于第一lun的数据以及第一lun对应的ai模型为例进行说明,在一些可能的实施例中,第二存储设备可以包括多个lun,第二存储设备可以为多个lun中每个lun的数据分别训练了对应的ai模型,则第二存储设备可以向第一存储设备发送每个lun的数据以及每个lun对应的ai模型。此外,第二存储设备可以向第一存储设备发送lun与ai模型之间的对应关系,第一存储设备可以从第二存储设备接收lun与ai模型之间的对应关系,存储lun与ai模型之间的对应关系。
[0127]
步骤307、第一存储设备接收对数据的访问请求。
[0128]
步骤308、第一存储设备根据访问请求,获取ai模型的预测结果。
[0129]
第一存储设备可以从硬盘空间中读取ai模型,将ai模型加载至内存中,调用ai模型,从而得到预测结果。需要说明的是,第一存储设备可以在接收到访问请求时,将ai模型从硬盘空间中加载至内存中,也可以在上电时,将ai模型从硬盘空间中加载至内存中,本实施例对加载ai模型的时机不做限定。
[0130]
在一些可能的实施例中,第一存储设备可以根据访问请求,确定待访问的数据属于第一lun,则获取第一lun对应的ai模型的预测结果。在一种可能的实现中,第一存储设备可以根据访问请求中的存储地址,从一个或多个lun中,查询数据所属的lun,得到第一lun;第一存储设备可以根据第一lun,查询lun与ai模型之间的对应关系,得到第一lun对应的ai
模型。如此,第一存储设备通过针对第一lun来复用对应的ai模型,实现了lun粒度的ai模型的复用,相对于整个存储设备粒度的ai模型的复用来说,可以提高预测结果的精确性。
[0131]
针对缓存预取的应用场景,来自第二存储设备的ai模型可以包括第一ai模型,第一ai模型用于根据当前接收到的访问请求预测将要接收到的io请求。第一存储设备可以将访问请求输入第一ai模型,输出目标访问请求,该目标访问请求即为第一ai模型的预测结果。其中,该目标访问请求为第一ai模型预测出的第一存储设备将要接收到的访问请求,该目标访问请求可以表示第一存储设备的处理器将要使用的指令或数据。例如,该目标访问请求可以携带该指令或数据的元数据、存储地址等。
[0132]
在一些可能的实施例中,第一存储设备可以每当接收到一个访问请求时,将当前时间点接收到的访问请求输入第一ai模型;在另一些可能的实施例中,第一存储设备也可以当接收到多个访问请求时,将当前时间段接收到的多个访问请求输入第一ai模型。例如,第一存储设备可以每当接收到n个访问请求时,将n个访问请求输入第一ai模型,其中n为正整数。第一存储设备也可以每隔时长m,将时长m内接收到的访问请求输入第一ai模型,其中m为正整数。本实施例对向第一ai模型输入的访问请求的数量不做限定。
[0133]
在一些可能的实施例中,第一ai模型可以对第一存储设备将要在下一时间点接收到的访问请求进行预测,输出一个目标访问请求;在另一些可能的实施例中,第一ai模型也可以对第一存储设备将要在下一时间段接收到的访问请求进行预测,输出多个目标访问请求,例如,第一ai模型可以对第一存储设备将要接收到的p个访问请求进行预测,输出p个目标访问请求,p为正整数,本实施例对第一ai模型输出的目标访问请求的数量不做限定。
[0134]
针对工作负载识别的应用场景,来自第二存储设备的ai模型可以包括第二ai模型,第二ai模型用于根据当前时间段的访问请求的访问特征预测发送访问请求的工作负载。第一存储设备可以对当前时间段的访问请求进行统计,得到访问特征。第一存储设备可以将访问特征输入第二ai模型,输出工作负载信息,该工作负载信息即为第二ai模型的预测结果。工作负载信息表示发送访问请求的工作负载。
[0135]
其中,统计得到访问特征的过程可以包括而不限于下述(1)至(6)中的一项或多项:
[0136]
(1)获取当前时间段内每个访问请求的大小,根据每个访问请求的大小,从当前时间段的所有访问请求中选择最大访问请求,作为访问特征。
[0137]
(2)获取当前时间段内每个访问请求的大小,从当前时间段内的所有访问请求中选择最小访问请求,作为访问特征。
[0138]
(3)可以判断当前时间段的访问请求是否为连续访问,将判断结果作为访问特征。在一种可能的实现中,可以判断每个访问请求对应的起始存储位置和上一个访问请求对应的结束存储位置的间隔是否小于间隔阈值,如果间隔小于间隔阈值,则判断访问请求为连续访问。
[0139]
(4)可以判断当前时间段的访问请求是否为随机访问,将判断结果作为访问特征。在一种可能的实现中,可以判断每个访问请求的起始扇区地址和上一个访问请求的结束扇区地址的间隔是否大于或等于间隔阈值,如果间隔大于或等于间隔阈值,则判断访问请求为随机访问。
[0140]
(5)可以判断当前时间段的访问请求是否为串行访问,将判断结果作为访问特征。
[0141]
(6)可以判断当前时间段的访问请求是否为并行访问,将判断结果作为访问特征。
[0142]
针对智能调度的应用场景,来自第二存储设备的ai模型可以包括第三ai模型,第三ai模型用于根据当前接收到的访问请求以及资源分配情况预测每个任务所需分配的资源。第一存储设备可以将访问请求以及第一分配信息输入第三ai模型,第三ai模型可以对每个任务需要的处理资源、存储资源或网络资源中的至少一项进行预测,输出第二分配信息,该第二分配信息即为第三ai模型的预测结果。
[0143]
在一些可能的实施例中,第一存储设备可以每当接收到一个访问请求时,将当前时间点接收到的访问请求以及当前时间点的第一分配信息输入第三ai模型;或者,第一存储设备也可以当接收到多个访问请求时,将当前时间段接收到的多个访问请求以及当前时间段内多个时间点的第一分配信息输入第三ai模型,本实施例对采用哪种实现方式不做限定。
[0144]
在一些可能的实施例中,第三ai模型可以对下一时间点每个任务需要的处理资源、存储资源或网络资源中的至少一项进行预测,则输出的第二分配信息表示下一时间点每个任务需要的处理资源、存储资源或网络资源中的至少一项。或者,第三ai模型也可以对下一时间段每个任务需要的处理资源、存储资源或网络资源中的至少一项进行预测,则输出的第二分配信息表示下一时间段内多个时间点每个任务需要的处理资源、存储资源或网络资源中的至少一项,本实施例对采用哪种实现方式不做限定。
[0145]
在一些可能的实施例中,第一存储设备可以完全复用来自第二存储设备的ai模型,也可以对来自第二存储设备的ai模型进行模型微调。完全复用ai模型是指第一存储设备不改变来自第二存储设备的ai模型的参数。对ai模型进行模型微调的过程可以包括:第一存储设备接收到io请求后,可以基于io请求,获取ai模型的预测结果,第一存储设备根据预测结果,对ai模型的参数进行调整。其中,io请求可以包括对数据的访问请求以及对数据的写入请求。
[0146]
在一些可能的实施例中,第一存储设备可以通过cpu,执行模型微调的过程。具体地,如果第一存储设备如图2所示,在控制器101的处理器1011中包括cpu而不包括ai芯片的情况下,参见图4,可以由cpu作为模型微调的执行主体,该cpu可以在内存中对ai模型进行微调,例如,cpu可以收集对ai模型微调所需的数据,比如接收到的io请求等,将对ai模型微调所需的数据缓存在内存中,在微调过程中,每当cpu计算出模型参数时,cpu可以将模型参数缓存至内存中,如果对模型参数进行调整,则cpu对缓存在内存的模型参数进行更新。
[0147]
在另一些可能的实施例中,第一存储设备可以通过ai芯片,执行上述模型微调的过程。具体地,如果第一存储设备安装了ai芯片,比如,如果第一存储设备如图2所示,在控制器101的处理器1011中包括ai芯片的情况下,参见图5和图6,可以由ai芯片作为模型微调的执行主体。
[0148]
参见图5,ai芯片可以在内存中对ai模型进行模型微调。在一种可能的实现中,cpu可以收集对ai模型微调所需的数据,将对ai模型微调所需的数据发送至ai芯片,ai芯片根据微调ai模型所需的数据,计算出模型参数后,ai芯片可以将模型参数缓存至内存中,如果ai芯片对模型参数进行了调整,ai芯片可以对缓存在内存的模型参数进行更新。
[0149]
参见图6,ai芯片可以在ai芯片内部对ai模型进行模型微调。在一种可能的实现中,cpu可以收集对ai模型进行微调所需的数据,将对ai模型进行微调所需的数据缓存在
cpu对应的内存中,ai芯片可以从cpu对应的内存中读取对ai模型进行微调所需的数据,在ai芯片中进行模型微调,例如每当计算出模型参数后,ai芯片将模型参数缓存至ai芯片的内存中,如果ai芯片对模型参数进行了调整,ai芯片可以对缓存在ai芯片的内存的模型参数进行更新。
[0150]
在一些可能的实施例中,第一存储设备可以基于每个lun对应的io请求,为每个lun分别进行模型微调,从而更新每个lun对应的ai模型。例如,如果第一存储设备包括lun0、lun1以及lun2这3个lun,第一存储设备可以基于对lun0的io请求,为lun0的ai模型0进行模型微调,从而更新lun0对应的ai模型0;基于对lun1的io请求,为lun1的ai模型1进行模型微调,从而更新lun1对应的ai模型1;基于对lun2的io请求,为lun2的ai模型2进行模型微调,从而更新lun2对应的ai模型2。
[0151]
通过为每个lun对应的ai模型分别进行模型微调,由于同一存储设备中不同lun可以存储不同工作负载的数据,而不同工作负载的数据访问模式在一定概率上不同,使得对不同lun的io请求的规律在一定概率上不同,进而使得不同lun对应的ai模型所适用的模型参数在一定概率上也不同。因此,通过分别基于每个lun对应的io请求,为每个lun分别模型训练,可以保证每个lun对应的ai模型的微调方式与对应的lun更加匹配,因此可以提高微调后的ai模型的精确性。
[0152]
在一些可能的实施例中,第一存储设备可以持久化存储微调后的ai模型,例如将微调后的ai模型写入硬盘空间,从而通过硬盘对ai模型持久化存储。当第一存储设备再次接收到io请求时,第一存储设备可以读取已存储的微调后的ai模型,基于io请求,获取微调后的ai模型的预测结果。
[0153]
在一些可能的实施例中,如果第一存储设备通过cpu执行模型训练的过程,参见图4,可以由cpu将ai模型从内存持久化存储至硬盘中。如果第一存储设备通过ai芯片执行模型训练的过程,参见图5,可以由ai芯片将ai模型从ai芯片持久化存储至硬盘中。或者,参见图6,可以由ai芯片将ai模型从cpu对应的内存持久化存储至硬盘中。
[0154]
第一存储设备可以在任意时机下持久化存储微调后的ai模型。示例性地,第一存储设备可以而不限于在下述情况一至情况三中的任一项下持久化存储微调后的ai模型。
[0155]
情况一、定期存储。第一存储设备可以每隔预设时长,存储一次微调后的ai模型。该预设时长可以根据实验、经验或需求设置,本实施例对此不做限定。
[0156]
情况二、内存不足时存储。具体地,第一存储设备可以判断内存是否小于内存阈值,如果内存小于内存阈值,则将内存中的微调后的ai模型写入硬盘空间。
[0157]
情况三、掉电时存储。具体地,当第一存储设备掉电时,第一存储设备的备份电源可以提供电能,第一存储设备可以使用备份电源的电能,将内存中的微调后的ai模型写入硬盘空间。
[0158]
步骤309、第一存储设备根据ai模型的预测结果,提供目标功能。
[0159]
目标功能可以是能够通过ai模型的预测结果提供的任意功能。例如,目标功能可以而不限于缓存预取功能或智能调度功能。
[0160]
例如,如果预测结果是目标io请求,提供目标功能可以包括下述步骤一至步骤二:
[0161]
步骤一、第一存储设备可以根据目标io请求,读取指令或数据。例如,可以解析目标io请求,得到目标io请求携带的指令或数据的存储地址,根据该存储地址从主存储器或
辅助存储器读取指令或数据。
[0162]
步骤二、第一存储设备可以将该指令或数据写入该第一存储设备的缓存,从而提供缓存预取功能。
[0163]
由于指令或数据在处理器使用之前,提前被写入至缓存中,使得处理器可以对缓存中的指令或数据进行读写,那么由于处理器对缓存的访问速度比对主存储器以及辅助存储器的访问速度更快,可以让处理器快速获取到数据,从而加快处理器处理数据的速度,提高处理器处理数据的效率。
[0164]
例如,如果预测结果是工作负载信息,提供目标功能可以包括下述步骤一至步骤二:
[0165]
步骤一、第一存储设备可以根据工作负载信息,查询工作负载与访问模式之间的对应关系,得到工作负载信息对应的访问模式。
[0166]
其中,工作负载与访问模式之间的对应关系可以预存在第一存储设备中,工作负载与访问模式之间的对应关系用于指示每个工作负载对应的访问模式,例如,工作负载与访问模式之间的对应关系可以包括一个或多个工作负载的标识以及一种或多种访问模式的标识。作为示意,工作负载与访问模式之间的对应关系可以如下表2所示。
[0167]
表2
[0168]
工作负载访问模式工作负载1顺序访问工作负载2随机访问
[0169]
步骤二、第一存储设备根据访问模式,判断是否进行缓存预取。或者,第一存储设备根据访问模式,确定待预取的指令或数据。
[0170]
例如,如果访问模式是顺序读,第一存储设备可以判定进行缓存预取,作为示例,第一存储设备可以从最近读取的扇区的下一个扇区读取数据,写入缓存。
[0171]
例如,如果预测结果是第二分配信息,提供目标功能可以包括下述步骤一至步骤二:
[0172]
步骤一、第一存储设备根据第二分配信息,为每个任务分配处理资源、存储资源或网络资源中的至少一项。
[0173]
步骤二、第一存储设备通过每个任务对应的处理资源,处理每个任务;和/或,第一存储设备通过每个任务对应的存储资源,存储每个任务对应的数据;和/或,第一存储设备通过每个任务对应的网络资源,为每个任务进行网络通信。
[0174]
在一些可能的实施例中,第一存储设备可以通过cpu来执行步骤308以及步骤309。在另一些可能的实施例中,第一存储设备也可以通过ai芯片来执行步骤308,ai芯片将预测结果发送至cpu,cpu从ai芯片接收预测结果,cpu执行步骤309。
[0175]
需要说明的一点是,缓存预取、工作负载识别以及智能调度这三种功能仅是示例,在另一些可能的实施例中,也可以通过io请求训练出ai模型,来实现除了缓存预取、工作负载识别以及智能调度之外的其他功能。例如,可以通过ai模型,来实现垃圾数据的智能清除功能。具体来讲,如果第二存储设备存储的数据包括应用a的数据、应用b的数据以及应用c的数据,其中应用b的数据被高频删除,当应用a的数据、应用b的数据以及应用c的数据从第二存储设备迁移至第一存储设备后,应用b的数据仍然需要被高频删除的概率很大。有鉴于
此,可以由旧的存储设备,通过ai模型,学习出需要从存储的数据中删除哪些数据的规律,将ai模型和数据一起迁移至新的存储设备上。作为一种可能的实现方式,第二存储设备可以在历史运行中,基于对数据的删除请求,训练得到第四ai模型,第二存储设备可以向第一存储设备发送第四ai模型以及数据,第一存储设备可以存储数据以及第四ai模型,根据第四ai模型,确定待删除的数据,删除确定的数据。
[0176]
相关技术中,在数据从原来的存储设备迁移到新的存储设备的场景下,ai模型不会随着数据的迁移而迁移,新的存储设备需要在运行过程中,重新收集大量的模型训练的数据,例如缓存大量的io请求,并且,新的存储设备需要重新进行模型训练。由于重新进行模型训练的过程以及重新收集数据的过程会耗费巨大的处理资源,因此造成新的存储设备的性能产生下降,出现较大的爬坡时间。
[0177]
而本实施例提供的方法,在数据从第二存储设备迁移至第一存储设备的场景下,通过将ai模型也从第二存储设备迁移至第一存储设备,第一存储设备可以复用第二存储设备已训练的ai模型,来得到ai模型的预测结果,从而免去了第一存储设备重新进行模型训练的流程,进而免去了第一存储设备重新训练ai模型带来的时间成本。由于第一存储设备得到ai模型的速度更快,根据ai模型来得到预测结果的速度也就更快,因此根据预测结果来提供缓存预取、负载识别、智能调度等功能的速度也就更快,从而极大地提高了进行缓存预取、负载识别以及智能调度的效率。
[0178]
上述实施例描述了两个存储设备之间复用ai模型的流程,在本申请实施例中,同一存储设备中的不同lun之间也可以复用ai模型,以下通过图7实施例进行描述。
[0179]
图7是本申请实施例提供的一种访问请求的处理方法的流程图,如图7所示,该方法应用于第一存储设备。该方法可以包括下述步骤701至706:
[0180]
步骤701、第一存储设备创建第二lun。
[0181]
第二lun是指第一存储设备新建的lun,第二lun为空白的lun,即,第二lun中未存储数据。例如,参见图8至图10,第二lun可以为lun7。
[0182]
步骤702、第一存储设备根据第一lun对应的ai模型,获取第二lun对应的ai模型。
[0183]
本实施例中,同一存储设备中的各个lun对应的ai模型的参数可以进行共享,当创建了第二lun,第一存储设备可以复用第一lun对应的ai模型,来得到第二lun对应的ai模型,从而将已有的第一lun对应的ai模型的参数分享给新建的第二lun对应的ai模型。
[0184]
在一些可能的实施例中,第一存储设备可以获取第一lun对应的ai模型的参数,将第一lun对应的ai模型的参数作为第二lun对应的ai模型的初始化参数,创建第二lun对应的ai模型。
[0185]
在一些可能的实施例中,第一lun的数量可以为一个或多个,步骤703可以包括而不限于下述实现方式一至实现方式二中的一项或多项的结合。
[0186]
实现方式一、第一存储设备从一个或多个第一lun对应的ai模型中,选择一个ai模型,作为第二lun对应的ai模型。例如,可以从一个或多个第一lun对应的ai模型中,随机选择一个ai模型,作为第二lun对应的ai模型。示例性地,参见图8,创建lun7后,可以从lun1、lun2至lun6这6个lun对应的6个ai模型中,随机选择一个ai模型,作为lun7的ai模型。
[0187]
实现方式二、第一存储设备对一个或多个第一lun对应的ai模型进行加权平均,得到第二lun对应的ai模型。具体地,可以对一个或多个第一lun对应的ai模型的参数进行加
权平均,将加权平均值作为第二lun对应的ai模型的初始化参数,创建第二lun对应的ai模型。其中,可以对每个第一lun对应的ai模型中同一位置的模型参数进行加权平均。以对ai模型1与ai模型2进行加权平均为例,可以对ai模型1的第i层的卷积核的权重与ai模型2的第i层的卷积核的权重进行加权平均,作为ai模型3的第i层的卷积核的权重。其中i为正整数。
[0188]
在一些可能的实施例中,实现方式二可以包括而不限于下述情况一至情况三中的一项或多项。
[0189]
情况一、每个第一lun的权重相同。具体地,可以获取一个或多个第一lun对应的ai模型的平均值,作为第二lun对应的ai模型。
[0190]
情况二、每个第一lun的权重与对应的应用标识在所有第一lun对应的应用标识中所占的比例正相关。具体地,第一lun对应的应用标识在所有第一lun对应的应用标识中所占的比例越大,第一lun的权重越大。例如,如果第一存储设备包括lun1至lun10这10个lun,lun1至lun8这8个lun均对应数据库1,lun9至lun10这2个lun对应数据库2,则lun1至lun8对应的ai模型的权重可以高于lun9至lun10对应的ai模型的权重。
[0191]
情况三、每个第一lun的权重与对应的用户标识在所有第一lun对应的用户标识中所占的比例正相关。具体地,第一lun对应的用户标识在所有第一lun对应的用户标识中所占的比例越大,第一lun的权重越大。例如,如果第一存储设备包括lun1至lun10这10个lun,lun1至lun8这8个lun均对应用户1,lun9至lun10这2个lun对应用户2,则lun1至lun8对应的ai模型的权重可以高于lun9至lun10对应的ai模型的权重。
[0192]
在一些可能的实施例中,第一存储设备中可以有大量的lun,如果对所有lun对应的ai模型进行加权平均,可能会导致运算量较大。有鉴于此,第一存储设备可以从所有lun中,选择n个ai模型,对选择的n个ai模型进行加权平均,作为第二lun对应的ai模型。其中,选择的方式可以为随机选择。n为正整数,n的具体数值可以根据实验、经验或需求设置,本实施例对此不做限定。
[0193]
在一些可能的实施例中,第一lun对应的ai模型可以包括用于进行缓存预取的第一ai模型、用于识别工作负载的第二ai模型以及用于智能调度的第三ai模型中的一项或多项。相应地,步骤702可以包括以下(1)至(3)中的一项或多项:
[0194]
(1)根据该第一lun对应的第一ai模型,获取该第二lun对应的第一ai模型。
[0195]
(2)根据该第一lun对应的第二ai模型,获取该第二lun对应的第二ai模型。
[0196]
(3)根据该第一lun对应的第三ai模型,获取该第二lun对应的第三ai模型。
[0197]
需要说明的一点是,本实施例仅是以复用第一lun对应的ai模型,来获取第二lun对应的ai模型为例进行说明。在另一些可能的实施例中,第一存储设备也可以在历史运行过程中,创建第三lun,基于对第三lun的数据的历史io请求,训练得到第三lun对应的ai模型。如果创建了第二lun,第一存储设备可以读取第三lun对应的ai模型,根据该第三lun对应的ai模型,获取该第二lun对应的ai模型。
[0198]
其中,第三lun是指第一存储设备在创建第二lun之前已创建的lun。作为示例,第一存储设备可以创建第1个lun后,基于对第1个lun的io请求进行模型训练,得到第1个lun对应的ai模型。当第一存储设备创建第2个lun时,可以根据第1个lun对应的ai模型,获取第2个lun对应的ai模型;第一存储设备在创建第3个lun时,可以根据第1个lun对应的ai模型
以及第2个lun对应的ai模型,获取第3个lun对应的ai模型。
[0199]
例如,参见图8至图10,如果第一存储设备已经创建了lun1、lun2、lun3至lun6,第一存储设备创建了lun7时,可以根据lun1、lun2、lun3至lun6中的一项或多项对应的ai模型,获取lun7对应的ai模型。在此例中,第二lun即为lun7,第三lun可以包括lun1、lun2、lun3至lun6中的一项或多项。
[0200]
在一种可能的实现中,第一存储设备可以预先分配共享存储空间,共享存储空间用于存储每个lun对应的ai模型,在第一存储设备运行过程中,每当第一存储设备创建一个lun,得到该lun对应的ai模型后,可以将该ai模型写入共享存储空间。当第一存储设备创建第二lun时,第一存储设备可以从共享存储空间,读取第一lun对应的ai模型或者第三lun对应的ai模型。共享存储空间可以为第一存储设备的硬盘空间。例如,参见图8,第一存储设备在创建lun7时,硬盘空间中保存了lun1的ai模型、lun2的ai模型至lun6的ai模型。
[0201]
需要说明的一点是,将每个lun对应的ai模型均写入共享存储空间仅是示例性实现方式。在另一些可能的实施例中,第一存储设备可以为每个lun分配对应的存储空间,建立lun与存储空间之间的对应关系,在每个lun对应的存储空间,存储每个lun对应的ai模型。
[0202]
步骤703、第一存储设备持久化存储第二lun对应的ai模型。
[0203]
在一些可能的实施例中,第一存储设备可以分配硬盘空间,将第二lun对应的ai模型写入硬盘空间,从而通过硬盘对ai模型持久化存储。其中,如果第一存储设备在共享存储空间存储每个lun对应的ai模型,第一存储设备可以将第二lun对应的ai模型写入共享存储空间。如果第一存储设备在每个lun对应的存储空间存储每个lun对应的ai模型,第一存储设备可以为第二lun分配存储空间,在分配的存储空间存储第二lun对应的ai模型,建立分配的存储空间与第二lun之间的对应关系。
[0204]
步骤704、第一存储设备接收对第二lun的io请求。
[0205]
步骤705、第一存储设备根据io请求,获取第二lun对应的ai模型的预测结果。
[0206]
对第二lun的io请求可以包括访问请求以及写入请求中的一项或多项,访问请求用于请求访问属于第二lun的数据,写入请求用于请求向第二lun写入数据。示例性的,应用在缓存预取的场景,第一存储设备将该io请求输入该第二lun对应的第一ai模型,输出目标访问请求,该目标访问请求表示该第一存储设备的处理器将要使用的指令或数据;应用在工作负载识别的场景,第一存储设备可以对当前时间段的该io请求进行统计,得到访问特征;第一存储设备可以将该访问特征输入该第二lun对应的第二ai模型,输出工作负载信息,该工作负载信息表示发送该访问请求的工作负载;应用在智能调度的场景,第一存储设备可以将该访问请求以及第一分配信息输入第二lun对应的第三ai模型,输出第二分配信息,该第一分配信息表示当前为每个任务分配的处理资源、存储资源或网络资源中的至少一项。
[0207]
其中,如果第一存储设备将第二lun对应的ai模型写入共享存储空间,第一存储设备可以从共享存储空间中读取第二lun对应的ai模型。如果第一存储设备将第二lun对应的ai模型写入为第二lun单独分配的存储空间,第一存储设备可以根据第二lun与ai模型之间的对应关系,确定为第二lun分配的存储空间,从该存储空间读取第二lun对应的ai模型。
[0208]
步骤706、第一存储设备根据ai模型的预测结果,提供目标功能。
[0209]
步骤706与步骤309同理,在此不做赘述。
[0210]
在一些可能的实施例中,第二lun可以完全复用第一lun对应的ai模型。完全复用ai模型是指不改变第一lun对应的ai模型的参数,直接将第一lun对应的ai模型作为第二lun对应的ai模型。在另一些可能的实施例中,也可以对第一lun对应的ai模型进行模型微调,将微调后的ai模型作为第二lun对应的ai模型。对ai模型进行模型微调的过程可以包括:第一存储设备可以根据对第二lun的io请求,获取第一lun对应的ai模型的预测结果,第一存储设备根据预测结果以及参考结果,对第一lun对应的ai模型的参数进行调整。
[0211]
在一些可能的实施例中,第一存储设备可以通过cpu,执行上述过程。具体地,如果第一存储设备未安装ai芯片,比如,如果第一存储设备如图2所示,在控制器101的处理器1011中包括cpu而不包括ai芯片的情况下,cpu可以是对第一lun对应的ai模型进行模型训练的执行主体、对第一lun对应的ai模型进行复用的执行主体以及对第二lun对应的ai模型进行模型微调的执行主体,例如,参见图8,cpu可以分别收集训练lun1至lun6的ai模型所需的数据,例如对lun1的io请求、对lun2的io请求至对lun6的io请求,在内存中,训练lun1至lun6的ai模型,将lun1至lun6的ai模型持久化存储至硬盘空间,当cpu创建lun7后,cpu可以将lun1至lun6的ai模型从硬盘空间载入至内存中,在内存中,复用lun1至lun6的ai模型,来得到lun7的ai模型,对lun7的ai模型进行微调。其中,cpu可以收集对lun7的ai模型微调所需的数据,例如接收到对lun7的io请求,cpu可以将对lun7的io请求缓存在内存中,cpu可以基于io请求以及lun7的ai模型,获取推理结果以及参考结果,根据推理结果以及参考结果来计算出模型参数,将内存中lun7的ai模型的参数更新为计算出的模型参数。
[0212]
在另一些可能的实施例中,第一存储设备可以通过ai芯片,执行上述过程。具体地,如果第一存储设备安装了ai芯片,比如,如果第一存储设备如图2所示,在控制器101的处理器1011中包括ai芯片的情况下,ai芯片可以是对第一lun对应的ai模型进行模型训练的执行主体、对第一lun对应的ai模型进行复用的执行主体以及对第二lun对应的ai模型进行模型微调的执行主体。而使用第二lun对应的ai模型进行预测的执行主体可以是ai芯片,也可以是cpu。
[0213]
参见图9,ai芯片可以在内存中进行模型训练以及模型微调。具体地,cpu可以分别收集训练lun1至lun6的ai模型所需的数据,例如对lun1的io请求、对lun2的io请求至对lun6的io请求,将训练lun1至lun6的ai模型所需的数据缓存在内存中,ai芯片可以从内存中读取训练lun1至lun6的ai模型所需的数据,训练lun1至lun6的ai模型,将lun1至lun6的ai模型持久化存储至硬盘空间,另外,ai芯片可以将训练好的ai模型发送至内存,以便cpu从内存中读取ai模型,从而使用ai模型进行预测。当cpu创建lun7后,cpu可以将lun1至lun6的ai模型从硬盘空间载入至内存,ai芯片可以从内存中读取lun1至lun6的ai模型,复用lun1至lun6的ai模型,来得到lun7的ai模型。另外,ai芯片可以对lun7的ai模型进行微调,具体地,cpu可以收集对lun7的ai模型微调所需的数据,例如接收到对lun7的io请求,cpu可以将对lun7的io请求缓存在内存中,ai芯片可以从内存中读取对lun7的io请求,ai芯片可以基于io请求以及lun7的ai模型,获取推理结果以及参考结果,根据推理结果以及参考结果来计算出模型参数,将内存中lun7的ai模型的参数更新为计算出的模型参数。
[0214]
参见图10,ai芯片可以在ai芯片内部进行模型训练以及模型微调。具体地,与图9相区别的是,当cpu创建lun7后,cpu可以将lun1至lun6的ai模型从硬盘空间直接载入至ai
芯片的内存,ai芯片可以从ai芯片的内存中读取lun1至lun6的ai模型,复用lun1至lun6的ai模型,来得到lun7的ai模型。在模型微调的过程中,ai芯片计算出lu7的ai模型的微调后的模型参数后,可以将ai芯片的内存中的lun7的ai模型的参数更新为计算出的模型参数。
[0215]
其中,如果第一存储设备对ai模型进行了模型微调,第一存储设备可以持久化存储微调后的第二lun对应的ai模型。其中,可以由cpu或ai芯片对第二lun的微调后的ai模型持久化存储。例如,参见图8,cpu可以将lun7的ai模型从内存持久化存储至硬盘空间,参见图9和图10,ai芯片可以将lun7的ai模型,从内存或ai芯片持久化存储至硬盘空间。此外,第一存储设备可以在任意时机下持久化存储微调后的ai模型。示例性地,第一存储设备可以而不限于在下述情况一至情况三中的任一项下持久化存储微调后的ai模型。
[0216]
情况一、定期存储。第一存储设备可以每隔预设时长,存储一次第二lun的微调后的ai模型。该预设时长可以根据实验、经验或需求设置,本实施例对此不做限定。
[0217]
情况二、内存不足时存储。具体地,第一存储设备可以判断内存是否小于内存阈值,如果内存小于内存阈值,则将内存中第二lun的微调后的ai模型写入硬盘空间。
[0218]
情况三、掉电时存储。具体地,当第一存储设备掉电时,第一存储设备的备份电源可以提供电能,第一存储设备可以使用备份电源的电能,将内存中的微调后的ai模型写入硬盘空间。
[0219]
在一些可能的实施例中,第一存储设备持久化存储ai模型后,第一存储设备可以在上电时从硬盘空间中读取第二lun对应的ai模型,加载至内存中。另外,第一存储设备也可以在任意需要使用ai模型的情况下,比如要提供缓存预取、工作负载识别、智能调度等功能时,从硬盘空间中读取第二lun对应的ai模型,加载至内存中,以便调用ai模型。
[0220]
相关技术中,每当存储设备新创建一个lun,存储设备需要在运行过程中,为新建的lun收集大量的模型训练的数据,例如缓存大量针对新建的lun的io请求,并且,存储设备需要为新建的lun进行模型训练。由于进行模型训练的过程以及收集数据的过程会耗费巨大的处理资源,因此造成第一存储设备的性能产生下降,出现较大的爬坡时间,并且影响了利用ai模型为新建的lun提供缓存预取、负载识别、智能调度等功能的效率。
[0221]
本实施例提供的方法,在新建lun的场景下,可以复用已有的lun对应的ai模型,来得到新建的lun对应的ai模型,从而免去了为新建的lun进行模型训练的流程,进而免去了为新建的lun进行模型训练带来的时间成本。由于得到新建的lun对应的ai模型的速度更快,根据ai模型得到预测结果的速度也就更快,因此根据预测结果来为新建的lun提供缓存预取、负载识别、智能调度等功能的速度也就更快,从而极大地提高了为新建的lun进行缓存预取、负载识别以及智能调度的效率。
[0222]
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
[0223]
以上介绍了本申请实施例的访问请求的处理方法,以下介绍本申请实施例的访问请求的处理装置,应理解,该访问请求的处理装置其具有上述方法中第一存储设备的任意功能。
[0224]
图11是本申请实施例提供的一种访问请求的处理装置的结构示意图,如图11所示,该装置包括:接收模块1101,用于执行步骤305;存储模块1102,用于执行步骤306;该接收模块1101,还用于执行步骤307;获取模块1103,用于执行步骤308。
[0225]
可选地,该数据属于该第二存储设备的第一逻辑存储单元lun,该ai模型为该第一lun对应的ai模型。
[0226]
可选地,该装置还包括:创建模块,用于创建第二lun;该获取模块1103,还用于根据该第一lun对应的ai模型,获取该第二lun对应的ai模型。
[0227]
可选地,该获取模块1103,用于执行下述任意一项:从一个或多个该第一lun对应的ai模型中,选择一个ai模型,作为该第二lun对应的ai模型;对一个或多个该第一lun对应的ai模型进行加权平均,得到该第二lun对应的ai模型。
[0228]
可选地,每个第一lun的权重相同;或者,每个第一lun的权重与对应的应用标识在所有第一lun对应的应用标识中所占的比例正相关,或者,每个第一lun的权重与对应的用户标识在所有第一lun对应的用户标识中所占的比例正相关。
[0229]
可选地,该ai模型包括第一ai模型,该获取模块1103,用于将该访问请求输入该第一ai模型,输出目标访问请求,该目标访问请求表示该第一存储设备的处理器将要使用的指令或数据;该存储模块1102,还用于将该指令或数据写入该第一存储设备的缓存。
[0230]
可选地,该ai模型包括第二ai模型,该获取模块1103,包括:统计子模块,用于对当前时间段的该访问请求进行统计,得到访问特征;输入输出子模块,用于将该访问特征输入该第二ai模型,输出工作负载信息,该工作负载信息表示发送该访问请求的工作负载。
[0231]
可选地,该ai模型包括第三ai模型,该获取模块1103,用于将该访问请求以及第一分配信息输入该第三ai模型,输出第二分配信息,该第一分配信息表示当前为每个任务分配的处理资源、存储资源或网络资源中的至少一项;该装置还包括:分配模块,用于根据该第二分配信息,为该每个任务分配处理资源、存储资源或网络资源中的至少一项。
[0232]
需要说明的一点是,图11实施例提供的访问请求的处理装置在处理访问请求时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将访问请求的处理装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的访问请求的处理装置与访问请求的处理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0233]
以上介绍了本申请实施例的访问请求的处理装置,以下介绍访问请求的处理装置可能的产品形态。
[0234]
作为一种可能的产品形态,上述访问请求的处理装置,可以由芯片来实现,该芯片可以为通用处理器。
[0235]
示例性地,该芯片可以包括处理电路和与该处理电路内部连接通信的输入接口以及存储介质;该处理电路用于执行步骤308;该输入接口用于执行步骤305以及步骤307。该存储介质用于执行步骤306。可选地,该存储介质还用于存储处理电路执行的指令。
[0236]
作为一种可能的产品形态,本申请实施例该的访问请求的处理装置,还可以使用下述来实现:一个或多个fpga、pld、复杂可编程逻辑器件(英文:complex programmable logic device,简称:cpld)、控制器、专用集成电路(application specific integrated circuit,asic)、状态机、门逻辑、分立硬件部件、晶体管逻辑器件、网络处理器(network processor,np)、任何其它适合的电路、或者能够执行本申请通篇所描述的各种功能的电路的任意组合。
[0237]
应理解,但凡具备上述方法实施例中第一存储设备的功能的任何形态的产品都落
入本申请的保护范围。还应理解,以上介绍仅为举例,不限制本申请实施例的访问请求的处理装置的产品形态仅限于此。
[0238]
本领域普通技术人员可以意识到,结合本文中所公开的实施例中描述的各方法步骤和模块,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各实施例的步骤及组成。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0239]
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和模块的具体工作过程,可以参见前述方法实施例中的对应过程,在此不再赘述。
[0240]
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,该模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或模块的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
[0241]
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请实施例方案的目的。
[0242]
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以是两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
[0243]
所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0244]
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。