GPT实战系列-大模型训练和预测,如何加速、降低显存

GPT实战系列-大模型训练和预测,如何加速、降低显存

不做特别处理,深度学习默认参数精度为浮点32位精度(FP32)。大模型参数庞大,10-1000B级别,如果不注意优化,既耗费大量的显卡资源,也耗费大量的训练时间,AI算法中心的训练的投入都给英伟达送钱去了。有的地方32位精度没有太大必要,这就是浮点精度和量化的动力来源。

大模型的训练和预测过程中,如何加快训练速度?如何降低显存占用?
有哪些简单,快速上手的方法?

文章目录

  • GPT实战系列-大模型训练和预测,如何加速、降低显存
    • 混合精度
      • 精度数位表示
      • 转换流程
    • 量化
      • 量化训练
      • 量化推理

混合精度

混合精度训练(mixed precision training)是一种加速深度学习训练的技术。其主要思想是在精度降低可忍受的范围内,使用较低精度的浮点数(如FP16)来表示神经网络中的权重和激活值,从而减少内存使用和计算开销,进而加速训练过程。

混合精度训练的实现可以分为以下几个步骤:

  1. 将FP32的权重转换为FP16格式,然后进行前向计算,得到FP32的损失(loss)。
  2. 使用FP16计算梯度。
  3. 将梯度转换为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
  • INT8:8位整数,其中1位表示符号位,能够表示的数值范围为 $ -128到127$。
  • INT4:4位整数,其中1位表示符号位,能够表示的数值范围为 − 8 到 7 -8到7 87

在这里插入图片描述

  • 转换流程

混合精度训练的流程如下:

  1. 将FP32的权重转换为FP16格式,然后进行前向计算,得到FP32的损失(loss)。
  2. 使用FP16计算梯度。
  3. 将梯度转换为FP32格式,并将其更新到权重上。

在训练过程中,使用autocast将输入和输出转换为FP16格式,使用GradScaler对损失值进行缩放,以避免梯度下降过快而影响模型的准确性。

量化

量化是一种通过整型数值表示浮点的计算方式,减少数字表示的位数来减小模型存储量和计算量的方法。在深度学习中,通常使用32位浮点数来表示权重和激活值。但是,这种精度可能会导致计算和存储的开销非常高。因此,量化使用更短的整数表示权重和激活值,从而减少内存和计算开销。

量化使用整型数值,避免使用浮点处理,加速计算过程,同时也减少用于表示数字或值的比特数,降低存储的技术。将通过将权重存储在低精度数据类型中,来降低模型参数的训练、预测计算过程和模型和中间缓存的存储空间。由于量化减少了模型大小,因此它有利于在CPU或嵌入式系统等资源受限的设备上部署模型。

一种常用的方法是将模型权重从原始的16位浮点值量化为精度较低的8位整数值

8bit 参数量化

GPT,Baichuan2,ChatGLM3等大模型LLM已经展示出色的能力,但是它需要大量的CPU和内存,其中使用一种方法可以使用量化来压缩这些模型,以减少内存占用并加速计算推理,并且尽量保持模型精度性能。


在量化过程中,可以使用两种方法:动态量化和静态量化

  • 动态量化在运行时收集数据,并根据数据动态地量化模型。
  • 静态量化在训练过程中对模型进行量化,并在推理时应用量化。

量化会导致模型精确度下降,因为更低的精度可能会导致舍入误差。因此,在量化期间,需要进行一些技巧来保持模型的准确程度,例如:对权重进行缩放或使用动态范围量化。

同时,在量化模型之前,需要对模型进行测试,确保精确度可以接受。另外,不是所有的模型都可以被量化,只有支持动态量化的模型才可以使用该方法进行量化

例如:load_in_8bit=True

 from transformers import AutoTokenizer, AutoModel model = AutoModel.from_pretrained("THUDM/chatglm3-6b",revision='v0.1.0',load_in_8bit=True,trust_remote_code=True,device_map="auto")

总的来说,量化是一种非常有用的方法,可以减少模型的存储和计算开销,提高模型在设备上的执行效率。

