quantization.md 7.03 KB
Newer Older
helloyongyang's avatar
helloyongyang committed
1
# 模型量化
2

gushiqiao's avatar
gushiqiao committed
3
LightX2V支持对`Dit`中的线性层进行量化推理,支持`w8a8-int8``w8a8-fp8``w8a8-fp8block``w8a8-mxfp8``w4a4-nvfp4`的矩阵乘法。同时,LightX2V也支持对T5和CLIP编码器进行量化,以进一步提升推理性能。
4

gushiqiao's avatar
gushiqiao committed
5
## 📊 量化方案概览
6

gushiqiao's avatar
gushiqiao committed
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
### DIT 模型量化

LightX2V支持多种DIT矩阵乘法量化方案,通过配置文件中的`mm_type`参数进行配置:

#### 支持的 mm_type 类型

| mm_type | 权重量化 | 激活量化 | 计算内核 | 适用场景 |
|---------|----------|----------|----------|----------|
| `Default` | 无量化 | 无量化 | PyTorch | 精度优先 |
| `W-fp8-channel-sym-A-fp8-channel-sym-dynamic-Vllm` | FP8 通道对称 | FP8 通道动态对称 | VLLM | H100/A100高性能 |
| `W-int8-channel-sym-A-int8-channel-sym-dynamic-Vllm` | INT8 通道对称 | INT8 通道动态对称 | VLLM | 通用GPU兼容 |
| `W-fp8-channel-sym-A-fp8-channel-sym-dynamic-Q8F` | FP8 通道对称 | FP8 通道动态对称 | Q8F | 高性能推理 |
| `W-int8-channel-sym-A-int8-channel-sym-dynamic-Q8F` | INT8 通道对称 | INT8 通道动态对称 | Q8F | 高性能推理 |
| `W-fp8-block128-sym-A-fp8-channel-group128-sym-dynamic-Deepgemm` | FP8 块对称 | FP8 通道组对称 | DeepGEMM | 大模型优化 |
| `W-fp8-channel-sym-A-fp8-channel-sym-dynamic-Sgl` | FP8 通道对称 | FP8 通道动态对称 | SGL | 流式推理 |

#### 量化方案详细说明

**FP8 量化方案**
- **权重量化**:使用 `torch.float8_e4m3fn` 格式,按通道进行对称量化
- **激活量化**:动态量化,支持 per-token 和 per-channel 模式
- **优势**:在支持 FP8 的 GPU 上提供最佳性能,精度损失最小(通常<1%)
- **适用硬件**:H100、A100、RTX 40系列等支持FP8的GPU

**INT8 量化方案**
- **权重量化**:使用 `torch.int8` 格式,按通道进行对称量化
- **激活量化**:动态量化,支持 per-token 模式
- **优势**:兼容性最好,适用于大多数 GPU 硬件,内存占用减少约50%
- **适用硬件**:所有支持INT8的GPU

**块量化方案**
- **权重量化**:按 128x128 块进行 FP8 量化
- **激活量化**:按通道组(组大小128)进行量化
- **优势**:特别适合大模型,内存效率更高,支持更大的batch size

### T5 编码器量化

T5编码器支持以下量化方案:

#### 支持的 quant_scheme 类型

| quant_scheme | 量化精度 | 计算内核 | 适用场景 |
|--------------|----------|----------|----------|
| `int8` | INT8 | VLLM | 通用GPU |
| `fp8` | FP8 | VLLM | H100/A100 GPU |
| `int8-torchao` | INT8 | TorchAO | 兼容性优先 |
| `int8-q8f` | INT8 | Q8F | 高性能推理 |
| `fp8-q8f` | FP8 | Q8F | 高性能推理 |

#### T5量化特性

- **线性层量化**:量化注意力层和FFN层中的线性变换
- **动态量化**:激活在推理过程中动态量化,无需预计算
- **精度保持**:通过对称量化和缩放因子保持数值精度

### CLIP 编码器量化

CLIP编码器支持与T5相同的量化方案:

#### CLIP量化特性

- **视觉编码器量化**:量化Vision Transformer中的线性层
- **文本编码器量化**:量化文本编码器中的线性层
- **多模态对齐**:保持视觉和文本特征之间的对齐精度

## 🚀 生产量化模型

