System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及大模型领域,尤其涉及一种适用于国产硬件的fp32模型转换方法。
技术介绍
1、为了减少对外部技术依赖,国家正在鼓励推广基于自主知识产权的国产ai计算芯片。国产硬件芯片主要优化在int8算力,而深度学习模型参数基本上都是采用32位浮点进行训练的问题。然而,将fp32模型转换为int8模型可能会导致较大的精度损失,尤其是当模型的权重分布在较大的动态范围内时。
2、
技术实现思路
1、为了解决上述问题,本专利技术提供一种适用于国产硬件的fp32模型转换方法,的目的在于,在保持较高性能的同时,降低模型的精度损失,提高fp32模型在国产ai加速硬件上的运行效率。
2、为实现上述目的,本专利技术采用以下技术方案:
3、一种适用于国产硬件的fp32模型转换方法,包括以下步骤:
4、步骤s1:基于原始fp32模型,获取训练数据集;
5、步骤s2:基于训练数据集,构建初始缩放因子和偏置;
6、步骤s3:根据缩放因子,将原始fp32模型转换为int8模型;
7、步骤s4:基于量化感知训练int8模型,在训练过程中,根据量化感知精度和量化感知损失的变化情况,动态调整模型参数,直到满足预设精度,则得到最终的int8模型;
8、步骤s5:将最终的int8模型部署到国产硬件上。
9、进一步的,所述原始fp32模型包括图像分类模型和语言模型,构建初始的缩放因子和偏置项,具体如下:
11、对于图像分类模型,使用训练集中的图像数据来计算均值和标准差;
12、对于每个通道(r、g、b)或特征维度,计算训练集中所有图像的均值和标准差;
13、将每个通道的标准差除以预设参量来估计缩放因子;
14、并使用每个特征维度的均值作为初始偏置项;
15、语言模型:
16、对于语言模型,对于每个特征维度,将文本数据视为序列,计算序列中所有数据的均值和标准差;
17、将每个特征维度的标准差除以预设参量来估计缩放因子;
18、并使用每个特征维度的均值作为初始偏置项。
19、进一步的,所述步骤s3具体为:
20、将原始的浮点权重和激活值转换为整数表示,量化的公式如下:
21、int8_weight = round(fp32_weight / scale_weight);
22、int8_activation = round(fp32_activation / scale_activation);
23、 其中,int8_weight和int8_activation 分别表示量化后的权重和激活值、scale_weight和scale_activation是量化的缩放因子;fp32_weight 和 fp32_activation分别表示浮点数表示的权重和激活值;
24、在模型推理过程中,将int8精度的权重和激活值反量化为浮点数表示,反量化的公式如下:
25、 fp32_weight = int8_weight * scale_weight;
26、fp32_activation = int8_activation * scale_activation;
27、引入量化误差,量化误差修正的公式如下:
28、fp32_activation = (int8_activation + bias_activation) * scale_activation;
29、其中,bias_activation是用于修正量化误差的偏置项。
30、进一步的,所述基于量化感知训练int8模型,具体为:
31、(1)将量化后的权重和激活值输入到模型中进行前向传播;
32、(2)在前向传播过程中,使用量化后的权重和激活值进行计算,得到输出结果;
33、(3)基于损失函数,进行输出结果和真实标签进行比较:
34、loss = -1/n * (sum(y_true * log(softmax(y_pred))));
35、其中,y_true是真实标签,y_pred是量化后的整数输出结果,n是样本数量;softmax(y_pred)表示对量化后的整数输出结果进行softmax函数计算;
36、(4)根据损失函数计算损失,使用梯度下降算法计算梯度,并将梯度传播回模型的每一层;
37、(5)在反向传播过程中,使用量化后的权重和激活值进行梯度计算和参数更新;
38、(6)基于更新后的权重和激活值,更新量化的缩放因子;
39、(6)重复进行多个训练迭代,直到达到预定的训练轮数或达到预设精度要求。
40、进一步的,所述前向传播,具体为:
41、对于每个神经元的输入,使用量化后的权重和激活值进行计算;
42、对于第l层的第j个神经元,使用以下公式计算其输入:
43、input_j = sum(int8_weight[l][j][i] * int8_activation[l-1][i] for i inrange(num_inputs));
44、对于第l层的第j个神经元,使用激活函数计算其输出:
45、output_j = activation_function(input_j);
46、重复以上步骤,直到计算出模型的输出;
47、其中,int8_weight[l][j][i]表示第l层的第j个神经元与第l-1层的第i个神经元之间的连接权重,int8_activation[l-1][i]表示第l-1层的第i个神经元的激活值,num_inputs表示第l-1层的神经元数量。
48、进一步的,所述反向传播,具体如下:
49、对于量化权重的梯度计算:
50、gradient_weight = gradient_quantized_weight * scale_factor;
51、其中,gradient_quantized_weight表示量化后的权重梯度,scale_factor表示缩放因子,gradient_weight表示浮点数权重的梯度;
52、对于量化激活值的梯度计算:
53、gradient_activation = gradient_quantized_activation * scale_factor;
54、其中,gradient_quantized_activation表示量化后的激活值梯度,scale_factor表示缩放因子,gradient_activation表示浮点数激活值的梯度;
55、参数更新:
56本文档来自技高网...
【技术保护点】
1.一种适用于国产硬件的FP32模型转换方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种适用于国产硬件的FP32模型转换方法,其特征在于,所述原始FP32模型包括图像分类模型和语言模型,构建初始的缩放因子和偏置项,具体如下:
3.根据权利要求1所述的一种适用于国产硬件的FP32模型转换方法,其特征在于,所述基于量化感知训练INT8模型,具体为:
4.根据权利要求3所述的一种适用于国产硬件的FP32模型转换方法,其特征在于,所述前向传播,具体为:
5.根据权利要求3所述的一种适用于国产硬件的FP32模型转换方法,其特征在于,所述反向传播,具体如下:
6.根据权利要求5所述的一种适用于国产硬件的FP32模型转换方法,其特征在于,基于更新后的权重和激活值,更新量化的缩放因子,具体为:
7.根据权利要求1所述的一种适用于国产硬件的FP32模型转换方法,其特征在于,所述步骤S5具体为:
【技术特征摘要】
1.一种适用于国产硬件的fp32模型转换方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种适用于国产硬件的fp32模型转换方法,其特征在于,所述原始fp32模型包括图像分类模型和语言模型,构建初始的缩放因子和偏置项,具体如下:
3.根据权利要求1所述的一种适用于国产硬件的fp32模型转换方法,其特征在于,所述基于量化感知训练int8模型,具体为:
4.根据权利要求3所述的一种适用于国产...
【专利技术属性】
技术研发人员:李强,庄莉,梁懿,王秋琳,吕君玉,伍臣周,陈锴,叶文良,王从,潘进土,
申请(专利权)人:福建亿榕信息技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。