量化训练

在深度学习中,量化是一种通过减少数字表示的位数来减小模型存储量和计算量的方法。在使用混合精度训练时,可以将模型权重和梯度从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_8bit=True)

需要注意的是,使用load_in_8bit方法量化模型可能会导致模型精确度下降。另外,不是所有的模型都可以被量化,只有支持动态量化的模型才可以使用该方法进行量化。

点个赞 点个赞 点个赞

觉得有用 收藏 收藏 收藏

End


GPT专栏文章:
GPT实战系列-ChatGLM2部署Ubuntu+Cuda11+显存24G实战方案

GPT实战系列-Baichuan2本地化部署实战方案

GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案

GPT实战系列-如何用自己数据微调ChatGLM2模型训练

GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF

GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(二)

GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(一)

GPT实战系列-ChatGLM2模型的微调训练参数解读

GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF


决策引擎专栏:
Falcon构建轻量级的REST API服务

决策引擎-利用Drools实现简单防火墙策略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/239639.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python+Requests模块添加cookie

请求中添加cookies 对于某些网站,登录然后从浏览器中获取cookies,以后就可以直接拿着cookie登录了,无需输入用户 名密码。 一、在参数中添加cookie 在发送请求时使用cookies 代码示例: import requests # 1,在参数…

Android RatingBar实现五星好评

属性 isIndicatorRatingBar 是否为指示器,为true时,用户将无法交互操作,默认为false。 numStars 显示的星型数量,必须是一个整形值,像“50”,虽然可以设置很大,但一般…

1688API接口系列,1688开放平台接口使用方案(商品详情数据+搜索商品列表+商家订单类)

1688商品详情接口是指1688平台提供的API接口,用于获取商品详情信息。通过该接口,您可以获取到商品的详细信息,包括商品标题、价格、库存、描述、图片等。 要使用1688商品详情接口,您需要先申请1688的API权限,并获取ac…

人工智能对我们的生活影响有多大?

一、标题解析 本文标题为“人工智能对我们的生活影响有多大?”,这是一个典型的知乎风格SEO文案标题,既能够吸引读者,又能够体现文章的核心内容。 二、内容创作 1. 引言:在开头,我们可以简要介绍人工智能…

WebSocket 实战:构建高效的实时应用

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

一、服务器准备

本案例使用VMware Workstation Pro虚拟机创建虚拟服务器来搭建Linux服务器集群,所用软件及版本如下: Centos7.7-64bit 1、三台虚拟机创建 第一种方式:通过iso镜像文件来进行安装(不推荐) 第二种方式:直接复制安装好的虚拟机文…

熬夜会秃头——Beta冲刺总结随笔

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标总结Beta冲刺团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 目录 一、Beta冲刺开始前设立的任务完成…

使用drawio图表,在团队中,做计划,设计和跟踪项目

使用drawio图表,在团队中,做计划,设计和跟踪项目 drawio是一款强大的图表绘制软件,支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用,则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部…

DCCK“启航计划“3+2第三课相机参数于选型

面积小,通电发热都用以引入噪声

prometheus部署及与grafana结合应用

一、prometheus 介绍 prometheus server 是 Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。它会定期从静态配置的监控目标或者基于服务发现自动配置的自标中进行拉取数据,当新拉取到的数据大于配置的内存缓存区时&…

TCP三次握手过程

什么是TCP tcp是一个面向连接的、可靠的、基于字节流的传输层通信协议 面向连接:TCP连接是一对一的,不能实现一对多或多对一,TCP在通信前要首先建立连接,连接成功后才能开始进行通信可靠的:TCP连接要保证通信过程的可靠…

火狐插件(附加组件)发布流程

1、进入开发者中心 开发者中心 :: Firefox 附加组件https://addons.mozilla.org/zh-CN/developers/ 路径: 2、首次使用会自动打开注册登录页 3、注册登录后点击 提交你的第一个附加组件 4、此时需要进行两步验证 5、点击身份验证应用 在打开的页面中根据个人实际…