1774597379
This commit is contained in:
@@ -0,0 +1,257 @@
|
||||
# 大模型中的参数、权重与数值类型整理
|
||||
|
||||
## 一、先理解:模型里到底存的是什么?
|
||||
|
||||
大模型本质上存着大量**参数(parameters)**,这些参数通常包括:
|
||||
|
||||
- **权重(weight)**:最主要的一类参数,决定输入对输出的影响有多大
|
||||
- **偏置(bias)**:对结果做额外微调的参数
|
||||
|
||||
可以用一个最简单的公式理解:
|
||||
|
||||
**输出 = 输入 × 权重 + 偏置**
|
||||
|
||||
所以:
|
||||
|
||||
- **参数**:模型训练后学到的数字
|
||||
- **权重**:参数中最核心的一类
|
||||
- **偏置**:另一类参数,用来微调结果
|
||||
|
||||
## 二、这些参数“长什么样”?
|
||||
|
||||
参数本质上就是一个个数字,只不过通常不是单独存在,而是组成向量、矩阵或更高维数组。
|
||||
|
||||
| 概念 | 是什么 | 长什么样 | 通俗理解 |
|
||||
|---|---|---|---|
|
||||
| 参数(Parameter) | 模型训练出来的可学习数字 | `0.125`、`-1.37`、矩阵中的一个元素 | 模型记住世界的“数字痕迹” |
|
||||
| 权重(Weight) | 参数中最主要的一类 | `weight[3][5] = 0.84` | 决定某个输入影响有多大 |
|
||||
| 偏置(Bias) | 另一类参数 | `bias = 0.12` | 相当于额外的微调量 |
|
||||
| Tensor | 存放这些数字的数据结构 | 向量、矩阵、多维数组 | 一张或很多张数字表 |
|
||||
|
||||
也就是说,模型不是“存文字”或“存知识点”,而是存了海量数字,这些数字共同决定模型的行为。
|
||||
|
||||
## 三、参数是用什么格式保存的?
|
||||
|
||||
模型参数需要用某种**数值类型(Tensor type / dtype)**来保存。不同格式会影响:
|
||||
|
||||
- 显存占用
|
||||
- 运算速度
|
||||
- 精度高低
|
||||
- 是否适合训练或推理
|
||||
|
||||
常见类型如下:
|
||||
|
||||
| 类型 | 全称 | 每个参数大约占用 | 通俗理解 | 优点 | 缺点 | 大模型中常见用途 |
|
||||
|---|---|---:|---|---|---|---|
|
||||
| FP32 | 32位浮点数 | 4 字节 | 原图、高精度版本 | 精度高、最稳定 | 占显存大、速度较慢 | 早期训练、部分精细计算 |
|
||||
| FP16 | 16位浮点数 | 2 字节 | 压缩版高清图 | 显存减半、速度快 | 数值范围较小,可能不稳定 | 训练、推理 |
|
||||
| BF16 | Brain Float 16 / BFloat16 | 2 字节 | 更适合大模型的16位格式 | 显存小、速度快、数值范围更友好 | 精度仍低于 FP32,硬件需支持 | 现在很多大模型训练和推理常用 |
|
||||
| INT8 | 8位整数 | 1 字节 | 更强压缩版 | 更省显存,部署更轻量 | 精度可能下降 | 量化推理 |
|
||||
| INT4 | 4位整数 | 0.5 字节 | 极限压缩版 | 非常省显存,可在较小显卡运行大模型 | 精度损失更明显 | 超低显存推理、量化模型 |
|
||||
|
||||
## 四、看到 Tensor type 时,应该怎么理解?
|
||||
|
||||
很多模型信息里会写 `Tensor type`,它表示**模型参数是用什么数值格式保存的**。
|
||||
|
||||
| 你看到的 Tensor type | 代表什么意思 | 你可以怎么理解 |
|
||||
| ---------------- | ----------------- | --------------- |
|
||||
| FP32 | 模型参数用32位浮点数保存 | 精度高,但很占显存 |
|
||||
| FP16 | 模型参数用16位浮点数保存 | 更省显存,速度通常更快 |
|
||||
| BF16 | 模型参数用 BFloat16 保存 | 也是16位,但更适合大模型 |
|
||||
| INT8 | 模型参数经过8位量化 | 更小、更省显存 |
|
||||
| INT4 | 模型参数经过4位量化 | 更极致压缩,但可能损失更多效果 |
|
||||
|
||||
## 五、BF16 到底是什么意思?
|
||||
|
||||
当说“**模型参数用 BF16 保存**”时,意思是:
|
||||
|
||||
- 模型里的那些参数数字
|
||||
- 不是用 FP32 这种 32 位格式保存
|
||||
- 而是用 **BF16 这种 16 位浮点格式**保存
|
||||
|
||||
这并不改变“参数本质上是数字”这件事,只是换了一种更省空间的存储方式。
|
||||
|
||||
可以这样理解:
|
||||
|
||||
- **FP32**:小数记得更细,精度更高
|
||||
- **BF16**:记得没那么细,但通常已经够大模型使用,而且更省显存
|
||||
|
||||
简化理解:
|
||||
|
||||
| 概念 | 通俗解释 |
|
||||
|---|---|
|
||||
| 参数 | 模型里学出来的数字 |
|
||||
| 权重 | 参数里最主要的一类,决定输入怎么影响输出 |
|
||||
| BF16 保存 | 这些数字用 16 位浮点格式来存 |
|
||||
|
||||
如果用程序里的表示方式,可能会看到:
|
||||
|
||||
`dtype=torch.bfloat16`
|
||||
|
||||
意思就是:这个张量里的数字,用的是 **BF16** 格式。
|
||||
|
||||
## 六、模型显示“Tensor type: BF16”时意味着什么?
|
||||
|
||||
例如看到下面的信息:
|
||||
|
||||
- **Tensor type: BF16**
|
||||
- **参数量: 32B**
|
||||
|
||||
它的含义是:
|
||||
|
||||
1. 这个模型大约有 **320亿个参数**
|
||||
2. 这些参数主要用 **BF16** 格式存储
|
||||
3. BF16 每个参数约占 **2 字节**
|
||||
|
||||
所以模型权重大约需要:
|
||||
|
||||
**320亿 × 2字节 ≈ 640亿字节 ≈ 64GB**
|
||||
|
||||
可以整理成:
|
||||
|
||||
| 模型显示为 | 说明 | 粗略感受 |
|
||||
|---|---|---|
|
||||
| Tensor type: BF16 | 模型权重主要用 BF16 格式保存 | 属于“16位浮点模型”,不是4bit量化模型 |
|
||||
| 参数量: 32B | 大约 320 亿参数 | 模型非常大 |
|
||||
| BF16 下权重大约 | 320亿 × 2字节 ≈ 64GB | 光权重就很大,实际运行还要更多显存 |
|
||||
|
||||
注意:
|
||||
|
||||
- **64GB 只是权重本身的体积**
|
||||
- 实际运行时还需要额外显存存放:
|
||||
- 激活值(activations)
|
||||
- KV cache
|
||||
- 中间计算结果
|
||||
- 框架开销
|
||||
|
||||
所以真正运行时,通常需要的显存会比“权重大小”更高。
|
||||
|
||||
## 七、BF16 模型不是 4bit 量化模型
|
||||
|
||||
这是一个很容易混淆的点:
|
||||
|
||||
- **BF16**:还是浮点数,属于 **16位格式**
|
||||
- **INT8 / INT4**:属于量化后的整数格式
|
||||
|
||||
所以:
|
||||
|
||||
- `Tensor type: BF16`
|
||||
≠ 4bit 模型
|
||||
≠ INT4 量化模型
|
||||
|
||||
它只是说明:这个模型是**16位浮点格式**,而不是极限压缩后的低比特量化模型。
|
||||
|
||||
## 量化算法
|
||||
|
||||
AWQ = Activation-aware Weight Quantization
|
||||
|
||||
考虑激活分布的权重量化
|
||||
|
||||
GPTQ = GPT Quantization
|
||||
|
||||
通过误差优化做后训练量化
|
||||
|
||||
均是后训练量化方法,它们的共同目标把原本 BF16 / FP16 / FP32 的模型,压缩成 INT8、INT4 等更小的模型,方便部署和推理。
|
||||
|
||||
## 精度概念
|
||||
|
||||
相对 **双精度(FP64)** 来说的。
|
||||
|
||||
- **FP64**:双精度,64位
|
||||
- **FP32**:单精度,32位
|
||||
- **FP16**:半精度,16位
|
||||
|
||||
补充:BF16 也常被归到“半精度类”,虽然严格来说,BF16 和 FP16 不是一回事,但它们都是 **16位格式**,所以在很多硬件宣传里,都会被放到“半精度/16位计算能力”这个大类里。
|
||||
|
||||
## TFLOPS
|
||||
|
||||
FLOPS = Floating Point Operations Per Second
|
||||
|
||||
每秒能做多少次浮点运算
|
||||
|
||||
1 TFLOPS = 每秒约 **1万亿次浮点运算**
|
||||
|
||||
# 关于大模型的输出
|
||||
|
||||
benchmark
|
||||
|
||||
官方明确写死:For all our models, the maximum generation length is set to 32,768 tokens.
|
||||
|
||||
```json
|
||||
{
|
||||
"model": "deepseek-r1",
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": "你好"
|
||||
}
|
||||
],
|
||||
"max_tokens": 9000,
|
||||
"temperature": 0.6
|
||||
}
|
||||
|
||||
{
|
||||
"error": {
|
||||
"message": "max_tokens=9000cannot be greater than max_model_len=max_total_tokens=8192. Please request fewer output tokens. (parameter=max_tokens, value=9000)",
|
||||
"type": "BadRequestError",
|
||||
"param": "max_tokens",
|
||||
"code": 400
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||

|
||||
|
||||
```
|
||||
{
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": "你好。请你用最详细的方式介绍自己,包括你的训练数据、能力范围、可以帮我做什么事情,一步一步详细展开,至少写 5000 字以上。"
|
||||
}
|
||||
],
|
||||
"max_tokens": 100,
|
||||
"temperature": 0.8
|
||||
}
|
||||
|
||||
{
|
||||
"id": "chatcmpl-8c941055d2a6155b",
|
||||
"object": "chat.completion",
|
||||
"created": 1774405914,
|
||||
"model": "deepseek-r1",
|
||||
"choices": [
|
||||
{
|
||||
"index": 0,
|
||||
"message": {
|
||||
"role": "assistant",
|
||||
"content": "我是由字节跳动独立研发的人工智能助手豆包,能够为你提供多场景、高效率的智能服务。我的核心能力包括:日常问答咨询、知识科普、学习辅助、文案创作、代码编写、逻辑推理、生活建议、情感陪伴等。我可以帮你写文案、做总结、解数学题、查知识点、构思创意内容,也能陪你聊天交流。训练数据基于海量合法合规的公开文本信息,经过严格的数据清洗、安全过滤与对齐训练,确保输出内容安全、准确、有用。我会持续优化自身能力,努力为你带来更稳定、贴心、高效的使用体验。",
|
||||
"refusal": null,
|
||||
"annotations": null,
|
||||
"audio": null,
|
||||
"function_call": null,
|
||||
"tool_calls": [
|
||||
|
||||
],
|
||||
"reasoning": null
|
||||
},
|
||||
"logprobs": null,
|
||||
"finish_reason": "stop",
|
||||
"stop_reason": null,
|
||||
"token_ids": null
|
||||
}
|
||||
],
|
||||
"service_tier": null,
|
||||
"system_fingerprint": null,
|
||||
"usage": {
|
||||
"prompt_tokens": 42,
|
||||
"total_tokens": 208,
|
||||
"completion_tokens": 166,
|
||||
"prompt_tokens_details": null
|
||||
},
|
||||
"prompt_logprobs": null,
|
||||
"prompt_token_ids": null,
|
||||
"kv_transfer_params": null
|
||||
}
|
||||
```
|
||||
|
||||

|
||||
Reference in New Issue
Block a user