可通过[LightX2V 官方模型仓库](https://huggingface.co/lightx2v)下载量化模型,具体可参考[模型结构文档](../deploy_guides/model_structure.md)
75

76
使用LightX2V的convert工具,将模型转换成量化模型,参考[文档](https://github.com/ModelTC/lightx2v/tree/main/tools/convert/readme_zh.md)
77

gushiqiao's avatar
gushiqiao committed
78
79
80
## 📥 加载量化模型进行推理

### DIT 模型配置
81

82
将转换后的量化权重的路径,写到[配置文件](https://github.com/ModelTC/lightx2v/blob/main/configs/quantization)中的`dit_quantized_ckpt`中。
83

gushiqiao's avatar
gushiqiao committed
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
```json
{
    "dit_quantized_ckpt": "/path/to/dit_quantized_ckpt",
    "mm_config": {
        "mm_type": "W-fp8-channel-sym-A-fp8-channel-sym-dynamic-Vllm"
    }
}
```

### T5 编码器配置

```json
{
    "t5_quantized": true,
    "t5_quant_scheme": "fp8",
    "t5_quantized_ckpt": "/path/to/t5_quantized_ckpt"
}
```

### CLIP 编码器配置

```json
{
    "clip_quantized": true,
    "clip_quant_scheme": "fp8",
    "clip_quantized_ckpt": "/path/to/clip_quantized_ckpt"
}
```

### 完整配置示例

```json
{
    "dit_quantized_ckpt": "/path/to/dit_quantized_ckpt",
    "mm_config": {
        "mm_type": "W-fp8-channel-sym-A-fp8-channel-sym-dynamic-Vllm"
    },
    "t5_quantized": true,
    "t5_quant_scheme": "fp8",
    "t5_quantized_ckpt": "/path/to/t5_quantized_ckpt",
    "clip_quantized": true,
    "clip_quant_scheme": "fp8",
    "clip_quantized_ckpt": "/path/to/clip_quantized_ckpt"
}
```

通过指定`--config_json`到具体的config文件,即可以加载量化模型进行推理。
131

132
[这里](https://github.com/ModelTC/lightx2v/tree/main/scripts/quantization)有一些运行脚本供使用。
133

gushiqiao's avatar
gushiqiao committed
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
## 💡 量化方案选择建议

### 硬件兼容性

- **H100/A100 GPU/RTX 4090/RTX 4060**:推荐使用 FP8 量化方案
  - DIT: `W-fp8-channel-sym-A-fp8-channel-sym-dynamic-Vllm`
  - T5/CLIP: `fp8`
- **A100/RTX 3090/RTX 3060**:推荐使用 INT8 量化方案
  - DIT: `W-int8-channel-sym-A-int8-channel-sym-dynamic-Vllm`
  - T5/CLIP: `int8`
- **其他 GPU**:根据硬件支持情况选择

### 性能优化

- **内存受限**:选择 INT8 量化方案
- **速度优先**:选择 FP8 量化方案
- **精度要求高**:使用 FP8 或混合精度方案

### 混合量化策略

可以针对不同组件选择不同的量化方案:

```json
{
    "mm_config": {
        "mm_type": "W-fp8-channel-sym-A-fp8-channel-sym-dynamic-Vllm"
    },
    "t5_quantized": true,
    "t5_quant_scheme": "int8",
    "clip_quantized": true,
    "clip_quant_scheme": "fp8"
}
```

## 🔧 高阶量化功能

### 量化算法调优

具体可参考量化工具[LightCompress的文档](https://github.com/ModelTC/llmc/blob/main/docs/zh_cn/source/backend/lightx2v.md)

### 自定义量化内核

LightX2V支持自定义量化内核,可以通过以下方式扩展:

1. **注册新的 mm_type**:在 `mm_weight.py` 中添加新的量化类
2. **实现量化函数**:定义权重和激活的量化方法
3. **集成计算内核**:使用自定义的矩阵乘法实现


## 🚨 重要注意事项

1. **硬件要求**:FP8 量化需要支持 FP8 的 GPU(如 H100、RTX40系)
2. **精度影响**:量化会带来一定的精度损失,需要根据应用场景权衡
3. **模型兼容性**:确保量化模型与推理代码版本兼容
4. **内存管理**:量化模型加载时注意内存使用情况
5. **量化校准**:建议使用代表性数据集进行量化校准以获得最佳效果

## 📚 相关资源
192

gushiqiao's avatar
gushiqiao committed
193
194
195
196
- [量化工具文档](https://github.com/ModelTC/lightx2v/tree/main/tools/convert/readme_zh.md)
- [运行脚本](https://github.com/ModelTC/lightx2v/tree/main/scripts/quantization)
- [配置文件示例](https://github.com/ModelTC/lightx2v/blob/main/configs/quantization)
- [LightCompress 量化文档](https://github.com/ModelTC/llmc/blob/main/docs/zh_cn/source/backend/lightx2v.md)