CN117454948A - 一种适用于国产硬件的fp32模型转换方法 - Google Patents
一种适用于国产硬件的fp32模型转换方法 Download PDFInfo
- Publication number
- CN117454948A CN117454948A CN202311787674.6A CN202311787674A CN117454948A CN 117454948 A CN117454948 A CN 117454948A CN 202311787674 A CN202311787674 A CN 202311787674A CN 117454948 A CN117454948 A CN 117454948A
- Authority
- CN
- China
- Prior art keywords
- activation
- weight
- model
- quantized
- gradient
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 238000006243 chemical reaction Methods 0.000 title claims abstract description 14
- 238000012549 training Methods 0.000 claims abstract description 33
- 102100030148 Integrator complex subunit 8 Human genes 0.000 claims abstract description 31
- 101710092891 Integrator complex subunit 8 Proteins 0.000 claims abstract description 31
- 230000008569 process Effects 0.000 claims abstract description 19
- 230000008447 perception Effects 0.000 claims abstract description 17
- 230000008859 change Effects 0.000 claims abstract description 5
- 230000004913 activation Effects 0.000 claims description 69
- 238000007667 floating Methods 0.000 claims description 31
- 238000013139 quantization Methods 0.000 claims description 27
- 230000006870 function Effects 0.000 claims description 25
- 210000002569 neuron Anatomy 0.000 claims description 21
- 238000004364 calculation method Methods 0.000 claims description 16
- 238000005457 optimization Methods 0.000 claims description 11
- 238000013145 classification model Methods 0.000 claims description 9
- 238000004422 calculation algorithm Methods 0.000 claims description 4
- 238000004891 communication Methods 0.000 claims description 2
- 230000001133 acceleration Effects 0.000 abstract description 3
- 238000004590 computer program Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000004927 fusion Effects 0.000 description 6
- 239000008186 active pharmaceutical agent Substances 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000003860 storage Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013136 deep learning model Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000013138 pruning Methods 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/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
-
- 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/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/061—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using biological neurons, e.g. biological neurons connected to an integrated circuit
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02T—CLIMATE CHANGE MITIGATION TECHNOLOGIES RELATED TO TRANSPORTATION
- Y02T10/00—Road transport of goods or passengers
- Y02T10/10—Internal combustion engine [ICE] based vehicles
- Y02T10/40—Engine management systems
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Data Mining & Analysis (AREA)
- Neurology (AREA)
- General Engineering & Computer Science (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明涉及一种适用于国产硬件的FP32模型转换方法,包括以下步骤:步骤S1:基于原始FP32模型,获取训练数据集;步骤S2:基于训练数据集,构建初始缩放因子和偏置;步骤S3:根据缩放因子,将原始FP32模型转换为INT8模型;步骤S4:基于量化感知训练INT8模型,在训练过程中,根据量化感知精度和量化感知损失的变化情况,动态调整模型参数,直到满足预设精度,则得到最终的INT8模型;步骤S5:将最终的INT8模型部署到国产硬件上。本发明在保持较高性能的同时,降低模型的精度损失,提高FP32模型在国产AI加速硬件上的运行效率。
Description
技术领域
本发明涉及大模型领域,尤其涉及一种适用于国产硬件的FP32模型转换方法。
背景技术
为了减少对外部技术依赖,国家正在鼓励推广基于自主知识产权的国产AI计算芯片。国产硬件芯片主要优化在INT8算力,而深度学习模型参数基本上都是采用32位浮点进行训练的问题。然而,将FP32模型转换为INT8模型可能会导致较大的精度损失,尤其是当模型的权重分布在较大的动态范围内时。
发明内容
为了解决上述问题,本发明提供一种适用于国产硬件的FP32模型转换方法,的目的在于,在保持较高性能的同时,降低模型的精度损失,提高FP32模型在国产AI加速硬件上的运行效率。
为实现上述目的,本发明采用以下技术方案:
一种适用于国产硬件的FP32模型转换方法,包括以下步骤:
步骤S1:基于原始FP32模型,获取训练数据集;
步骤S2:基于训练数据集,构建初始缩放因子和偏置;
步骤S3:根据缩放因子,将原始FP32模型转换为INT8模型;
步骤S4:基于量化感知训练INT8模型,在训练过程中,根据量化感知精度和量化感知损失的变化情况,动态调整模型参数,直到满足预设精度,则得到最终的INT8模型;
步骤S5:将最终的INT8模型部署到国产硬件上。
进一步的,所述原始FP32模型包括图像分类模型和语言模型,构建初始的缩放因子和偏置项,具体如下:
图像分类模型:
对于图像分类模型,使用训练集中的图像数据来计算均值和标准差;
对于每个通道(R、G、B)或特征维度,计算训练集中所有图像的均值和标准差;
将每个通道的标准差除以预设参量来估计缩放因子;
并使用每个特征维度的均值作为初始偏置项;
语言模型:
对于语言模型,对于每个特征维度,将文本数据视为序列,计算序列中所有数据的均值和标准差;
将每个特征维度的标准差除以预设参量来估计缩放因子;
并使用每个特征维度的均值作为初始偏置项。
进一步的,所述步骤S3具体为:
将原始的浮点权重和激活值转换为整数表示,量化的公式如下:
INT8_weight = round(FP32_weight / scale_weight);
INT8_activation = round(FP32_activation / scale_activation);
其中,INT8_weight和INT8_activation 分别表示量化后的权重和激活值、scale_weight和scale_activation是量化的缩放因子;FP32_weight 和 FP32_activation分别表示浮点数表示的权重和激活值;
在模型推理过程中,将INT8精度的权重和激活值反量化为浮点数表示,反量化的公式如下:
FP32_weight = INT8_weight * scale_weight;
FP32_activation = INT8_activation * scale_activation;
引入量化误差,量化误差修正的公式如下:
FP32_activation = (INT8_activation + bias_activation) * scale_activation;
其中,bias_activation是用于修正量化误差的偏置项。
进一步的,所述基于量化感知训练INT8模型,具体为:
(1)将量化后的权重和激活值输入到模型中进行前向传播;
(2)在前向传播过程中,使用量化后的权重和激活值进行计算,得到输出结果;
(3)基于损失函数,进行输出结果和真实标签进行比较:
loss = -1/N * (sum(y_true * log(softmax(y_pred))));
其中,y_true是真实标签,y_pred是量化后的整数输出结果,N是样本数量;softmax(y_pred)表示对量化后的整数输出结果进行softmax函数计算;
(4)根据损失函数计算损失,使用梯度下降算法计算梯度,并将梯度传播回模型的每一层;
(5)在反向传播过程中,使用量化后的权重和激活值进行梯度计算和参数更新;
(6)基于更新后的权重和激活值,更新量化的缩放因子;
(6)重复进行多个训练迭代,直到达到预定的训练轮数或达到预设精度要求。
进一步的,所述前向传播,具体为:
对于每个神经元的输入,使用量化后的权重和激活值进行计算;
对于第l层的第j个神经元,使用以下公式计算其输入:
input_j = sum(INT8_weight[l][j][i] * INT8_activation[l-1][i] for i inrange(num_inputs));
对于第l层的第j个神经元,使用激活函数计算其输出:
output_j = activation_function(input_j);
重复以上步骤,直到计算出模型的输出;
其中,INT8_weight[l][j][i]表示第l层的第j个神经元与第l-1层的第i个神经元之间的连接权重,INT8_activation[l-1][i]表示第l-1层的第i个神经元的激活值,num_inputs表示第l-1层的神经元数量。
进一步的,所述反向传播,具体如下:
对于量化权重的梯度计算:
gradient_weight = gradient_quantized_weight * scale_factor;
其中,gradient_quantized_weight表示量化后的权重梯度,scale_factor表示缩放因子,gradient_weight表示浮点数权重的梯度;
对于量化激活值的梯度计算:
gradient_activation = gradient_quantized_activation * scale_factor;
其中,gradient_quantized_activation表示量化后的激活值梯度,scale_factor表示缩放因子,gradient_activation表示浮点数激活值的梯度;
参数更新:
对于量化权重的参数更新:
updated_weight = weight - learning_ratea * gradient_weight;
其中,weight表示浮点数权重,learning_ratea表示学习率,gradient_weight表示浮点数权重的梯度,updated_weight表示更新后的浮点数权重。
对于量化激活值的参数更新:
updated_activation = activation - learning_rateu * gradient_activation;
其中,activation表示浮点数激活值,learning_rateu表示学习率,gradient_activation表示浮点数激活值的梯度,updated_activation表示更新后的浮点数激活值。
进一步的,所述基于更新后的权重和激活值,更新量化的缩放因子,具体为:
对于权重的缩放因子更新:
updated_scale_factor_weight = max(max_weight, min_weight) / (2^bitwidth - 1);
其中,bitwidth表示量化位宽,updated_scale_factor_weight表示更新后的权重的缩放因子;
max_weight = max(abs(updated_weight));
min_weight = min(abs(updated_weight));
对于激活值的缩放因子更新:
updated_scale_factor_activation = max(max_activation, min_activation)/ (2^bitwidth - 1);
其中,bitwidth表示量化位宽,updated_scale_factor_activation表示更新后的激活值的缩放因子;
max_activation = max(abs(updated_activation));
min_activation = min(abs(updated_activation))。
在本实施例中,所述步骤S5具体为:获取与目标硬件设备兼容的驱动程序,所述驱动程序负责与硬件设备进行通信,并提供必要的接口和功能,以支持模型推理操作;
在驱动程序的基础上,集成一个推理引擎,用于加载和执行量化的INT8模型,所述推理引擎负责解析模型文件、构建计算图、执行推理操作,并将结果返回给驱动程序;
在推理引擎中,实现模型加载和优化的功能,包括将量化后的INT8模型文件加载到内存中,并进行必要的模型优化;
在推理引擎中,实现模型的推理过程,包括将输入数据传递给模型,执行前向计算,并获取模型的输出结果。
本发明具有如下有益效果:
本发明基于量化感知训练INT8模型,在训练过程中,根据量化感知精度和量化感知损失的变化情况,动态调整模型参数,提高转换后模型的性能,而且在保持较高性能的同时,降低模型的精度损失,提高FP32模型在国产AI加速硬件上的运行效率。
附图说明
图1为本发明方法流程图。
具体实施方式
以下结合附图和具体实施例对本发明做进一步详细说明:
参考图1,本发明提供一种适用于国产硬件的FP32模型转换方法,包括以下步骤:
步骤S1:基于原始FP32模型,获取训练数据集;
步骤S2:基于训练数据集,构建初始缩放因子和偏置;
步骤S3:根据缩放因子,将原始FP32模型转换为INT8模型;
步骤S4:基于量化感知训练INT8模型,在训练过程中,根据量化感知精度和量化感知损失的变化情况,动态调整模型参数,直到满足预设精度,则得到最终的INT8模型;
步骤S5:将最终的INT8模型部署到国产硬件上。
在本实施例中,原始FP32模型包括图像分类模型和语言模型,构建初始的缩放因子和偏置项,具体如下:
图像分类模型:
对于图像分类模型,使用训练集中的图像数据来计算均值和标准差;
对于每个通道(R、G、B)或特征维度,计算训练集中所有图像的均值和标准差;
将每个通道的标准差除以预设参量来估计缩放因子:
scale = std / scale_factor;
并使用每个特征维度的均值作为初始偏置项;
语言模型:
对于语言模型,对于每个特征维度,将文本数据视为序列,计算序列中所有数据的均值和标准差;
将每个特征维度的标准差除以预设参量来估计缩放因子:
scale = std / scale_factor;
其中std为每个特征维度的标准差,scale_factor为预设参量,scale为缩放因子;
并使用每个特征维度的均值作为初始偏置项。
在本实施例中,步骤S3具体为:
将原始的浮点权重和激活值转换为整数表示,量化的公式如下:
INT8_weight = round(FP32_weight / scale_weight);
INT8_activation = round(FP32_activation / scale_activation);
其中,INT8_weight 和 INT8_activation 分别表示量化后的权重和激活值、scale_weight和scale_activation是量化的缩放因子;FP32_weight 和 FP32_activation分别表示浮点数表示的权重和激活值;
在模型推理过程中,将INT8精度的权重和激活值反量化为浮点数表示,反量化的公式如下:
FP32_weight = INT8_weight * scale_weight;
FP32_activation = INT8_activation * scale_activation;
引入量化误差,量化误差修正的公式如下:
FP32_activation = (INT8_activation + bias_activation) * scale_activation;
其中,bias_activation是用于修正量化误差的偏置项。
在本实施例中,基于量化感知训练INT8模型,具体为:
(1)将量化后的权重和激活值输入到模型中进行前向传播;
(2)在前向传播过程中,使用量化后的权重和激活值进行计算,得到输出结果;
(3)基于损失函数,进行输出结果和真实标签进行比较:
loss = -1/N * (sum(y_true * log(softmax(y_pred))));
其中,y_true是真实标签,y_pred是量化后的整数输出结果,N是样本数量;softmax(y_pred)表示对量化后的整数输出结果进行softmax函数计算;
(4)根据损失函数计算损失,使用梯度下降算法计算梯度,并将梯度传播回模型的每一层;
(5)在反向传播过程中,使用量化后的权重和激活值进行梯度计算和参数更新;
(6)基于更新后的权重和激活值,更新量化的缩放因子;
(6)重复进行多个训练迭代,直到达到预定的训练轮数或达到预设精度要求。
进一步的,所述前向传播,具体为:
对于每个神经元的输入,使用量化后的权重和激活值进行计算;
对于第l层的第j个神经元,使用以下公式计算其输入:
input_j = sum(INT8_weight[l][j][i] * INT8_activation[l-1][i] for i inrange(num_inputs));
对于第l层的第j个神经元,使用激活函数计算其输出:
output_j = activation_function(input_j);
重复以上步骤,直到计算出模型的输出;
其中,INT8_weight[l][j][i]表示第l层的第j个神经元与第l-1层的第i个神经元之间的连接权重,INT8_activation[l-1][i]表示第l-1层的第i个神经元的激活值,num_inputs表示第l-1层的神经元数量。激活函数采用ReLU。
在本实施例中,所述反向传播,具体如下:
对于量化权重的梯度计算:
gradient_weight = gradient_quantized_weight * scale_factor;
其中,gradient_quantized_weight表示量化后的权重梯度,scale_factor表示缩放因子,gradient_weight表示浮点数权重的梯度;
对于量化激活值的梯度计算:
gradient_activation = gradient_quantized_activation * scale_factor;
其中,gradient_quantized_activation表示量化后的激活值梯度,scale_factor表示缩放因子,gradient_activation表示浮点数激活值的梯度;
参数更新:
对于量化权重的参数更新:
updated_weight = weight - learning_ratea * gradient_weight;
其中,weight表示浮点数权重,learning_ratea表示学习率,gradient_weight表示浮点数权重的梯度,updated_weight表示更新后的浮点数权重。
对于量化激活值的参数更新:
updated_activation = activation - learning_rateu * gradient_activation;
其中,activation表示浮点数激活值,learning_rateu表示学习率,gradient_activation表示浮点数激活值的梯度,updated_activation表示更新后的浮点数激活值。
在本实施例中,基于更新后的权重和激活值,更新量化的缩放因子,具体为:
对于权重的缩放因子更新:
updated_scale_factor_weight = max(max_weight, min_weight) / (2^bitwidth - 1);
其中,bitwidth表示量化位宽,updated_scale_factor_weight表示更新后的权重的缩放因子;
max_weight = max(abs(updated_weight));
min_weight = min(abs(updated_weight));
对于激活值的缩放因子更新:
updated_scale_factor_activation = max(max_activation, min_activation)/ (2^bitwidth - 1);
其中,bitwidth表示量化位宽,updated_scale_factor_activation表示更新后的激活值的缩放因子;
max_activation = max(abs(updated_activation));
min_activation = min(abs(updated_activation))。
在本实施例中, 获取与目标硬件设备兼容的驱动程序,所述驱动程序负责与硬件设备进行通信,并提供必要的接口和功能,以支持模型推理操作;
在本实施例中,具体的驱动程序开发基于参考不同硬件设备的文档和规范。
在驱动程序的基础上,集成一个推理引擎,用于加载和执行量化的INT8模型,所述推理引擎负责解析模型文件、构建计算图、执行推理操作,并将结果返回给驱动程序;
在本实施例中,推理引擎可以是自行开发的,也可以使用已有的开源框架或库(如TensorRT、TorchScript、TensorFlow Lite等)。
在推理引擎中,实现模型加载和优化的功能,包括将量化后的INT8模型文件加载到内存中,并进行必要的模型优化;
如图优化、节点融合、内存分配等。这些优化操作旨在提高模型的推理速度和效率,以适应硬件设备的计算能力和资源限制。
在推理引擎中,实现模型的推理过程,包括将输入数据传递给模型,执行前向计算,并获取模型的输出结果。
推理过程需要根据模型的计算图和推理算法来实现,以确保正确的推理结果和高效的计算性能。
在本实施例中,将模型文件加载到内存中并进行必要的模型优化,采用以下具体的技术方案:
1. 模型文件加载:
- 使用适当的库或框架加载模型文件。例如,如果模型是使用TensorFlow训练的,可以使用TensorFlow的Python API加载模型文件。如果模型是使用PyTorch训练的,可以使用PyTorch的相关API加载模型文件。这些库通常提供了加载模型文件的函数或类,可以直接从磁盘上的文件中读取模型的权重和结构。
2. 图优化:
- 对加载的模型图进行优化,以提高推理性能。这包括移除不必要的操作、合并相邻的操作、简化计算图结构等。常见的图优化技术包括常量折叠、图剪枝、子图融合等。可以使用相关的库或框架提供的优化工具或API来实现图优化。
3. 节点融合:
- 在模型图中,将一些相邻的操作节点合并为一个更大的操作节点,以减少计算和内存访问的开销。节点融合可以将多个操作合并为一个更复杂的操作,从而减少计算图中的节点数量和操作数。例如,将卷积操作和激活函数操作合并为一个卷积激活操作。节点融合可以通过编写自定义的优化代码来实现,也可以使用相关的库或框架提供的融合工具或API来实现。
4. 内存分配:
- 在模型推理过程中,需要分配适当的内存来存储输入数据、中间结果和输出结果。为了提高内存使用效率,可以根据模型的计算图和数据大小,合理地分配内存空间。可以使用相关的库或框架提供的内存管理工具或API来实现内存分配。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述,仅是本发明的较佳实施例而已,并非是对本发明作其它形式的限制,任何熟悉本专业的技术人员可能利用上述揭示的技术内容加以变更或改型为等同变化的等效实施例。但是凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与改型,仍属于本发明技术方案的保护范围。
Claims (7)
1.一种适用于国产硬件的FP32模型转换方法,其特征在于,包括以下步骤:
步骤S1:基于原始FP32模型,获取训练数据集;
步骤S2:基于训练数据集,构建初始缩放因子和偏置;
步骤S3:根据缩放因子,将原始FP32模型转换为INT8模型;
步骤S4:基于量化感知训练INT8模型,在训练过程中,根据量化感知精度和量化感知损失的变化情况,动态调整模型参数,直到满足预设精度,则得到最终的INT8模型;
步骤S5:将最终的INT8模型部署到国产硬件上;
所述步骤S3具体为:
将原始的浮点权重和激活值转换为整数表示,量化的公式如下:
INT8_weight = round(FP32_weight / scale_weight);
INT8_activation = round(FP32_activation / scale_activation);
其中,INT8_weight 和 INT8_activation 分别表示量化后的权重和激活值、scale_weight和scale_activation是量化的缩放因子;FP32_weight 和 FP32_activation 分别表示浮点数表示的权重和激活值;
在模型推理过程中,将INT8精度的权重和激活值反量化为浮点数表示,反量化的公式如下
FP32_weight = INT8_weight * scale_weight;
FP32_activation = INT8_activation * scale_activation;
引入量化误差,量化误差修正的公式如下:
FP32_activation = (INT8_activation + bias_activation) * scale_activation;
其中,bias_activation是用于修正量化误差的偏置项。
2.根据权利要求1所述的一种适用于国产硬件的FP32模型转换方法,其特征在于,所述原始FP32模型包括图像分类模型和语言模型,构建初始的缩放因子和偏置项,具体如下:
图像分类模型:
对于图像分类模型,使用训练集中的图像数据来计算均值和标准差;
对于每个通道(R、G、B)或特征维度,计算训练集中所有图像的均值和标准差;
将每个通道的标准差除以预设参量来估计缩放因子;
并使用每个特征维度的均值作为初始偏置项;
语言模型:
对于语言模型,对于每个特征维度,将文本数据视为序列,计算序列中所有数据的均值和标准差;
将每个特征维度的标准差除以预设参量来估计缩放因子;
并使用每个特征维度的均值作为初始偏置项。
3.根据权利要求1所述的一种适用于国产硬件的FP32模型转换方法,其特征在于,所述基于量化感知训练INT8模型,具体为:
(1)将量化后的权重和激活值输入到模型中进行前向传播;
(2)在前向传播过程中,使用量化后的权重和激活值进行计算,得到输出结果;
(3)基于损失函数,进行输出结果和真实标签进行比较,
loss = -1/N * (sum(y_true * log(softmax(y_pred))));
其中,y_true是真实标签,y_pred是量化后的整数输出结果,N是样本数量;softmax(y_pred)表示对量化后的整数输出结果进行softmax函数计算;
(4)根据损失函数计算损失,使用梯度下降算法计算梯度,并将梯度传播回模型的每一层;
(5)在反向传播过程中,使用量化后的权重和激活值进行梯度计算和参数更新;
(6)基于更新后的权重和激活值,更新量化的缩放因子;
(6)重复进行多个训练迭代,直到达到预定的训练轮数或达到预设精度要求。
4.根据权利要求3所述的一种适用于国产硬件的FP32模型转换方法,其特征在于,所述前向传播,具体为:
对于每个神经元的输入,使用量化后的权重和激活值进行计算;
对于第l层的第j个神经元,使用以下公式计算其输入:
input_j = sum(INT8_weight[l][j][i] * INT8_activation[l-1][i] for i inrange(num_inputs));
对于第l层的第j个神经元,使用激活函数计算其输出:
output_j = activation_function(input_j);
重复以上步骤,直到计算出模型的输出;
其中,INT8_weight[l][j][i]表示第l层的第j个神经元与第l-1层的第i个神经元之间的连接权重,INT8_activation[l-1][i]表示第l-1层的第i个神经元的激活值,num_inputs表示第l-1层的神经元数量。
5.根据权利要求3所述的一种适用于国产硬件的FP32模型转换方法,其特征在于,所述反向传播,具体如下:
对于量化权重的梯度计算:
gradient_weight = gradient_quantized_weight * scale_factor;
其中,gradient_quantized_weight表示量化后的权重梯度,scale_factor表示缩放因子,gradient_weight表示浮点数权重的梯度;
对于量化激活值的梯度计算:
gradient_activation = gradient_quantized_activation * scale_factor;
其中,gradient_quantized_activation表示量化后的激活值梯度,scale_factor表示缩放因子,gradient_activation表示浮点数激活值的梯度;
参数更新:
对于量化权重的参数更新:
updated_weight = weight -learning_ratea * gradient_weight;
其中,weight表示浮点数权重,learning_ratea表示学习率,gradient_weight表示浮点数权重的梯度,updated_weight表示更新后的浮点数权重;
对于量化激活值的参数更新:
updated_activation = activation - learning_rateu * gradient_activation;
其中,activation表示浮点数激活值,learning_rateu表示学习率,gradient_activation表示浮点数激活值的梯度,updated_activation表示更新后的浮点数激活值。
6.根据权利要求5所述的一种适用于国产硬件的FP32模型转换方法,其特征在于,基于更新后的权重和激活值,更新量化的缩放因子,具体为:
对于权重的缩放因子更新:
updated_scale_factor_weight = max(max_weight, min_weight) / (2^bitwidth -1);
其中,bitwidth表示量化位宽,updated_scale_factor_weight表示更新后的权重的缩放因子;
max_weight = max(abs(updated_weight));
min_weight = min(abs(updated_weight));
对于激活值的缩放因子更新:
updated_scale_factor_activation = max(max_activation, min_activation) /(2^bitwidth - 1);
其中,bitwidth表示量化位宽,updated_scale_factor_activation表示更新后的激活值的缩放因子;
max_activation = max(abs(updated_activation));
min_activation = min(abs(updated_activation))。
7.根据权利要求1所述的一种适用于国产硬件的FP32模型转换方法,其特征在于,所述步骤S5具体为:
获取与目标硬件设备兼容的驱动程序,所述驱动程序负责与硬件设备进行通信,并提供必要的接口和功能,以支持模型推理操作;
在驱动程序的基础上,集成一个推理引擎,用于加载和执行量化的INT8模型,所述推理引擎负责解析模型文件、构建计算图、执行推理操作,并将结果返回给驱动程序;
在推理引擎中,实现模型加载和优化的功能,包括将量化后的INT8模型文件加载到内存中,并进行必要的模型优化;
在推理引擎中,实现模型的推理过程,包括将输入数据传递给模型,执行前向计算,并获取模型的输出结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311787674.6A CN117454948B (zh) | 2023-12-25 | 一种适用于国产硬件的fp32模型转换方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311787674.6A CN117454948B (zh) | 2023-12-25 | 一种适用于国产硬件的fp32模型转换方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117454948A true CN117454948A (zh) | 2024-01-26 |
CN117454948B CN117454948B (zh) | 2024-07-05 |
Family
ID=
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200302299A1 (en) * | 2019-03-22 | 2020-09-24 | Qualcomm Incorporated | Systems and Methods of Cross Layer Rescaling for Improved Quantization Performance |
US20220083855A1 (en) * | 2020-09-15 | 2022-03-17 | Samsung Electronics Co., Ltd. | Method and apparatus for data-free post-training network quantization and generating synthetic data based on a pre-trained machine learning model |
CN114298291A (zh) * | 2021-12-23 | 2022-04-08 | 浪潮(北京)电子信息产业有限公司 | 一种模型量化处理系统及一种模型量化处理方法 |
WO2022111002A1 (zh) * | 2020-11-30 | 2022-06-02 | 中科寒武纪科技股份有限公司 | 用于训练神经网络的方法、设备和计算机可读存储介质 |
CN114707637A (zh) * | 2022-03-18 | 2022-07-05 | 恒烁半导体(合肥)股份有限公司 | 一种神经网络量化部署方法、系统及存储介质 |
CN117151178A (zh) * | 2023-09-18 | 2023-12-01 | 重庆邮电大学 | 一种面向fpga的cnn定制网络量化加速方法 |
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200302299A1 (en) * | 2019-03-22 | 2020-09-24 | Qualcomm Incorporated | Systems and Methods of Cross Layer Rescaling for Improved Quantization Performance |
US20220083855A1 (en) * | 2020-09-15 | 2022-03-17 | Samsung Electronics Co., Ltd. | Method and apparatus for data-free post-training network quantization and generating synthetic data based on a pre-trained machine learning model |
WO2022111002A1 (zh) * | 2020-11-30 | 2022-06-02 | 中科寒武纪科技股份有限公司 | 用于训练神经网络的方法、设备和计算机可读存储介质 |
CN114298291A (zh) * | 2021-12-23 | 2022-04-08 | 浪潮(北京)电子信息产业有限公司 | 一种模型量化处理系统及一种模型量化处理方法 |
CN114707637A (zh) * | 2022-03-18 | 2022-07-05 | 恒烁半导体(合肥)股份有限公司 | 一种神经网络量化部署方法、系统及存储介质 |
CN117151178A (zh) * | 2023-09-18 | 2023-12-01 | 重庆邮电大学 | 一种面向fpga的cnn定制网络量化加速方法 |
Non-Patent Citations (2)
Title |
---|
MARKUS NAGEL ET AL: "A White Paper on Neural Network Quantization", pages 3 - 6, Retrieved from the Internet <URL:https://doi.org/10.48550/arXiv.2106.08295> * |
平嘉蓉;张正华;沈逸;陈豪;刘源;杨意;尤倩;苏权;: "基于轻量级神经网络的人群计数模型设计", 无线电工程, no. 06, 19 May 2020 (2020-05-19) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20190340499A1 (en) | Quantization for dnn accelerators | |
US20230267319A1 (en) | Training neural network accelerators using mixed precision data formats | |
US20190340492A1 (en) | Design flow for quantized neural networks | |
WO2020131464A1 (en) | Scaled learning for training dnn | |
CN113449857B (zh) | 一种数据处理方法和数据处理设备 | |
CN110245741A (zh) | 多层神经网络模型的优化和应用方法、装置及存储介质 | |
CN110689139A (zh) | 用于机器学习的方法和计算机系统 | |
WO2021043294A1 (en) | Neural network pruning | |
EP3403221B1 (en) | Systems and methods for automatically generating code for deep learning systems | |
WO2020142183A1 (en) | Neural network activation compression with outlier block floating-point | |
CN111240640B (zh) | 基于硬件环境的数据量化方法、装置及可读存储介质 | |
DE102020113541A1 (de) | Verfahren und vorrichtungen zur optimierung der ausführung eines modells für maschinelles lernen | |
US20200364538A1 (en) | Method of performing, by electronic device, convolution operation at certain layer in neural network, and electronic device therefor | |
US20220303176A1 (en) | Efficient optimization for neural network deployment and execution | |
CN113449859A (zh) | 一种数据处理方法及其装置 | |
CN113785313A (zh) | 机器学习中用于不平衡缓解和数据集大小缩减的自适应采样 | |
CN114418089A (zh) | 模型压缩方法、系统、部署方法、设备及存储介质 | |
CN112764893A (zh) | 数据处理方法和数据处理系统 | |
CN113850362A (zh) | 一种模型蒸馏方法及相关设备 | |
CN113190345A (zh) | 一种面向软件定义卫星的神经网络模型部署的方法以及装置 | |
CN117454948B (zh) | 一种适用于国产硬件的fp32模型转换方法 | |
CN112748953A (zh) | 基于神经网络模型的数据处理方法、装置及电子设备 | |
CN117454948A (zh) | 一种适用于国产硬件的fp32模型转换方法 | |
CN115794137A (zh) | 面向gpu的人工智能模型部署方法及设备 | |
CN112633516B (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 |