广告网站怎么设计制作,网站如何做视频链接地址,如何给自己网站做外链,做网站主要学什么软件GPT实战系列-大模型训练和预测#xff0c;如何加速、降低显存
不做特别处理#xff0c;深度学习默认参数精度为浮点32位精度#xff08;FP32#xff09;。大模型参数庞大#xff0c;10-1000B级别#xff0c;如果不注意优化#xff0c;既耗费大量的显卡资源#xff0c;…GPT实战系列-大模型训练和预测如何加速、降低显存
不做特别处理深度学习默认参数精度为浮点32位精度FP32。大模型参数庞大10-1000B级别如果不注意优化既耗费大量的显卡资源也耗费大量的训练时间AI算法中心的训练的投入都给英伟达送钱去了。有的地方32位精度没有太大必要这就是浮点精度和量化的动力来源。
大模型的训练和预测过程中如何加快训练速度如何降低显存占用 有哪些简单快速上手的方法 文章目录 GPT实战系列-大模型训练和预测如何加速、降低显存混合精度精度数位表示转换流程 量化量化训练量化推理 混合精度
混合精度训练mixed precision training是一种加速深度学习训练的技术。其主要思想是在精度降低可忍受的范围内使用较低精度的浮点数如FP16来表示神经网络中的权重和激活值从而减少内存使用和计算开销进而加速训练过程。
混合精度训练的实现可以分为以下几个步骤
将FP32的权重转换为FP16格式然后进行前向计算得到FP32的损失loss。使用FP16计算梯度。将梯度转换为FP32格式并将其更新到权重上。
由于FP16精度较低表示的数值范围小可能会导致精度损失因此在混合精度训练中需要使用一些技巧来保持模型的精确性。例如可以使用梯度缩放GradScaler来控制梯度的大小以避免梯度下降过快而影响模型的准确性。
精度数位表示
FP32单精度浮点数使用32位二进制数表示其中1位表示符号位8位表示指数位23位表示尾数位能够表示的数值范围为 ± 3.4 × 1 0 38 ±3.4×10^{38} ±3.4×1038。FP16半精度浮点数使用16位二进制数表示其中1位表示符号位5位表示指数位10位表示尾数位能够表示的数值范围为 ± 2 15 ±2^{15} ±215。FP64双精度浮点数使用64位二进制数表示其中1位表示符号位11位表示指数位52位表示尾数位能够表示的数值范围为 ± 1.8 × 1 0 308 ±1.8×10^{308} ±1.8×10308。INT88位整数其中1位表示符号位能够表示的数值范围为 $ -128到127$。INT44位整数其中1位表示符号位能够表示的数值范围为 − 8 到 7 -8到7 −8到7。 转换流程
混合精度训练的流程如下
将FP32的权重转换为FP16格式然后进行前向计算得到FP32的损失loss。使用FP16计算梯度。将梯度转换为FP32格式并将其更新到权重上。
在训练过程中使用autocast将输入和输出转换为FP16格式使用GradScaler对损失值进行缩放以避免梯度下降过快而影响模型的准确性。
量化
量化是一种通过整型数值表示浮点的计算方式减少数字表示的位数来减小模型存储量和计算量的方法。在深度学习中通常使用32位浮点数来表示权重和激活值。但是这种精度可能会导致计算和存储的开销非常高。因此量化使用更短的整数表示权重和激活值从而减少内存和计算开销。
量化使用整型数值避免使用浮点处理加速计算过程同时也减少用于表示数字或值的比特数降低存储的技术。将通过将权重存储在低精度数据类型中来降低模型参数的训练、预测计算过程和模型和中间缓存的存储空间。由于量化减少了模型大小因此它有利于在CPU或嵌入式系统等资源受限的设备上部署模型。
一种常用的方法是将模型权重从原始的16位浮点值量化为精度较低的8位整数值。 GPTBaichuan2ChatGLM3等大模型LLM已经展示出色的能力但是它需要大量的CPU和内存其中使用一种方法可以使用量化来压缩这些模型以减少内存占用并加速计算推理并且尽量保持模型精度性能。 在量化过程中可以使用两种方法动态量化和静态量化。
动态量化在运行时收集数据并根据数据动态地量化模型。静态量化在训练过程中对模型进行量化并在推理时应用量化。
量化会导致模型精确度下降因为更低的精度可能会导致舍入误差。因此在量化期间需要进行一些技巧来保持模型的准确程度例如对权重进行缩放或使用动态范围量化。
同时在量化模型之前需要对模型进行测试确保精确度可以接受。另外不是所有的模型都可以被量化只有支持动态量化的模型才可以使用该方法进行量化。
例如load_in_8bitTrue from transformers import AutoTokenizer, AutoModel model AutoModel.from_pretrained(THUDM/chatglm3-6b,revisionv0.1.0,load_in_8bitTrue,trust_remote_codeTrue,device_mapauto)总的来说量化是一种非常有用的方法可以减少模型的存储和计算开销提高模型在设备上的执行效率。
量化训练
在深度学习中量化是一种通过减少数字表示的位数来减小模型存储量和计算量的方法。在使用混合精度训练时可以将模型权重和梯度从FP32转换为FP16以节省内存和加速训练。同样的思路量化训练可以将激活值转换为更短的整数从而减少内存和计算开销。
PyTorch中提供一些量化训练的工具和API例如QAT量化感知训练使用动态范围量化等。其中使用Adam8bit进行量化训练是一种方法。
量化推理
使用load_in_8bit方法可以实现模型的量化。该方法可以将模型权重和激活值量化为8位整数从而减少内存和计算开销。具体实现方法如下
import torch
from transformers import AutoModel# 加载模型
model AutoModel.from_pretrained(bert-base-uncased,load_in_8bitTrue)需要注意的是使用load_in_8bit方法量化模型可能会导致模型精确度下降。另外不是所有的模型都可以被量化只有支持动态量化的模型才可以使用该方法进行量化。
点个赞 点个赞 点个赞
觉得有用 收藏 收藏 收藏
End GPT专栏文章 GPT实战系列-ChatGLM2部署UbuntuCuda11显存24G实战方案
GPT实战系列-Baichuan2本地化部署实战方案
GPT实战系列-ChatGLM3本地部署CUDA111080Ti显卡24G实战方案
GPT实战系列-如何用自己数据微调ChatGLM2模型训练 GPT实战系列-GPT训练的PretrainingSFTReward ModelingRLHF
GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型到底做了什么(二)
GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型到底做了什么(一)
GPT实战系列-ChatGLM2模型的微调训练参数解读
GPT实战系列-GPT训练的PretrainingSFTReward ModelingRLHF 决策引擎专栏 Falcon构建轻量级的REST API服务
决策引擎-利用Drools实现简单防火墙策略