一种面向深度学习的小文件预处理系统的制作方法

文档序号:30437592发布日期:2022-06-17 20:52阅读:95来源:国知局
一种面向深度学习的小文件预处理系统的制作方法

1.本发明实施例涉及深度学习文件处理技术领域,尤其涉及一种面向深度学习的小文件预处理系统。


背景技术:

2.深度学习模拟人脑神经结构对外界信号的反射过程,建立起由多个神经网络层组成的模型,对原始数据进行一系列非线性的变化,从而学习到更高层次的表示和特征。近年来,得益于硬件的不断进步以及算法的不断优化,深度学习发展迅猛,为计算机视觉、自然语言处理和语音识别等应用带来了巨大的突破。
3.社会各界对深度学习的需求日益增长带来了许多问题。首先,随着神经网络模型规模的不断扩大,模型在训练时涉及大量的矩阵运算、需要海量数据,对硬件的计算和存储性能要求比较高;其次,深度学习是一个复杂的过程,包括训练、数据清洗、模型压缩和部署等步骤;这些步骤依赖计算、存储、网络等多种资源,需要相关工具的支持,以减少人力、降低时间成本。深度学习平台整合了深度学习的各个环节,提供一系列自动化工具,借助虚拟化、调度算法等技术,提高资源的利用率。
4.在深度学习平台中,存储数据集的底层的分布式存储系统是关键组件之一。随着大数据时代的到来,分布式文件系统由于易用、高可靠、扩展性高的特点,在存储领域里占据着主导地位。分布式文件系统设计的初衷是解决大型文件的存储需求,所以系统在处理海量小文件时性能损耗严重。当前大多数深度学习平台都是以分布式文件系统为底层存储系统,相关数据集也是由数量庞大的图片、文本等小文件构成,需求不匹配。


技术实现要素:

