BitsAndBytes(简称 BnB)是一个用于“压缩”大语言模型的工具包

BitsAndBytes(简称 BnB)是一个用于“压缩”大语言模型的工具包,能把模型从原来的16位或32位,压成4位或8位,减少显存占用,同时保持尽量高的精度。


🧩 为什么叫 Bits and Bytes?

它的名字就揭示了它的本质:

  • Bits(比特):指的是更小单位的表示,比如 4-bit、8-bit 的低精度表示。
  • Bytes(字节):指的是标准 8-bit 表示 或 更多位的数据。
    合在一起,意思是“控制模型用多少位来表示参数”,从而节省资源。

💡 为什么要用 BitsAndBytes?

训练/推理 大型语言模型(LLaMA、GPT、Mistral 等)时,如果使用原始精度(16-bit float),会导致:

  • 显存爆炸(16GB 显卡跑不动)
  • 加载速度慢
  • 部署成本高

而 BitsAndBytes 允许我们把模型压缩成 8-bit 或 4-bit,让你:

✅ 在消费级显卡上运行
✅ 加载更快
✅ 精度损失小,可控


🔢 举例说明:原始模型 vs BnB 压缩模型

以 LLaMA 2-7B 模型为例:

模型格式占用显存(大概)精度情况
FP16 原始模型14~16 GB精度最高
BnB 8-bit 模型8~9 GB精度接近
BnB 4-bit 模型4~5.5 GB精度略降

🔧 技术实现

BitsAndBytes 使用了两种核心压缩方式:

压缩类型说明举例
8-bit 量化把每个参数从 16-bit → 8-bit数值范围从 ±65536 → ±256
4-bit 量化每个参数用 4-bit 表示,更极限一个 float 压缩为 16 分之一大小

它也提供了三种主流 量化模式(不用深究,但知道名字有用):

  • nf4(最常用,效果稳定)
  • fp4(浮点 4bit)
  • int4(整数 4bit)

🧪 示例:怎么用 BitsAndBytes 加载压缩模型(Python)

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers import BitsAndBytesConfig# 配置 4-bit 加载
bnb_config = BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_compute_dtype="float16",  # 用 fp16 来计算bnb_4bit_quant_type="nf4",         # 用 NF4 量化算法
)model_name = "unsloth/llama-3.1-8b-unsloth-bnb-4bit"model = AutoModelForCausalLM.from_pretrained(model_name,quantization_config=bnb_config,device_map="auto"
)tokenizer = AutoTokenizer.from_pretrained(model_name)

📌 总结一下,说得更简单点:

  • BitsAndBytes 就是个压缩工具包,能让大模型“瘦身”,轻松跑在普通电脑上;
  • 你只要看到 bnb-4bit、bnb-8bit,就知道用了这个工具
  • Unsloth 只是把它优化得更厉害一些而已

🧱 1. 什么是「量化(Quantization)」?

把模型里那些“高精度的数字”变成“低精度的小数字”,以此来减少模型体积、降低显存占用、提升加载速度


🎯 举个例子:

比如你有个模型参数是:

原始值:0.123456789(float32,32位)

如果我们只保留4位小数:

量化后:0.1235(float16 或 8-bit 或 4-bit)

你会失去一点精度,但整体性能几乎没变,资源节省巨大!


🧠 2. FP16 是什么?

✅ 定义:

  • FP16 = “16-bit Floating Point”
  • 是一种精度比 float32 低、但比 8-bit 高的数据格式

✅ 用途:

  • 用来训练或推理大型模型时节省内存
  • 精度和速度之间取得平衡,几乎不影响模型效果

🔢 3. 什么是 4-bit?

✅ 定义:

  • 表示每个参数只用 4位(半个字节)来存储
  • 比 FP16(16位)压缩了 4倍

✅ 代价:

  • 节省显存最多
  • 但精度有所降低(不同算法影响不同)

🛠️ 4. BitsAndBytes 是什么?

✅ 定义:

BitsAndBytes(简称 BnB)是一个库,用于自动把大模型做成 8-bit 或 4-bit 的压缩版本,并且保持它们能在 GPU 上跑。

✅ 用法:

  • 在 Transformers 中加载模型时配合使用:
from transformers import BitsAndBytesConfig

✅ 支持的压缩方式:

模式含义用处
bnb-8bit8-bit 量化精度几乎不降,省一半显存
bnb-4bit4-bit 量化精度略降,显存最省

🧱 5. 什么是 bnb-4bit?

✅ 定义:

就是“使用 BitsAndBytes 工具,将模型压缩成 4bit 精度的版本”。

你看到名字中有:

llama-2-7b-bnb-4bit

就说明这个模型:

  • 是用 BitsAndBytes 压成了 4-bit
  • 通常占用显存为原始的 1/4 ~ 1/3
  • 精度比 FP16 略低,但在很多实际应用中,效果差异不大

🧩 总结一下:区别和联系

术语类别是啥?举例和别人啥关系
量化技术名词降低模型精度压缩模型FP32 → 8bit → 4bit总称,下面几种都属于量化方式
FP16精度类型用16位浮点表示参数原始模型的精简版是一种 中等压缩的量化方式
4-bit精度类型每个参数只用4位表示参数值范围更小精度最低,但节省显存最多
BitsAndBytes工具把模型压成 4bit/8bit 工具bnb-4bit 就是它压的实现量化的工具库
bnb-4bit文件/模型后缀使用 BitsAndBytes 做的 4-bit 模型llama-2-7b-bnb-4bit是 4-bit 的一种具体实现方式

📌 举个通俗场景类比

想象你有一本书:

格式类比
FP32原版硬皮精装书
FP16纸质平装版
bnb-8bit黑白复印本
bnb-4bit缩印+删图版手册

你还能看懂它在讲啥,但体积轻多了。


✅ 如果你在开发中怎么选?

你拥有的资源推荐格式使用方式
显卡很强(A100/4090)FP16 或 FP32不用压缩,保持最佳精度
显卡一般(8GB)bnb-4bit用 BitsAndBytes 量化运行
CPU 推理GGUF+CPU 模式用 llama.cpp 加载 .gguf

🧠 一句话总结:

FP32、FP16、8bit、4bit 都是表示数字的格式,表示的越精细,占用的空间越大。
压缩后模型运行更快、显存占用更小,但精度也会降低。


📦 它们的关系(由高到低精度):

格式全称精度(位)精度高吗?显存占用举例
FP32Float 32位32-bit⭐⭐⭐⭐⭐🟥最大0.1234567890123456(精确)
FP16Float 16位16-bit⭐⭐⭐⭐☆🟧中等0.1234(舍去一部分小数)
8bit整数8位8-bit⭐⭐☆☆☆🟨小0.12(小数更少)
4bit整数4位4-bit⭐☆☆☆☆🟩最小0.1(最粗略的近似)

💬 用比喻来说:

格式类比成衣服定制
FP32高级西装,按厘米剪裁(超精准)
FP16成衣店西装,按大中小分尺码(较精准)
8bit淘宝快时尚,按身高估尺码(能穿)
4bit地摊衣服,只分男女(凑合能穿)

🔢 用数字实际表示的范围与精度

假设你要保存数字 0.123456789

格式实际能保存成啥
FP320.123456789 (全部保留)
FP160.1235(只保留4位有效)
8bit0.12(可能只有两位有效)
4bit0.1(基本靠近大概意思)

🧪 举个真实例子:加载 LLaMA2-7B 模型

格式模型大小显存要求精度变化是否可训练
FP3214GB+28~32GB无损✅ 可训练
FP16~13GB14~16GB几乎无损✅ 可训练
8bit~8GB8~9GB有些误差❌ 通常只推理
4bit~4.2GB5~6GB精度损失多❌ 通常只推理

🔧 技术区别

格式类型是否浮点描述
FP32浮点数✅ 是32位浮点,训练 & 推理标准格式
FP16浮点数✅ 是用一半的位表示 float
8bit整数/量化❌ 否一般用于推理(int8)
4bit整数/量化❌ 否极致压缩,用于推理(int4)

✅ 什么时候用哪个?

你有的显存/算力推荐格式原因
>= 32GB 显存FP32最高精度,适合训练
>= 16GB 显存FP16精度接近 FP32,适合训练和推理
>= 8GB 显存8bit可跑大模型推理,损失精度较少
>= 4GB 显存4bit极限压缩,仅用于推理,速度快

🧠 总结一句话:

想省资源用 4bit 或 8bit,
想高精度用 FP16 或 FP32,
模型越小、速度越快,精度也会越低。


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

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

相关文章

【前端】 Vue 3 中二次封装组件

在 Vue 3 中二次封装组件是提高代码复用性和维护性的重要手段。以下是详细的封装方法和最佳实践: 一、封装原则 功能扩展:在原有组件基础上添加新功能定制样式:统一项目的 UI 设计规范简化接口:隐藏复杂逻辑,提供简洁…

分布式词表示(Distributed Word Representation):自然语言处理的核心基石

分布式词表示(Distributed Word Representation):自然语言处理的核心基石 在自然语言处理(NLP)领域,如何将离散的词汇转化为计算机可理解的数值形式,一直是技术突破的关键。传统的独热编码&…

Windows Playwright NotImplementedError问题深究

原文链接&#xff1a;Windows Playwright NotImplementedError问题深究 < Ping通途说 0. 引言 今天来看一下这个困扰我很久的问题。是关于在FastAPI / NiceGUI 等基于Uvicorn环境下使用Async Playwright 提示NotImplementedError的问题。 本解决方案仅适用基于Uvicorn的异步…

QCustomPlot 数据可视化方式详解

QCustomPlot 数据可视化方式详解 QCustomPlot 提供了多种灵活的数据显示方式,可以满足从简单静态图表到复杂实时数据可视化的各种需求。以下是 QCustomPlot 显示数据的核心方式和策略: 基本数据显示方式 1.1 完整数据设置 (setData)// 一次性设置完整数据集 QVector<doub…

家用旧电脑搭建小型服务器操作步骤教程:一步一步本地部署到公网访问

你家是不是也有一台吃灰的旧电脑&#xff1f;别急着扔&#xff0c;它其实还能发挥大作用&#xff01;小编最近就把家里一台十年前的老台式机&#xff0c;改造成了一个小型服务器&#xff0c;主要用来文件备份、当网站测试环境&#xff0c;还是比较有用的。今天就来手把手教你&a…

Python银行账户系统全解析

完整代码如下&#xff1a; class BankAccount:def __init__(self, account_holder, initial_balance0):"""初始化银行账户:param account_holder: 账户持有人姓名:param initial_balance: 初始余额&#xff0c;默认为0"""self.account_holder …

博世X阿里云:智能座舱接入通义大模型!

近日,全球领先的汽车技术与服务商博世与阿里云宣布在大模型领域达成合作,通义大模型助力博世加速AI技术应用于智能座舱,首次实现座舱环境主动感知和3D数字人交互。 博世AI智能座舱技术原型由博世智能驾控事业部以通义千问和通义万相为基础,结合阿里云百炼大模型服务平台和磐曦数…

高性能计算服务器的主要作用都有哪些?

高性能计算服务器是一种专门为了处理大规模科学计算和数据分析任务所设计的服务器&#xff0c;高性能计算服务器拥有着强大的计算能力和高速的数据传输能力&#xff0c;有着高度的可靠性和可扩展性&#xff0c;下面小编就来介绍一下高性能计算服务器的主要作用吧&#xff01; 高…

C++ 进阶:深入理解虚函数、继承与多态

前言 在 C 的面向对象编程中&#xff0c;继承和多态是两个核心概念。今天我们将深入探讨 C 中与多态密切相关的几个重要特性&#xff1a;虚函数、virtual 关键字、override 关键字、多重继承以及虚继承。这些内容是理解 C 多态机制和复杂类层次结构的关键。 虚函数与 virtual…

为AR眼镜等多种智能可穿戴设备添加穿戴状态检测功能

作者&#xff1a;Azoteq中国 随着AR/VR眼镜、头戴式耳机和入耳式耳塞、智能手表和健身手环等可穿戴电子产品受到越来越多消费者的欢迎&#xff0c;如何设计外形更加时尚迷人、功能更加先进宜人的穿戴产品成为了创新和创意的焦点。作为全球领先的多传感器解决方案提供商&#xf…

腾讯云国际站缩容:策略、考量与实践

腾讯云国际站作为连接全球业务的重要云计算枢纽&#xff0c;其资源的灵活调配至关重要。而腾讯云国际站缩容&#xff0c;便是企业在特定发展阶段或业务场景下需要深入探究的关键议题。 一、腾讯云国际站缩容的背景与动因 随着企业业务的动态发展&#xff0c;市场需求并非一成…

英语写作核心词汇

以下是一些非常常见和实用的单词和短语分类整理&#xff1a;​ 1. 核心高频动词 (用于表达观点、影响、变化等) ​Affect (v.): 影响​Cause (v.): 引起&#xff0c;导致​Influence (v./n.): 影响​Benefit (v./n.): 有益于&#xff1b;好处​Harm (v./n.): 损害&#xff1b…

Python函数参数传递机制全解析

Python常见问题解答 1. 函数参数传递是值传递还是引用传递&#xff1f; Python中的参数传递是"对象引用传递"&#xff08;或称为"共享对象传递"&#xff09;。具体来说&#xff1a; 对于不可变对象&#xff08;如数字、字符串、元组&#xff09;&#x…

MATLAB提供的预训练神经网络

CNN 预训练的神经网络 Deep Learning Toolbox™ provides various pretrained networks that have different sizes, speeds, and accuracies.

【PDF】Qt生成PDF文件,占用存储小

在 Qt 项目中&#xff0c;如果你希望使用第三方开源库来生成心电图的 PDF 报告&#xff0c;并且要求占用磁盘空间最小&#xff0c;以下是一些推荐的选择&#xff1a; 推荐的开源库 PoDoFo 简介&#xff1a;PoDoFo 是一个用于创建和操作 PDF 文件的 C 开源库。它非常轻量级&…

系统架构设计师 1

第一章 绪论 系统架构设计师(System Architecture Designer)是项目开发活动中的关键角色之一。系统架构是系统的一种整体的高层次的结构表示&#xff0c;是系统的骨架和根基&#xff0c;其决定了系统的健壮性和生命周期的长短。 1.1 系统架构概述 1946年第一台计算机&#x…

2023年面试记录(base杭州)

阿里外包&#xff08;通过&#xff09; 一面&#xff1a; 1、react 常用hook 2、css的重绘和重排 后面如果进入还有两轮 二面&#xff1a; 1、解决不同版本的兼容问题能句几个例子吗 2、FCP和 CLS 这两个指标是什么意思能讲下吗 3、具体优化的动作是什么呢 4、放到cdn上为什么…

React 国际化方案最佳实践调研

文章目录 前言主流国际化库对比分析翻译资源管理策略语言切换方式与自动识别Next.js 中的国际化支持Page Router 模式&#xff08;pages 目录&#xff09;App Router 模式&#xff08;app 目录&#xff09; 多语言 SEO 与预渲染注意事项企业级多语言开发与协作流程建议 前言 整…

基于Python实现自然语言处理(主题层次的情感分类)

主题层次的情感分类 1 任务及数据集介绍 该项目作业的具体任务是来自于 BDCI2018-汽车行业用户观点主题及情感识别的题目。数据是网络中公开的用户对汽车相关内容的评价文本。此任务是对每条文本内容&#xff08;即用户评论&#xff09;进行分析&#xff0c;确定该条评论中讨…

SpringBoot 线程池 配置使用详解

一、核心特性 Springboot 集成 支持 Async 注解&#xff0c;简化异步方法调用。 参数可配置化 核心线程数、最大线程数、队列容量、拒绝策略等均可通过配置调整。 生命周期管理 实现 Lifecycle 接口&#xff0c;支持线程池的启动和关闭&#xff08;如应用关闭时优雅终止任务…