CN116894457B - 深度学习模型的网络权重存取方法 - Google Patents
深度学习模型的网络权重存取方法 Download PDFInfo
- Publication number
- CN116894457B CN116894457B CN202311164707.1A CN202311164707A CN116894457B CN 116894457 B CN116894457 B CN 116894457B CN 202311164707 A CN202311164707 A CN 202311164707A CN 116894457 B CN116894457 B CN 116894457B
- Authority
- CN
- China
- Prior art keywords
- weight
- network
- data
- header information
- array
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 238000013136 deep learning model Methods 0.000 title claims abstract description 30
- 238000006243 chemical reaction Methods 0.000 claims abstract description 6
- 239000011159 matrix material Substances 0.000 claims description 22
- 238000003491 array Methods 0.000 claims description 13
- 101100394003 Butyrivibrio fibrisolvens end1 gene Proteins 0.000 claims description 2
- 101100174722 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) GAA1 gene Proteins 0.000 claims description 2
- 101100296979 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) PEP5 gene Proteins 0.000 claims description 2
- 238000003780 insertion Methods 0.000 claims description 2
- 230000037431 insertion Effects 0.000 claims description 2
- 230000005540 biological transmission Effects 0.000 abstract description 15
- 230000008569 process Effects 0.000 abstract description 9
- 238000013500 data storage Methods 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 6
- 238000013135 deep learning Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000003062 neural network model Methods 0.000 description 4
- 238000012549 training Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 2
- 230000005477 standard model Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- BQCADISMDOOEFD-UHFFFAOYSA-N Silver Chemical compound [Ag] BQCADISMDOOEFD-UHFFFAOYSA-N 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 210000005036 nerve Anatomy 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 229910052709 silver Inorganic materials 0.000 description 1
- 239000004332 silver Substances 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开深度学习模型的网络权重存取方法,涉及数据存储领域,定义深度学习模型中网络权重的数据类型,将其转换为unsigned char型8位权重数组保存,根据网络权重数量和对应数组指针创建权重头部信息;将转换后权重数组插接到权重头部信息后面,对插接后的数据段进行序列化,转换为16进制目标文件保存;读取权重头部信息中记录的参数信息,对后面插接的数据段反序列化操作,还原成原始数据类型的网络权重并复制到目标位置。该方案可以将不同数据类型拆分为char型保存,定义出权重头部信息,根据权重头部信息反序列操作提取和复制权重数据,减少权重数据传输时的转换和复制过程,降低传输时延和提高传输效率。
Description
技术领域
本申请涉及数据存储领域,特别涉及一种深度学习模型的网络权重存取方法。
背景技术
深度学习网络在图像识别、自然语言处理等领域取得了巨大成功,但是庞大的模型参数数量和存储空间需求成为了训练和部署的主要瓶颈之一。因此,如何高效地存储和传输深度学习网络权重一直是学术界和工业界所关注的问题。
目前常用的深度学习网络权重存储方式主要有全精度存储(Full PrecisionStorage)和压缩存储(Compression Storage)两种。全精度存储将所有模型参数以浮点数的形式存储。这种方式可以保证存储的权重值具有最高的精度,但是需要较大的存储空间和传输带宽。例如,AlexNet中的模型参数共有60M左右,采用全精度存储需要约240MB的存储空间。压缩存储则通过对模型参数进行压缩,达到减小存储空间和传输带宽的目的。这种方式包括量化、剪枝、低秩近似等方法。虽然压缩存储可以减小存储空间和传输带宽,但是也容易带来精度损失和计算复杂度增加等问题。
上述两种存储形式只能存储单一数据类型,兼容性不高。此外,有很多现有的数据存储并不是zero-copy零复制,在传统的数据传输方式中,数据需要从因硬盘读取到内存中,这种方式会导致数据的多次拷贝和内存访问,从而影响系统性能,且不利于数据传输。
发明内容
本申请提供一种深度学习模型的网络权重存取方法,解决网络模型权重兼容性、传输占用传输带宽和多次拷贝复制影响系统性能的问题。该方法包括:
根据深度学习模型设定网络权重的原始数据类型;所述网络权重用于定义深度学习模型各个网络层参数,且原始数据类型是不低于8位的数据格式;
将所述网络权重的权重数据统一转换为8位unsigned char 型权重数组保存,并根据网络权重数量和对应数组指针创建权重头部信息;所述权重头部信息包括所述网络权重的张量tensors参数信息;所述tensors参数定义了所述网络权重的数据格式、数组矩阵形状、地址索引和权重位置索引;
将转换后的8位权重数组插接到所述权重头部信息后面,确定插接后各个网络权重的索引地址;
将索引地址加入到所述权重头部信息中,对所述权重头部信息和权重数组插接后形成的数据段进行序列化,转换为16进制目标文件保存。
本申请实施例提供的技术方案带来的有益效果至少包括:对深度学习模型中各个网络层不同数据类型的权重数据进行统一转化为8位unsigned char 型权重数组并形成数据段,这一方式可以兼容所有数据类型的权重数据,兼容性更高。对各个网络权重构建tensors参数信息,所有tensors参数组成权重头部信息;通过将转换后的权重数据段插接到权重头部信息后面后存储为目标文件。在读取执行阶段,先将权重头部信息读取到内存中,通过CPU解码获取各个网络权重的属性信息,然后直接将权重头部信息后方插接的权重数据复制到目标位置,这一阶段减少上下文切换,并且不需要CPU复制数据,显著提高数据传输效率,节省带宽。
附图说明
图1是各种数据类型对应的数据结构示意图;
图2是本申请实施例提供的深度学习模型的网络权重存取方法的流程图;
图3是转化和插接后目标文件的数据结构示意图;
图4是读取数据到GPU上的结构示意图;
图5示出了使用各种文件格式下的权重数据读取时间示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
零复制(Zero-copy;也译零拷贝),是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。举例来说,如果要读取一个文件并通过网络发送它,传统方式下每个读/写周期都需要复制两次数据和切换两次上下文,而数据的复制都需要依靠CPU。通过零复制技术完成相同的操作,上下文切换减少到两次,并且不需要CPU复制数据。零复制协议对于网络链路容量接近或超过CPU处理能力的高速网络尤为重要。在这种网络下,CPU几乎将所有时间都花在复制要传送的数据上,因此将成为使通信速率低于链路容量的瓶颈。
在相关技术中深度学习网络模型常用存储方式以Pytorch和Numpy为主。其中的Pytorch使用的是原始的二进制流pickle对权重进行保存,这样通过序列化与反序列化能够还原权重的所有信息,但是针对网络模型权重来说显的并不是很必要,同时反序列化操作需要到CPU进行解码得到原始的数值,这样会增加数据传输流程,增加延迟。
Numpy是一种Python领域中常见的数值计算库,也提供了常见的权重保存方法。但是该库有个缺点就是不支持BFloat16(bfloat16 floating-point format)数据类型格式,这种格式目前现有的神经网络模型基本都需要的,该格式是IEEE的扩展。
如图1列出的IEEE-754的全精度浮点数和半精度浮点数的数据格式。对于float32浮点数据格式,其中的sign符号位占据1位,表示该浮点数的正负值;exponent指数位占8位,确定该浮点数表达的上下限;fraction小数位占23位,明确该浮点数的精度。而float32浮点数据格式(半精度)对指数位和小数位进行了精简,其中的exponent缩减到5位,fraction缩减到10位。对比可以发现半精度浮点数表达位数位浮点数的一半,也就是在内存中也只是占一半空间,而存储对于大规模神经网络模型是至关重要的,但是损失了表达范围以及精度。而为了训练大规模的神经网络模型,业界推出了Bfloat16(bf16)格式,这种数据格式的exponent和float32保持一致,而将fraction缩减到7位。这意味着该表达上限和下限能够与float32范围几乎一样大,但是牺牲了小数位,精度没有float32高,但是能够相对于float32能够省一半内存,这在深度学习训练以及推理中是值得的,因此bf16也渐渐成为标准的模型表示格式。
当需要说明的是,主流数值计算库如Numpy并不支持bf16的格式,因此就算保存下来到磁盘中也需要其他的额外信息将其恢复为bf16格式。而pickle能够保存完整的二进制流信息,因此不存在支持不支持bf16的问题,但是在于二进制流信息需要读取到内存中然后进行解码,这也是需要耗费内存的,并不是zero-copy的操作。因为避免额外的拷贝开支对训练推理大模型来说是至关重要的。
针对上述提到的问题,本申请提出一种深度学习模型的网络权重存取方法,该方法将兼容包含bf16在内的各种数据格式的网络权重数据,同时改变数据存储和读取方式,采用Zero-copy方法来提高权重数据的读取效率。
图2是本申请实施例提供的深度学习模型的网络权重存取方法的流程图,包括如下步骤:
步骤201,根据深度学习模型设定网络权重的原始数据类型。
深度学习模型根据功能和模型种类呈现不同大小,通常模型越大则神经络越复杂,对应的网络层数和网络权重等模型参数越多,网络权重用于定义深度学习模型各个网络层参数,例如池化层、卷积层以及输入输出层网络中的公式、超调量、调节因子、比例系数等等。对于一个网络型中不同的网络权重,其权重数据常因功能、精度和设计表现为不同的数据类型。
在一般的深度学习模型中,使用较为广泛的数据类型包括但不限于float16、float32、float64、int8、int16、int32和bfloat16等类型。其中的bfloat16正逐渐变成标准模型表现形式。
网络权重是定义深度学习模型各个网络层参数的数据,对权重确定的目的是为了让神经网络在训练过程中学习到有用的信息,本申请各个实施例中的原始数据类型是不低于8位的数据格式,因为后续在对超过8位的数据格式采用拆分存储和读取方式。
步骤202,将网络权重的权重数据统一转换为8位unsigned char 型权重数组保存,并根据网络权重数量和对应数组指针创建权重头部信息。
采用unsigned char 型数组的目的是在对超过八位数据类型拆分后,将拆分是各个数据以组形式存在,通过char 型数组的指针完成动态内存分配和操作复杂数据结构。8位char 型既不会过多占用内存,也可以将高位数据结构(如bfloat16)合理拆分。
当原始数据类型是int8时,单数据将转换为单个八位unsigned char 型数组;
当原始数据类型是float16、int16或bfloat16时,单数据将转换为2个八位unsigned char 型数组;
当原始数据类型是float32和int32时,单数据将转换为4个八位unsigned char型数组;
当原始数据类型是float64时,单数据将转换为8个八位unsigned char 型数组。
因为不同网络层的权重数据可能采用不同数据格式,而采用上述这样做拆分后可以将其统一表达,也方便数据存储和传输解码。
该步骤中,需要对所有网络权重的权重数据进行转换,并在转换后创建权重头部信息。创建头部权重信息需要向构建每个网络权重的tensors参数信息。tensors参数信息定义了网络权重的数据格式、数组矩阵形状、地址索引和权重位置索引。因为这些拆分转换的权重数据需要高效存储,而tensors参数信息则记录这些参数,在后续读取和解码时则利用这些tensors参数信息进行信息重构。
步骤203,将转换后的8位权重数组插接到权重头部信息后面,并将插接后的数据段进行序列化,转换为16进制目标文件保存。
转换8位权重数是为了进行数据类型统一实现高效存储,而头部权重信息的设置这是为了实现Zero-copy。将转换后的数据段插接到头部权重信息后方,这样在读取时按照前后顺序,只会将头部信息读到内存中通过CPU进行处理解码,而真实权重数据(序列化的数据段)并未被直接读取到内存中执行操作。
序列化的目的是为了将数组矩阵和复杂数据拆分保存,以此减少存储空间的使用,从而提高计算机的运行效率。
步骤204,执行读取操作时,读取并解码权重头部信息中记录的tensors参数信息,根据tensors参数信息对后面插接的数据段进行反序列化操作,还原成原始数据类型的网络权重并复制到目标位置。
该过程中反序列化操作就是根据tensors参数信息,将拆分的数据段还原成原始数据类型的权重数据,该过程的复制则是CPU在根据头部权重信息确定的位置,可以是CPU或GPU等。大多数网络模型是在GPU上运行的,因此这些还原的权重数据就直接被复制到GPU的特定位置,这一阶段跳过了将权重数据逐一拷贝到内存,通过CPU处理执行后再次拷贝到目标位置的过程。
综上所述,本申请对深度学习模型中各个网络层不同数据类型的权重数据进行统一转化为8位unsigned char 型权重数组并形成数据段,这一方式可以兼容所有数据类型的权重数据,兼容性更高。对各个网络权重构建tensors参数信息,所有tensors参数信息组成权重头部信息;通过将转换后的权重数据段插接到权重头部信息后面后存储为目标文件。在读取执行阶段,先将权重头部信息读取到内存中,通过CPU解码获取各个网络权重的属性信息,然后直接将权重头部信息后方插接的权重数据复制到目标位置,这一阶段减少上下文切换,并且不需要CPU复制数据,显著提高数据传输效率,节省带宽。
因为要构建权重头部信息,为了尽量不占用过多存储空间的情况下对权重数据的属性信息进行记录,本申请采用元数据形式进行记录,具体步骤202中创建权重头部信息过程可以包括如下步骤:
S1,设定权重矩阵大小和构建地址索引标签,并根据对应网络权重weight的原始数据类型构建对应的tensors参数,表示如下:
TensorInfo {dtype; shape: [a, b]; offsets: [BEGIN, END]}
其中的TensorInfo定义tensors参数的格式顺序,dtype定义原始数据类型,shape定义浮点数组为a*b矩阵数组,offsets定义weight的起始和终止索引地址。
示意性的,假设一个神经网络模型包含两个网络权重weight1和weight2,首先需要确认shape权重矩阵大小,在生成tensors时可以使用torch.randn生成空间矩阵,用于生成指定大小的张量,不同大小的张量由于其占用的存储空间不一样会导致操作时不同的效率。如torch.randn(32, 32)表示生成32*32的二维矩阵,示例性的torch.randn(32, 32,32) 表示生成32*32*32的三维空间矩阵。该矩阵大小表示的是数据存储形式,例如以32*32浮点数二维矩阵形式存储,那么在转换以及后期还原构建数据时就以32*32矩阵数组形式存在。
例如tensors: [TensorInfo { dtype: F32, shape: [32, 32], data_offsets:(0, 4096) },该tensors参数表明权重数据的原始数据类型是float32,权重数据是32*32的浮点数矩阵,起始和终止索引地址为0- 4096。
当然,网络模型有很多weight,那么该过程则对每个weigh都构建各自的tensors参数。
S2,将所有weight对应在网络层中的位置进行标定,构建每个weight的权重位置索引标签,并加入到tensors参数中
权重位置索引标签是为了标定目标weight在网络层的位置,本申请使用index_map进行表示。
例如index_map: {"weight2": 1, "weight1": 0},表示weight2在网络模型的第一层,weight1在网络模型的第0层,这一标签是在还原和构建模型时使用,因为原始的权重数据被拆分打散,此标签可以在还原每个weight数据后,将其放到模型的指定网络层中实现重构。
S3,将所有weight对应的tensors参数组合形成权重头部信息。
示例性的,形成权重头部信息表示如下:
W={ TensorInfo {dtype; shape: [a, b]; offsets: [BEGIN1, END1]};TensorInfo {dtype; shape: [c, d]; offsets: [BEGIN2, END2]}…index_map:{weight2: x1, weight1: x2…} }
上式index_map中的weight顺序和TensorInfo是前后一一对应的,W表示权重头部信息,[a, b]和[c, d]分别表示weight2和weight1为a*b和c*d浮点矩阵,index_map 为权重位置索引标签,x1表示weight2在第x1网络层位置, x1表示weight1在第x2网络层位置。
在一些实施例中,为了方便数据分析和记录,将所有权重数据按照权重大小进行排列,如降序排列。此处并非表示按照网络层的层次进行存储,因为计算机中内存大小的基本单位是字节(byte),理论上来讲可以从任意地址访问某种基本数据类型。但是实际上,计算机并非按逐个字节大小读写内存,而是以2、4或8的 倍数的字节块来读写内存,如此一来就会对基本数据类型的合法地址作出一些限制,即它的地址必须是2、4或8的倍数。那么就要求各种数据类型按照一定的规则在空间上排列,这就是对齐。如果直接以网络层次进行存储,有些层权重并不是内存“喜欢”的那种排列,也就是未对齐,因此导致空间的浪费。所以本方案选择将转换后的char型权重数组根据权重大小进行降序排序拼接。但因为不同网络层权重数据存在差异,这样就会导致存储数据是乱序的。本方案中index_map的使用也刚好解决了这一问题。
因为转换的数据段可能是乱序拼接的,而存储应当是连续了,所以引入了offsets定义每个weight的起始和终止索引地址,在后续读取时作区分。参考权重头部信息W表达式,不同TensorInfo也是按照实际权重大小排列的(index_map也是如此)。示例性的,参见图3,权重头部数据中的按照weight4:x1(表示在第1个网络层)、weight3:x3(表示在第3个网络层)、weight2:x4(表示在第4个网络层)、weight1:x5(表示在第5个网络层)的顺序排列,和权重数据中的排列顺序一致。
可选的,在一些实施例中,在完成头部新型创建后,还包括如下步骤:
S4,将转换的权重数组插接在权重头部信息的后面,并确定其中每个weight占据的存储地址;如图3中所示,权重数组插存储过程需要将矩阵数据打散序列化存储,确定各个weight占据的存储地址。
S5,将每个weight占据的起始和终止地址确定为索引地址,填入对应tensors参数中的权重位置索引标签;
需要说明的是,填入 权重位置索引标签的地址为相对地址,并非存储介质的物理地址。在一种可能的实施方式中,索引地址以第一个权重数据为初始地址,往后级联设置,例如表示如下:
W=[TensorInfo { dtype: F32, shape: [32, 32], data_offsets: (0, 4096)}, TensorInfo { dtype: BF16, shape: [32, 32], data_offsets: (4096, 6144) }],index_map: {weight2: 1, weight1: 0} }
上述结构展示了weight2和weight1的属性数据,weight2为第一个权重、原始数据为float32、[32, 32]浮点数矩阵、索引为0-4096(从0到32 * 32 * 4),此处的4表示转换为4个8位char数组。那么紧接着weight2为第二个权重,原始数据为bfloat16、[32, 32]浮点数矩阵、索引为4096-6144(4096+32*32*2),此处的2表示转换为2个8位char数组。
根据上述设置,第一个weight是索引是初始地址0,当存在多个weight时,data_offsets是顺序级联的。
在此步骤确定索引地址后,将填入原先的offsets: [BEGIN, END]}中。
S6,确定权重头部信息占据的地址块,生成权重头部长度数据;权重头部长度数据用于记录权重头部信息所占据的存储长度;
S7,将权重头部长度数据插接到权重头部信息前面形成数据段,对数据段进行序列化,转换为16进制目标文件保存。
参考图3所示,权重头部长度数据插接在权重头部信息前面,通常为八个比特位,这样做的目的是让CPU在解码时首先确定需要读取的权重头部信息长度,进而精准读取所有权重头部信息,从而避开读取庞大的权重数据,节省CPU资源。
当要读取和使用深度学习模型的权重数据时,从目标位置读取目标文件,根据权重头部长度数据将权重头部信息读取到内存中解码。具体解析权重头部信息中各个weight对应的tensors参数,根据dtype确定待读取权重数组的原始数据类型、根据shape确定浮点数据矩阵长度、根据offsets确定每个网络权重的数据长度、以及根据index_map确定所在的网络层位置。
确定上述各个信息后,通过mmap指令将各个权重数据直接复制到目标位置,以及还原网络权重。例如复制到GPU(目标位置)运行模型,还原重构阶段将拆分的数据重新组装为32*32矩阵数组,然后再拼接为float32或bfloat16等格式,最后再设置网络层参数得到完整的网络模型结构。
参考图4是读取数据到GPU上的结构示意图,拼接的目标文件存储在磁盘中。当需要运行模型时,从磁盘中读取先读取权重头部长度数据到内存中。通过CPU分析并确定权重头部信息的长度后从磁盘中精准读取,此时的权重数据并未被读取。CPU分析的权重头部数据相对于磁盘中的权重数据来说微乎其微,执行效率也更高。在解码完成后,直接从磁盘读取权重数据到GPU中的指定位置,并根据解码情况将模型重构还原。
下面通过实例验证上述方法的可行性。
表1 不同格式模型文件功能优缺点的对比图
从表1中可以看出Pytorch和Numpy格式文件不具备Zero-Copy功能,且Numpy还不具备bf16数据和存在传输限制,而采用本技术方案(Ours Tensors)保存的Tensors架构文件则可以实现Zero-Copy功能,满足标准bf16数据且没有传输限制。
此外,本技术方案对比了上述3种格式的读取效率,以Intel(R) Xeon(R) Silver4310 CPU @ 2.10GHz, 32G内存, 三星SSD来说, 数据如下
tensors = {
"weight1": torch.randn((32, 32)),
"weight2": torch.randn((1024, 32)),
"weight3": torch.randn((32, 32)),
"weight4": torch.randn((64, 64)),
"weight5": torch.randn((2048, 2048)),
"weight6": torch.randn((16, 1024)),
}
通过使用上述各种权重数据,将其保存为numpy,pytorch以及本申请的格式目标文件,然后运行,得到图5所示的权重数据读取时间示意图。从图5中可以看出,本方案文件在读取时间上和Pytorch以及Numpy来说少了一个数量级,能够大大加快模型权重的读取时间,提高模型数据传输和模型的响应速度。
以上对本发明的较佳实施例进行了描述;需要理解的是,本发明并不局限于上述特定实施方式,其中未尽详细描述的设备和结构应该理解为用本领域中的普通方式予以实施;任何熟悉本领域的技术人员,在不脱离本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例,这并不影响本发明的实质内容;因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
Claims (8)
1.一种深度学习模型的网络权重存取方法,其特征在于,所述方法包括:
根据深度学习模型设定网络权重的原始数据类型;所述网络权重用于定义深度学习模型各个网络层参数,且原始数据类型是不低于8位的数据格式;
将所述网络权重的权重数据统一转换为8位unsigned char 型权重数组保存,并根据网络权重数量和对应数组指针创建权重头部信息;所述权重头部信息包括所述网络权重的张量tensors参数信息;所述tensors参数定义了所述网络权重的数据格式、数组矩阵形状、地址索引和权重位置索引;
将转换后的8位权重数组插接到所述权重头部信息后面,确定插接后各个网络权重的索引地址;
将索引地址加入到所述权重头部信息中,对所述权重头部信息和权重数组插接后形成的数据段进行序列化,转换为16进制目标文件保存;
执行读取操作时,将所述权重头部信息读取到内存中,通过CPU解码获取各个网络权重的属性信息,tensors参数信息组成所述权重头部信息,根据所述tensors参数对后面插接的数据段进行反序列化操作,还原成原始数据类型的网络权重并复制到目标位置。
2.根据权利要求1所述的深度学习模型的网络权重存取方法,其特征在于,设定的网络权重的原始数据类型为float16、float32、float64、int8、int16、int32和bfloat16中的至少一种;
原始数据类型是int8时,单数据转换为单个八位unsigned char 型数组;
原始数据类型是float16、int16或bfloat16时,单数据转换为2个八位unsigned char型数组;
原始数据类型是float32和int32时,单数据转换为4个八位unsigned char 型数组;
原始数据类型是float64时,单数据转换为8个八位unsigned char 型数组。
3.根据权利要求2所述的深度学习模型的网络权重存取方法,其特征在于,所述根据网络权重数量和对应数组指针创建权重头部信息,包括:
设定权重矩阵大小和构建地址索引标签,并根据对应网络权重weight的原始数据类型构建对应的tensors参数,表示如下:
TensorInfo {dtype; shape: [a, b]; offsets: [BEGIN, END]}
其中,TensorInfo定义tensors参数的格式顺序,dtype定义原始数据类型,shape定义浮点数组为a*b矩阵数组,offsets定义weight的起始和终止索引地址;深度学习模型包含有若干weight,每个weight对应一个tensors参数;
将所有weight对应在网络层中的位置进行标定,构建每个weight的权重位置索引标签,并加入到所述tensors参数中;所述权重位置索引标签用于标定目标weight在网络层的位置;
将所有weight对应的tensors参数组合形成所述权重头部信息。
4.根据权利要求3所述的深度学习模型的网络权重存取方法,其特征在于,将权重数组插接到所述权重头部信息后面后,确定其中每个weight占据的存储地址;
将每个weight占据的起始和终止地址确定为索引地址,填入对应所述tensors参数中的权重位置索引标签;
确定所述权重头部信息占据的地址块,生成权重头部长度数据;所述权重头部长度数据用于记录所述权重头部信息所占据的存储长度;
将所述权重头部长度数据插接到所述权重头部信息前面形成数据段,对数据段进行序列化,转换为16进制目标文件保存。
5.根据权利要求1-4任一所述的深度学习模型的网络权重存取方法,其特征在于,转换后每个weight权重的权重数组根据权重大小进行降序排序拼接,权重头部信息中各个tensors参数按照对应weight拼接顺序排列存储,并根据前后级联关系生成起始和终止索引地址。
6.根据权利要求4所述的深度学习模型的网络权重存取方法,其特征在于,执行读取操作时,从目标位置读取所述目标文件,根据所述权重头部长度数据将所述权重头部信息读取到内存中解码;
解析所述权重头部信息中各个weight对应的所述tensors参数,确定待读取权重数组的数据类型、数据长度、权重编号和网络层位置;
通过mmap指令将各个权重数据直接复制到目标位置,以及还原所述网络权重。
7.根据权利要求6所述的深度学习模型的网络权重存取方法,其特征在于,还原所述网络权重时,根据所述tensors参数定义的原始数据类型和权重矩阵大小将unsigned char型数组拼接并还原为原始数据类型,并按照所述权重位置索引标签构建网络层结构。
8.根据权利要求4所述的深度学习模型的网络权重存取方法,其特征在于,组合形成的所述权重头部信息表示如下:
W={ TensorInfo {dtype; shape: [a, b]; offsets: [BEGIN1, END1]};TensorInfo{dtype; shape: [c, d]; offsets: [BEGIN2, END2]}…index_map: {weight2: x1,weight1: x2…} }
其中,W表示权重头部信息,[a, b]和[c, d]分别表示weight2和weight1为a*b和c*d浮点矩阵,index_map 为权重位置索引标签,x1表示weight2在第x1网络层位置, x2表示weight1在第x2网络层位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311164707.1A CN116894457B (zh) | 2023-09-11 | 2023-09-11 | 深度学习模型的网络权重存取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311164707.1A CN116894457B (zh) | 2023-09-11 | 2023-09-11 | 深度学习模型的网络权重存取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116894457A CN116894457A (zh) | 2023-10-17 |
CN116894457B true CN116894457B (zh) | 2023-11-24 |
Family
ID=88315309
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311164707.1A Active CN116894457B (zh) | 2023-09-11 | 2023-09-11 | 深度学习模型的网络权重存取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116894457B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118689855A (zh) * | 2024-08-29 | 2024-09-24 | 浙江大华技术股份有限公司 | 模型权重文件的存储方法、装置、存储介质及电子装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114072844A (zh) * | 2019-07-02 | 2022-02-18 | Vid拓展公司 | 基于核张量和树分区的神经网络压缩框架的方法和装置 |
CN114995823A (zh) * | 2022-06-07 | 2022-09-02 | 重庆大学 | 一种面向cnn专用加速器的深度学习编译器优化方法 |
CN116187401A (zh) * | 2023-04-26 | 2023-05-30 | 首都师范大学 | 神经网络的压缩方法、装置、电子设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9059895B2 (en) * | 2009-12-08 | 2015-06-16 | Cisco Technology, Inc. | Configurable network management system event processing using simple network management table indices |
-
2023
- 2023-09-11 CN CN202311164707.1A patent/CN116894457B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114072844A (zh) * | 2019-07-02 | 2022-02-18 | Vid拓展公司 | 基于核张量和树分区的神经网络压缩框架的方法和装置 |
CN114995823A (zh) * | 2022-06-07 | 2022-09-02 | 重庆大学 | 一种面向cnn专用加速器的深度学习编译器优化方法 |
CN116187401A (zh) * | 2023-04-26 | 2023-05-30 | 首都师范大学 | 神经网络的压缩方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116894457A (zh) | 2023-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116894457B (zh) | 深度学习模型的网络权重存取方法 | |
US8489555B2 (en) | Method of managing storage and retrieval of data objects | |
US20090202160A1 (en) | Method for coding and decoding 3d data implemented as a mesh model | |
CN105933708B (zh) | 一种数据压缩和解压缩的方法和装置 | |
CN111902807A (zh) | 应用于纹理压缩或放大的机器学习 | |
KR20160140381A (ko) | 가변 레이트 텍스처 압축을 수행하는 방법 및 압축기 | |
US6396420B1 (en) | Delta compression of floating point coordinate data | |
CN108287877A (zh) | 一种rib渲染压缩文件fpga压缩/解压缩系统及硬件解压方法 | |
CN109451317A (zh) | 一种基于fpga的图像压缩系统及方法 | |
CN115438114A (zh) | 存储格式转换方法、系统、装置、电子设备及存储介质 | |
CN111405294B (zh) | 一种图像栅格数据的存储及传输方法 | |
JP2023501640A (ja) | 点群処理の方法、コンピュータシステム、プログラム及びコンピュータ可読記憶媒体 | |
WO2023205969A1 (zh) | 点云几何信息的压缩、解压缩及点云视频编解码方法、装置 | |
WO2023028177A1 (en) | Attribute coding in geometry point cloud coding | |
WO2023103334A1 (zh) | 一种神经网络模拟器的数据处理方法、装置和终端 | |
CN111324587B (zh) | Obj文件的数据的压缩方法、解析方法以及系统 | |
US6373989B1 (en) | Iterated image transformation and decoding apparatus and method, and recording medium | |
CN118037870B (zh) | 一种兼容Zdepth的并行化深度图像压缩算法、装置及终端设备 | |
CN116011551B (zh) | 优化数据加载的图采样训练方法、系统、设备及存储介质 | |
CN116894015A (zh) | 一种面向输电运检场景的vrml文件二进制压缩编码方法 | |
KR102154580B1 (ko) | 이미지 처리 장치 및 방법 | |
CN111259177B (zh) | 一种黑白二值签名图片存储方法和系统 | |
CN116883575B (zh) | 建筑群渲染方法、装置、计算机设备和存储介质 | |
CN118819418A (zh) | 文件读取方法、装置、计算机设备和可读存储介质 | |
CN1312845C (zh) | 记录压缩编码表于虚拟只读存储器的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |