大模型核心技术与应用(微课视频版)课件 模型量化_第1页
大模型核心技术与应用(微课视频版)课件 模型量化_第2页
大模型核心技术与应用(微课视频版)课件 模型量化_第3页
大模型核心技术与应用(微课视频版)课件 模型量化_第4页
大模型核心技术与应用(微课视频版)课件 模型量化_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模型量化模型量化模型量化

6.QLoRA4-bit量化1.为什么需要量化Llama13BFP1626GBFP3252GBInt813GBInt46.5GB1.为什么需要量化计算过程中TensorCore和显存之间存在频繁的数据交换。如果能减少数据交换的大小,便可以提升模型的推理速率。1.为什么需要量化类型算力TensorFloat32(TF32)156TFLOPSFP16TensorCore312TFLOPSINT8TensorCore624TOPSA100算力

1.为什么需要量化把Float类型(FP32,FP16)的模型参数和激活值,用整数(Int8,Int4)来代替。同时尽可能减少量化后模型推理的误差。带来的好处:1.减少模型的存储空间和显存的占用。2.减少显存和TensorCore之间的数据传输量,从而加快模型推理时间。3.显卡对整数运算速度快于浮点型数据。从而加快模型推理时间。2.怎么量化和反量化

2.怎么量化和反量化2.11-1.530127-12702.怎么量化和反量化2.11-1.530127-12702.怎么量化和反量化2.11-1.530127-12702.怎么量化和反量化

2.11-1.530127-12702.11

量化反量化

2.怎么量化和反量化

2.11-1.530127-1270浪费2.怎么量化和反量化

2.11-1.5302550

量化反量化

2.怎么量化和反量化2.11-1.53025502.11-1.530127-1270对称量化计算简单,精度低非对称量化计算复杂,精度高

2.怎么量化和反量化

2.怎么量化和反量化

量化计算结果

2.怎么量化和反量化-1.53025508浪费多个值被量化为同一整数值3.神经网络量化量化是对每一层而言,每一层进行量化计算,每一层输出时进行反量化。为什么量化对神经网络精度影响不大?1.因为一般权重和输入都经过Normalization,基本数值范围都不大。2.因为激活函数,数值影响会被平滑。3.因为对于绝大部分神经网络都是进行分类,最后都是概率值,只要最后某种类别概率高于其他类别就可以,不需要绝对数值。4.训练后动态量化1.将训练好的模型权重量化为int8,并保存量化参数。2.在模型推理时,对每一层输入的fp32激活值,动态进行进行量化为int8。3.在每一层对量化后的int8权重和int8激活值进行计算。4.在每一层输出时将结果反量化为fp32。5.将fp32激活值传入到下一层。int8权重fp32输入量化int8输入int8计算反量化fp32输出4.训练后动态量化model_int8=torch.ao.quantization.quantize_dynamic(model,{torch.nn.Linear},dtype=torch.qint8)torch.qint8tensor([[-0.8211,0.1416,0.9627],[-1.9537,0.5380,1.6989],[-3.6243,1.7555,1.6423]],size=(3,3),dtype=torch.qint8,quantization_scheme=torch.per_tensor_affine,scale=0.028314674273133278,zero_point=0)_repr(qint8_tensor)tensor([[-29,-69,-128],[5,19,62],[34,60,58]],dtype=8)4.训练后动态量化训练后动态量化的问题:1.每一次推理每一层都要对输入统计量化参数,耗时。2.每一层计算完都转化为fp32,存入显存,占用显存带宽。5.训练后静态量化训练后动态量化的问题:1.每一次推理每一层都要对输入统计量化参数,耗时。

用有代表性的输入数据跑一遍整个网络,通过统计得到每层大概得量化参数。2.每一层计算完都转化为fp32,存入显存,占用显存带宽。

这一层的输出是下一层的输入。下一层还是要量化,不如在这一层直接量化好再传给下一层。4.训练后静态量化1.将训练好的模型权重量化为int8,并保存量化参数。2.校准(calibration):利用一些有代表性的数据进行模型推理,用这些数据在神经网络每一层产生的激活估算出激活值的量化参数。这样就不用推理时每次根据实际激活值计算量化参数。3.在每一层对量化后的int8权重和int8激活值进行计算。4.在每一层输出时将结果反量化为fp32,同时根据校准产生的激活值量化参数,把激活值量化为int8,把量化参数放入量化后的激活值中。5.将Int8的激活值和它的量化参数传入到下一层。int8权重int8输入int8计算反量化+量化int8输出4.训练后静态量化classMyModel(torch.nn.Module):def__init__(self):super().__init__()

self.quant=torch.ao.quantization.QuantStub()self.linear1=torch.nn.Linear(3,3,bias=False)self.relu=torch.nn.ReLU()self.linear2=torch.nn.Linear(3,1,bias=False)

self.dequant=torch.ao.quantization.DeQuantStub()defforward(self,inputs):

q_inputs=self.quant(inputs)outputs=self.linear1(q_inputs)outputs=self.relu(outputs)outputs=self.linear2(outputs)

f_outputs=self.dequant(outputs)returnf_outputsmodel.qconfig=torch.ao.quantization.get_default_qconfig('x86')model_prepared=torch.ao.quantization.prepare(model)model_prepared(test_feature)model_int8=torch.ao.quantization.convert(model_prepared)4.训练后量化的问题对训练好的模型,无论怎么量化,总是会有误差。减少误差不正是神经网络擅长的吗?是否有一种通过模型训练的办法来减少误差?5.训练后量化的问题对训练好的模型,无论怎么量化,总是会有误差。减少误差不正是神经网络擅长的吗?是否有一种通过模型训练的办法来减少误差?在网络训练过程中,模拟量化,让模型在训练过程中就能调整参数,让它更适合量化,提高量化后模型的精度。5.量化感知训练1.加载fp32的模型参数。2.输入fp32的激活值。3.通过在网络里插入模拟量化节点(fake_quantization)来分别对模型参数和激活值进行量化和反量化。从而引入量化误差。4.模型在fp32精度下进行计算。5.计算后的激活值传入下一层。fp32权重fp32输入模拟量化+反量化fp32计算fp32输出模拟量化+反量化5.量化感知训练classMyModel(torch.nn.Module):def__init__(self):super().__init__()

self.quant=torch.ao.quantization.QuantStub()self.linear1=torch.nn.Linear(3,3,bias=False)self.relu=torch.nn.ReLU()self.linear2=torch.nn.Linear(3,1,bias=False)

self.dequant=torch.ao.quantization.DeQuantStub()defforward(self,inputs):

q_inputs=self.quant(inputs)outputs=self.linear1(q_inputs)outputs=self.relu(outputs)outputs=self.linear2(outputs)

f_outputs=self.dequant(outputs)returnf_outputsmodel.qconfig=torch.ao.quantization.get_default_qconfig('x86')model_prepared=torch.ao.quantization.prepare_qat(model)train_loop(model_prepared)model_int8=torch.ao.quantization.convert(model_prepared)6.LLM.int8()大模型

0退化的量化技术6.LLM.int8()[-0.10,-0.23,57.0,0.08,-0.38,-0.28,-45,-0.29,-2.11,0.34,-0.53,-67.0]][-0.00,-0.00,57.0,0.00,-0.53,-0.53,-45,-0.53,-2.11,0.53,-0.53,-67.0]]原始特征:量化+反量化:去除异常值后量化+反量化:[-0.10,-0.23,0.33,0.08,-0.38,-0.28,-2.11-0.28,-2.11,0.33,-0.53,-2.11]EmergentFeatures6.LLM.int8()1102114125102132122213503223227178278998348597306.LLM.int8()11021141251021321222135032232271782789983485973014225222132211101210121335032286523181410866372226680207589247178278998348597306.LLM.int8()1.220.30.241.10.432.11.523.02.023.40.232.21.50.8-1.70.31.32.1-1.30.50.33.20.91.31.31.50.41.10.41.2inputweight6.LLM.int8()1.20.20.41.52.00.220.341.132.123.023.432.21.50.8-1.7-1.30.50.30.31.32.13.20.91.31.31.50.41.10.41.2inputweight6.LLM.int8()1.20.20.41.52.00.220.341.132.123.023.432.24578-127-123652534321328912712345431.10.41.2input1weight1input2weight26.LLM.int8()1.20.20.41.52.00.220.341.132.123.023.432.21.10.41.2input1weight1input2weight2

1.50.8-1.7-1.30.50.30.31.32.13.20.91.31.31.50.4

int8量化int8计算反量化fp16结果fp16计算结果最终结果6.LLM.int8()EmergentFeature仅占所有特征的0.1%Weight在加载模型时量化,显存占用比float16减半使用LLM.int8()对精度几乎没有影响模型推理速度会变慢20%左右6.LLM.int8()bnb_config=BitsAndBytesConfig(load_in_8bit=True)model=AutoModelForCausalLM.from_pretrained(model_id,device_map="auto",quantization_config=bnb_config)7.QLoRA7.QLoRA7.QLoRA7.QLoRA01234567891011121314157.QLoRA01234567891011121314151.732.267.QLoRA01234567891011121314151.732.26

7.QLoRA01234567891011121314151.732.26

7.QLoRA0123456789101112131415

2.26-2.26

7.QLoRA0123456789101112131415两边各舍弃累计概率密度:0.0322917两边各舍弃累计概率密度:0.03229177.QLoRA0123456789101112131415两边各舍弃累计概率密度:0.0322917两边各舍弃累计概率密度:0.0322917零不能被准确的反量化为07.QLoRA01234567891011121314157.QLoRA将所有x除以最大绝对值,归一化到[-1,1]之间。-1.00-0.69619280099868771-0.52507305145263672-0.394917488098144533-0.284441381692886354-0.184773430228233345-0.0910500362515449560.070.0795802995562553480.1609302014112472590.24611230194568634100.33791524171829224110.44070982933044434120.5626170039176941130.7229568362236023141.015NormalFloat4-bit,NF47.QLoRA7.QLoRA-1.00-0.69619280099868771-0.52507305145263672-0.394917488098144533-0.284441381692886354-0.184773430228233345-0.0910500362515449560.070.0795802995562553480.1609302014112472590.24611230194568634100.33791524171829224110.44070982933044434120.5626170039176941130.7229568362236023141.0151.532,-0.823,0.412,0.2321,-0.537,0.269,0.15115,2,10,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论