5.本发明提供一种面向深度学习的小文件预处理系统,以提升底层存储系统的性能,解决海量小文件存储和读取时产生的严重性能损耗问题。
6.本发明提供的一种面向深度学习的小文件预处理系统,该系统构建在对象存储系统ceph之上,包括客户端层、核心服务层和存储层;
7.所述客户端层用于向所述存储层发起处理请求,将待上传的小文件合并成数据块之后上传至存储层,并为每一个数据块生成全局唯一的标识;
8.所述核心服务器用于响应并执行所述客户层的处理请求;
9.所述处理请求包括写请求、读请求、删除请求以及修改请求。
10.可选的,该系统还包括缓存层;
11.相应的,当所述处理请求为写请求时,所述核心服务器响应并执行所述客户层的处理请求,包括:
12.所述客户端层向所述核心服务层发起第一次请求,所述缓存层会将待写入数据暂时缓存下来,然后所述核心服务层立即通知所述客户端层数据已写入;
13.所述核心服务层向所述存储层发起第二次请求,所述核心服务层启动一个新的线
程,从所述缓存层中将待写入数据读取出来,写入到所述存储层。
14.可选的,当所述处理请求为读请求时,所述核心服务器响应并执行所述客户层的处理请求,包括:
15.所述核心服务器根据所述读请求对所述缓存层中的数据进行查看;
16.若待读取数据在所述缓存层中,所述核心服务层从缓存层中获取文件返回给客户端层。
17.可选的,所述缓存层通过缓存淘汰算法来缓存数据。
18.可选的,所述客户端层还用于生成数据块的元数据,并将元数据上传至所述核心服务层。
19.可选的,所述核心服务层还用于对元数据进行存储、查询、修改以及删除。
20.可选的,所述核心核心服务层还用于将所述客户端层请求的数据块进行解包后返回给所述客户端层。
21.可选的,数据块全局唯一的标识采用多字段编码与哈希码相结合的方式生成。
22.本发明提供的一种面向深度学习的小文件预处理系统,提升了底层存储系统的性能,解决海量小文件存储和读取时产生的严重性能损耗问题,从而解决了数据集和网络规模不断扩大带来的单节点训练难以满足的计算和存储需求问题。
附图说明
23.图1是本发明中的一种面向深度学习的小文件预处理系统的整体框架图;
24.图2是本发明中的客户端层详细设计与实现过程图;
25.图3是本发明中的缓存层和核心服务层详细设计与实现过程图;
26.图4是本发明中的一种面向深度学习的小文件预处理系统部署图;
27.图5是本发明中的fuse文件系统的架构以及方法的执行流程;
28.图6是本发明中的客户端批量读取文件的示意图;
29.图7是本发明中的核心服务器执行文件写入请求的活动图;
30.图8是本发明中的核心服务器执行单个文件读取请求的活动图;
31.图9是本发明中的核心服务器执行单个文件删除请求的活动图;
32.图10是本发明中的客户端层批量读取文件示意图;
33.图11是本发明中的文件元数据结构图;
34.图12是本发明中的数据块元数据结构图;
35.图13是本发明中的数据块id组成示意图;
36.图14是本发明中的文件归并写流程图;
37.图15a是本发明中文件大小相同时写文件性能测试图;
38.图15b是本发明中文件大小相同时读文件性能测试图;
39.图16a是本发明中不同数据集的写文件性能测试图;
40.图16b是本发明中不同数据集的读文件性能测试图;
41.图17a是本发明中另一文件大小相同时写文件性能测试图;
42.图17b是本发明中另一文件大小相同时读文件性能测试图;
43.图18为本发明中的深度学习模型训练性能测试图。
具体实施方式
44.下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
45.本发明实施例提供了一种面向深度学习的小文件预处理系统,该系统构建在对象存储系统ceph之上。参见图1,该系统系统采用分层设计,由上到下划分为四个层次:客户端层、核心服务层、缓存层和存储层。
46.其中,客户端层是整个预处理系统的门户,给用户提供了一系列文件操作的接口,用户登录后即可使用,详细设计如图2所示。用户登录发生在客户端首次与核心服务层建立连接时,需要用户名称与密码来进行认证。认证成功后,核心服务层会为该用户保存一个token,该token对应当前的连接。用户可以通过客户端层上传数据集,以供后续训练使用。为了提升存储系统写小文件时的性能,客户端层在上传数据时采取了归并写的策略,一批小文件会被合并到一个数据块中作为一个整体上传到存储层。示例性的,本发明综合考虑数据块的大小对ceph性能的影响以及合并操作带来的额外消耗,可以将其设置为4m,用户也可以通过接口自定义数据块的大小。在这个过程中,客户端层会为每一个数据块生成全局唯一的id,作为后续查找和读取该数据块的标识。
47.此外,客户端层还会生成必要的元数据信息,和数据块一起被上传到核心服务层。数据集上传成功后,客户端层提供了下载、删除以及修改文件的接口供用户调用。客户端层还承载着训练任务,模型训练的时候需要从存储层读取数据,而且通常是批量读取。因此,客户端层提供了批量读取文件的接口,以更好地支持模型的训练。上传、下载、删除以及读取接口都分为两类:对单个文件的操作和对批量文件的操作。由于修改文件的需求难以统一,因此,客户端层只提供修改单个文件的接口。对于管理员用户,客户端还提供了一系列用户管理的接口,包括创建用户、删除用户、设置用户权限以及查看用户信息等。
48.核心服务层是整个系统中最为重要的一层,主要有以下功能:
49.(1)与各层之间交互。核心服务层会与系统中的其他层之间产生交互:接收并处理客户端层的请求;从缓存层和存储层中读取数据或将数据写入。
50.(2)元数据管理。小文件归并写时产生的元数据上传到核心服务层之后,就由核心服务层管理,包括元数据的存储、查询、修改以及删除,保证元数据的安全与可用。
51.(3)数据块解包。存储层中真正存储的是数据块,然而训练模型时发起读请求的对象是文件。所以,核心服务层需要从存储层中将包含目标文件的数据块读出,并从中截取出目标文件,返回给客户端层。
52.(4)负载均衡。在深度学习平台中,存在多客户端同时向核心服务层发起请求,单节点难以承受。而且核心服务层充当承上启下的作用,安全稳定尤为重要。因此核心服务层应该是一个服务集群,负载均衡是十分必要的。
53.存储层中的数据,实质上还是经由物理节点上的操作系统,最终写入了具体的磁盘中。如果每次读写文件都需要向存储层发起请求,显然是低效的。所以,本实施例中的系统中加入了缓存层,以提升读写性能。
54.具体的,本实施例中的缓存层中实现了两种方式的缓存:写缓存和读缓存。文件被写入到存储层中经过两次请求,第一次由客户端层向核心服务层发起请求,第二次由核心
服务层向存储层发起请求,写缓存是为了使两次请求异步而设计的。第一次请求完成后,写缓存会将数据暂时缓存下来,然后核心服务层就可以立即通知客户端数据已写入。之后,核心服务层启动一个新的线程,从写缓存中将数据读取出来,写入到存储层。
55.读缓存会将读取过的数据暂时缓存下来。在之后的读请求中,核心服务层会首先到读缓存中查看是否命中。如果命中,核心服务层就无需从存储层中读取文件,而是直接从缓存服务器中获取文件返回给客户端。由于缓存空间有限,因此本专利设计一个缓存淘汰算法,尽可能保证较高的缓存命中率。该缓存淘汰算法的主要步骤如下:
56.(1)在缓存服务器上开辟一块缓存池,起初缓存池为空;
57.(2)由于最终从存储层中读取出的是一个数据块,因此,当客户端发起读请求时,核心服务器一边返回目标文件,一边将数据块中的剩余文件放入缓存池中,如果该文件已经缓存过,则直接跳过;
58.(3)之后客户端再次发起读取请求时,如果缓存命中,则直接从缓存池中返回该文件,并将该文件插入到淘汰队列中,等待删除;
59.(4)当缓存池达到饱和状态时,则不再进行缓存;
60.(5)当缓存池不断淘汰过期数据使得剩余空间大于最大容量的五分之一时,继续开始缓存。
61.具体的,缓存层与核心服务层的详细设计如图3所示。
62.客户端层上传的数据,经由核心服务层处理后,最后都要写入到存储层。存储层除了需要负责存储数据之外,还需要具备数据备份、自动扩容以及数据迁移等功能。
63.基于上述的架构设计,该小文件预处理系统的部署图如图4所示。
64.从功能上来看,客户端可以划分为两类:上传客户端和训练客户端。上传客户端用于向系统提交数据集存储请求,训练客户端指的是部署深度神经网络模型的节点,负责将存储层的数据读取出来交给模型训练。两类客户端上都部署了client实例,用来封装各种接口。在训练客户端中,还部署了基于fuse实现的文件系统,图5展示了fuse文件系统的架构以及方法的执行流程。如图5所示,通过将该文件系统(./myfuse)挂载到本地的目录(/tmp/fuse),就可以像读取本地文件一样读取远端数据,避免修改模型代码。要在客户端实现一个可以批量读取的文件系统,只需要实现libfuse中对应的读文件接口。当模型读取文件时,先将文件名缓存下来,直到待请求的文件数量达到batch_size时,再向服务端发起读请求,整个过程如图6所示。
65.核心服务层也分成了两类服务器:核心服务器和元数据服务器。从图4可以看出,核心服务器是整个系统的通信枢纽,所有的组件都会和核心服务器进行通信,为了保证系统的高可用性,核心服务器实际上是一组集群。核心服务器中主要的请求活动包括写入文件请求、读取文件请求和删除文件请求等,上述请求的活动图分别如图7、8、9所示,批量读取文件如图10所示。核心服务器上部署了coreserver实例,coreserver类实现了核心服务器的所有功能。此外,还有metaproxy实例和cacheproxy实例,分别负责与元数据服务器和缓存服务器交互。元数据服务器保存文件元数据和数据块元数据;文件元数据是文件名到数据块的映射关系,结构如图11所示,数据块元数据实现从数据块中定位到文件的位置,结构如图12所示。元数据服务器上部署了redis服务,负责元数据的存储和持久化。缓存层只有一个缓存服务器。在缓存服务器上同样也部署redis服务,用作系统的缓冲池。
66.优选的,存储层是一个ceph集群。ceph是一个完备的、高性能的对象存储系统,只需要通过修改配置文件即可实现多副本备份、故障检测、数据迁移以及自动扩容等功能,保证了数据的安全与可用。而且ceph基于crush算法,使得客户端与osd、osd与osd之间可以直接通信,即便存储容量上升到pb级别或者以上,系统也不会存在明显的调度和处理瓶颈。
67.示例性的,本系统中的使用的网络通信方式是brpc(baiduremoteprocesscall),brpc是百度公司开源的rpc框架,其主要具备以下特点:高易用性、高可靠性等。
68.上述的数据块id采用多字段编码与哈希码相结合的方式生成,结构如图13所示。数据块id由四个部分组成:
69.(1)48位的unix时间戳。unix时间戳是从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数;
70.(2)16位顺序号每生成一个数据块自增1,溢出后归零重新计数;
71.(3)32位的机器标识。即机器的ip地址,在集群的局域网中可以保证唯一性;
72.(4)32位的哈希码。由用户名和数据集名作为输入生成;
73.进一步的,上述的文件归并写流程如图14所示。所有上传的文件首先会被插入到等待队列中,然后合并线程会从队列中取出一个文件追加到数据块中,同时生成相应的元数据。如果数据块还没有创建,客户端会创建一个新的数据块,并生成唯一的数据块id。当数据块的大小加上下一个待合并的文件超过了4m时,客户端会将数据块与元数据打包发送到核心服务器进行存储。
74.实验验证
75.本测试设置了多组数据集,每个数据集中的文件大小相同,分别是4kb、8kb、16kb、32kb、64kb、128kb,256kb、1mb、2mb以及4mb。分别使用直接上传和经过ops上传的方式将这些数据集上传到ceph中,并记录下相应的吞吐量。结果下图15所示,可以发现,在文件比较小的时候,原生ceph的性能极低,与ops的性能差距比较大,这是因为ops会将小文件聚合,减少了请求量。随着文件不断增大,两者之间的差距在缩小,在4m大小时,ceph的性能略高于ops,这是因为ops需要额外生成元数据信息,产生了性能损耗。单纯对比ops的性能可以发现,ops写小文件的性能低于写大文件的性能,原因是文件过小时,生成一个数据块要聚合大量的文件,这个过程比较消耗时间。
76.读文件的性能测试是通过两种方式来读取上述的数据集:直接读取和通过ops读取,实验结果如图15(b)所示。当文件比较小时,原生ceph的性能很差,ops可以维持在一个较高的水平。随着文件的增大,ceph的性能逐渐提升,ops虽然也有提升,但不是很大,原因是ops是直接读取数据块,而数据块的大小是固定的4m,因此ops的性能相对稳定。随着文件的增大,一个数据块中的文件数量在减少,将文件从数据块中截取出来的操作次数也在减少,因此性能会有一定的提升。当文件大小大于1m时,ceph的性能略优于ops,这说明截取文件操作带来的消耗比重在提升。
77.在真实数据集下ops对ceph的读写性能的测试。分别从voc、ilsvrc以及imagenet等数据集中选取1000张图片进行测试,每张图片的平均大小分别为88kb、123kb和152kb。图16(a)和图16(b)展示了不同数据集的读写性能测试结果。根据测试结果可以发现,相比于直接使用ceph进行读写,使用ceph+ops可以极大地提升数据集的读写性能,吞吐量更加稳定。而且,当数据集中每张图片的平均大小越小时,性能提升更加显著。其中,voc数据集的
写性能提升了近8倍,读性能提升了近11倍。
78.为了对比本发明提供的方法对读写性能的优化程度,本实施例在相同的测试环境中搭建了hdfs,并基于sequencefile对小文件进行合并,测试该方法对原生hdfs的性能提升状况。sequencefile是hadoop官方提供的一种文件格式。sequencefile由一个header和多个record组成,header中记录了版本号、metadata等信息,而每个文件都被视为一个record。sequencefile还支持记录压缩和块压缩,以节省磁盘空间和加快网络传输。本测试设置多组数据集,每组数据集下的文件大小相同,图17(a)和17(b)记录了测试结果。可以看出,hdfs对小文件的读写性能是优于ceph的,但是随着文件的增大,ceph的性能提升速度更快,并逐渐反超hdfs。由于sequencefile和本发明的方法分别应用于不同的存储系统,因此无法直接对比性能优劣,但是可以对比各自的性能提升程度。实验结果表明,sequencefile确实可以提升hdfs读写小文件时的性能,当文件大小为4kb时,读写性能提升最为明显,但是也仅仅提升了一倍左右,与本发明的方法相比,提升效果不明显。
79.接下来进行深度学习模型训练性能提升的测试。在训练节点上部署了vgg16模型来测试ops对训练性能的提升情况,测试数据集是1000张从voc随机选择的图片。vgg16通过ops读取数据,然后在训练节点上执行训练任务,batch_size大小设置为128。对照实验为vgg16直接从ceph中读取数据,执行同样的训练任务。实验结果统计了前10000次迭代时间的变化,如图18所示,直接使用ceph进行训练的时间明显高于使用ops进行训练的时间,而且波动较大,当文件较小时,由于ceph的读性能较差,导致了训练时间的增加。由于ops直接读取数据块,并加入了缓存,使得训练时间缩短,而且处于一个相对稳定的状态。由于redis的数据都放在服务器的内存中,因此直接从redis中读取数据的训练方式效率是最高的。由图4可以看出,在训练一开始,ceph+ops与redis的性能有一些差距,随着训练的进行,越来越多的数据被缓存,两者的性能逐渐接近。
80.实施例1
81.一种面向深度学习平台的小文件预处理系统,其特征在于包括如下步骤:
82.s1、将该小文件预处理系统客户端层、缓存层、核心服务层以及存储层核心类、核心函数实现,或者直接从现有代码拷贝到本地操作系统存储器中;各部分之间的组织关系不固定,只要满足调用关系即可;
83.s2、按照各个层次之间的关系正确的部署小文件预处理系统;
84.s3、通过客户端登录,使用brpc提供的init方法指定核心服务器的ip地址和端口号;进行其他一系列必要的初始化操作,如设置数据块的大小等;
85.s4、通过上传客户端层将训练神经网络模型所需的数据集上传到指定的服务器中;
86.s5、利用fuse文件系统将远程服务器中的数据集链接到本地操作系统的指定路径中,即可像访问本地文件一样访问远程数据集;
87.s6、通过训练客户端读取数据集;网络模型在训练的时候使用链接的本地路径读取所需数据集。
88.实施例2
89.一种面向深度学习平台的小文件预处理系统,其特征在于包括如下步骤:
90.s1、将该小文件预处理系统客户端层、缓存层、核心服务层以及存储层核心类、核
心函数实现,或者直接从现有代码拷贝到本地操作系统存储器中;各部分之间的组织关系不固定,只要满足调用关系即可;
91.s2、按照各个层次之间到关系正确部署小文件预处理系统;
92.s3、通过客户端登录,使用brpc提供的init方法指定核心服务器的ip地址和端口号;进行其他一系列必要的初始化操作,如设置数据块的大小等;
93.s4、通过上传客户端层将训练神经网络模型所需的数据集上传到指定的服务器中;
94.s5、利用fuse文件系统将远程服务器中的数据集链接到本地操作系统的指定路径中,即可像访问本地文件一样访问远程数据集;
95.s6、通过训练客户端读取数据集;网络模型在训练的时候使用链接的本地路径读取所需数据集;
96.还包括如下步骤:
97.s4.1、在客户端层中,直接调用client类中的delete和batchdelete函数,可以进行单个文件删除操作和批量文件删除,批量文件删除包括按数据集删除。
98.注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1