gpu性能比较
GPU 性能比较
A100/A800/H100/H800/910B/H200/H20/L20/4090比较
|
A800 (PCIe/SXM) |
A100 (PCIe/SXM) |
H800 (PCIe/SXM) |
H100 (PCIe/SXM) |
H200 (PCIe/SXM) |
H20 |
L20 (PCIe) |
GeForce RTX 4090 |
GeForce RTX 5090 |
HGX B300 |
GB300 NVL72 |
HGX B200 |
GB200 NVL72 |
GB200 NVL4 |
| Year |
2022 |
2022 |
2023 |
2024 |
2024 |
2023 |
2023 |
2022 |
2024 |
2025 |
2025 |
2025 |
2025 |
2025 |
| Manufacturing |
7nm |
5nm |
7nm |
5nm |
5nm |
5nm |
5nm |
5nm |
5nm |
5nm |
5nm |
5nm |
5nm |
5nm |
| Architecture |
Ampere |
Ampere |
Hopper (阉割) |
Hopper |
Hopper |
Hopper |
Ada Lovelace |
Ada Lovelace |
40MB |
Blackwell |
Blackwell |
Blackwell |
Blackwell |
Blackwell |
| Max Power |
300/400 W |
300/400 W |
300-350/700W |
350-400/700 W |
600/700W |
400W |
350W |
425W |
575W |
1100 W |
1400 W |
1000W |
1200 W |
1200 W |
| CUDA |
8.0 |
8.0 |
9.0 |
9.0 |
9.0 |
- |
8.9 |
9.0 |
12.0 |
12.0 |
12.0 |
12.0 |
12.0 |
12.0 |
| GPU Mem |
80G HBM2e |
80G HBM2e |
80G HBM3 |
64G/94G/80G HBM3 |
141GB HBM3e |
96G HBM3 |
48G GDDR6 |
24GB GDDR6X |
32 GB GDDR7 |
270 GB HBM3e |
279 GB HBM3E |
Up to 192 GB HBM3e |
186 GB HBM3E |
186 GB HBM3E |
| GPU Mem BW |
2TB/s |
1.9/2TB/s |
2TB/s |
3.9/3.35 TB/s |
4.8 TB/s |
4TB/s |
864GB/s |
1008 GB/s |
1792 GB/s |
7.7 TB/s |
8 TB/s |
7.7 TB/s |
8 TB/s |
8 TB/s |
GPU Interconnect (one-to-one max bw) |
PCIe 4.0:64GB/s NVLink:400GB/s |
PCIe Gen4 64GB/s NVLINK 600GB/s |
NVLink: 400GB/s PCIe 5.0: 128GB/s |
PCIe Gen5 128GB/s NVLINK 600/900GB/s |
PCIe Gen5 128GB/s NVLINK 900 GB/s |
PCIe Gen5 128GB/s NVLINK 900GB/s |
PCIe Gen4 64GB/s |
PCIe 4.0 x16 (单向32 GB/s, 双向64 GB/s) |
- |
“NVLink 5:1.8 TB/s |
PCIe Gen6:256 GB/s” “NVLink 5:1.8 TB/s |
PCIe Gen6:256 GB/s” “NVLink 5:1.8 TB/s |
PCIe Gen5:128 GB/s” “NVLink 5:1.8 TB/s |
PCIe Gen5:128 GB/s” “NVLink 5:1.8 TB/s |
GPU Interconnect (one-to-many total bw) |
2TB/s |
1.9/2TB/s |
2TB/s |
3.9/3.35 TB/s |
4.8 TB/s |
4TB/s |
864GB/s |
1TB/s |
- |
“NVLink 5PCIe Gen6” |
- |
“NVLink 5 PCIe Gen6” |
- |
- |
| FP64 TFLOPS |
19.5 |
19.5 |
51 | 67 |
60 | 67 |
60 | 67 |
44 |
59.8 |
- |
- |
1.2 teraFLOPS |
1.3 TFLOPS |
37 teraFLOPS |
40 TFLOPS |
40 TFLOPS |
| FP32 TFLOPS |
19.5 |
19.5 |
51 | 67 |
60 | 67 |
60 | 67 |
44 |
59.8 |
- |
- |
75 TFLOPS |
80 TFLOPS |
75 TFLOPS |
80 TFLOPS |
80 TFLOPS |
| TF32 TFLOPS |
156 | 312 |
156 | 312 |
756 | 989 |
989 | 853 |
989 | 853 |
74 |
59.8 |
- |
- |
1.1/2.2 petaFLOPS |
2.5 PFLOPS |
1.1/2.2 petaFLOPS |
2.5 PFLOPS |
2.5 PFLOPS |
| BF16 TFLOPS |
156 | 312 |
312 | 624 |
1513 | 1979 |
1671 | 1979 |
1671 | 1979 |
148 | 148 |
119 | 119 |
- |
- |
4.5 PLFOPS |
5 PFLOPS |
4.5 PFLOPS |
5 PFLOPS |
5 PFLOPS |
| FP16 TFLOPS |
156 | 312 |
312 | 624 |
1513 | 1979 |
1671 | 1979 |
1671 | 1979 |
148 | 14 |
119 | 119 |
- |
- |
2.2/4.5 petaFLOPS |
5 PFLOPS |
2.2/4.5 petaFLOPS |
5 PFLOPS |
5 PFLOPS |
| FP8 TFLOPS |
NOT support |
NOT support |
3026 | 3958 |
3341 | 3958 |
3341 | 3958 |
296 | 296 |
- |
- |
- |
4.5/9 petaFLOPS |
10 PFLOPS |
4.5/9 petaFLOPS |
10 PFLOPS |
10 PFLOPS |
| INT8 TOPS |
NOT support |
624 | 1248 |
3026 | 3958 |
3341 | 3958 |
3341 | 3958 |
296 | 296 |
- |
- |
- |
0.15/ 0.30 petaOPS |
330 TOPS |
4.5/9 petaOPS |
10 POPS |
10 POPS |
| FP4 Tensor Core Dense/Sparse |
NOT support |
NOT support |
NOT support |
NOT support |
NOT support |
NOT support |
- |
- |
- |
14 | 18 petaFLOPS |
20 PFLOPS | 15 PFLOPS |
9/18 petaFLOPS |
20 POPS |
20 PFLOPS |
| L1 Cache |
192 KB |
192 KB |
256 KB |
256 KB |
256 KB |
- |
128 KB |
128 KB |
128 KB |
- |
- |
- |
- |
- |
| L2 Cache |
40MB |
80MB |
50MB |
50MB |
50MB |
60MB |
96MB |
72MB |
96MB |
- |
- |
- |
- |
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HGX B300 |
GB300 NVL72 |
HGX B200 |
GB200 NVL72 |
GB200 NVL4 |
GeForce RTX 5090 |
H200 (PCIe/SXM) |
H100 (PCIe/SXM) |
H800 (PCIe/SXM) |
H20 |
L20 (PCIe) |
A800 (PCIe/SXM) |
A100 (PCIe/SXM) |
GeForce RTX 4090 |
| Year |
2025 |
2025 |
2025 |
2025 |
2025 |
2024 |
2024 |
2024 |
2023 |
2023 |
2023 |
2022 |
2022 |
2022 |
| Manufacturing |
5nm |
5nm |
5nm |
5nm |
5nm |
5nm |
5nm |
5nm |
7nm |
5nm |
5nm |
7nm |
5nm |
5nm |
| Architecture |
Blackwell |
Blackwell |
Blackwell |
Blackwell |
Blackwell |
Blackwell |
Hopper |
Hopper |
Hopper (阉割) |
Hopper |
Ada Lovelace |
Ampere |
Ampere |
Ada Lovelace |
| Max Power |
1100 W |
1400 W |
1000W |
1200 W |
1200 W |
575W |
600/700W |
350-400/700 W |
300-350/700W |
400W |
350W |
300/400 W |
300/400 W |
425W |
| CUDA |
12.0 |
12.0 |
12.0 |
12.0 |
12.0 |
12.0 |
9.0 |
9.0 |
9.0 |
- |
8.9 |
8.0 |
8.0 |
9.0 |
| GPU Mem |
270 GB HBM3e |
279 GB HBM3E |
Up to 192 GB HBM3e |
186 GB HBM3E |
186 GB HBM3E |
32 GB GDDR7 |
141GB HBM3e |
64G/94G/80G HBM3 |
80G HBM3 |
96G HBM3 |
48G GDDR6 |
80G HBM2e |
80G HBM2e |
24GB GDDR6X |
| GPU Mem BW |
7.7 TB/s |
8 TB/s |
7.7 TB/s |
8 TB/s |
8 TB/s |
1792 GB/s |
4.8 TB/s |
3.9/3.35 TB/s |
2TB/s |
4TB/s |
864GB/s |
2TB/s |
1.9/2TB/s |
1008 GB/s |
GPU Interconnect (one-to-one max bw) |
NVLink 5:1.8 TB/s PCIe Gen6:256 GB/s |
NVLink 5:1.8 TB/s PCIe Gen6:256 GB/s |
NVLink 5:1.8 TB/s PCIe Gen5:128 GB/s |
NVLink 5:1.8 TB/s PCIe Gen5:128 GB/s |
NVLink 5:1.8 TB/s PCIe Gen5:128 GB/s |
- |
PCIe Gen5 128GB/s NVLINK 900 GB/s |
PCIe Gen5 128GB/s NVLINK 600/900GB/s |
NVLink: 400GB/s PCIe 5.0: 128GB/s |
PCIe Gen5 128GB/s NVLINK 900GB/s |
PCIe Gen4 64GB/s |
PCIe 4.0:64GB/s NVLink:400GB/s |
PCIe Gen4 64GB/s NVLINK 600GB/s |
PCIe 4.0 x16 (单向32 GB/s, 双向64 GB/s) |
GPU Interconnect (one-to-many total bw) |
NVLink 5 PCIe Gen6 |
- |
NVLink 5 PCIe Gen6 |
- |
- |
- |
4.8 TB/s |
3.9/3.35 TB/s |
2TB/s |
4TB/s |
864GB/s |
2TB/s |
1.9/2TB/s |
1TB/s |
| FP64 TFLOPS |
1.2 teraFLOPS |
1.3 TFLOPS |
37 teraFLOPS |
40 TFLOPS |
40 TFLOPS |
- |
60 | 67 |
60 | 67 |
51 | 67 |
44 |
59.8 |
19.5 |
19.5 |
- |
| FP32 TFLOPS |
75 TFLOPS |
80 TFLOPS |
75 TFLOPS |
80 TFLOPS |
80 TFLOPS |
- |
60 | 67 |
60 | 67 |
51 | 67 |
44 |
59.8 |
19.5 |
19.5 |
- |
| TF32 TFLOPS |
1.1/2.2 petaFLOPS |
2.5 PFLOPS |
1.1/2.2 petaFLOPS |
2.5 PFLOPS |
2.5 PFLOPS |
- |
989 | 853 |
989 | 853 |
756 | 989 |
74 |
59.8 |
156 | 312 |
156 | 312 |
- |
| BF16 TFLOPS |
4.5 PLFOPS |
5 PFLOPS |
4.5 PFLOPS |
5 PFLOPS |
5 PFLOPS |
- |
1671 | 1979 |
1671 | 1979 |
1513 | 1979 |
148 | 148 |
119 | 119 |
156 | 312 |
312 | 624 |
- |
| FP16 TFLOPS |
2.2/4.5 petaFLOPS |
5 PFLOPS |
2.2/4.5 petaFLOPS |
5 PFLOPS |
5 PFLOPS |
- |
1671 | 1979 |
1671 | 1979 |
1513 | 1979 |
148 | 14 |
119 | 119 |
156 | 312 |
312 | 624 |
- |
| FP8 TFLOPS |
4.5/9 petaFLOPS |
10 PFLOPS |
4.5/9 petaFLOPS |
10 PFLOPS |
10 PFLOPS |
- |
3341 | 3958 |
3341 | 3958 |
3026 | 3958 |
296 | 296 |
- |
NOT support |
NOT support |
- |
| INT8 TOPS |
0.15/ 0.30 petaOPS |
330 TOPS |
4.5/9 petaOPS |
10 POPS |
10 POPS |
- |
3341 | 3958 |
3341 | 3958 |
3026 | 3958 |
296 | 296 |
- |
NOT support |
624 | 1248 |
- |
| FP4 Tensor Core Dense/Sparse |
14 | 18 petaFLOPS |
20 PFLOPS | 15 PFLOPS |
9/18 petaFLOPS |
20 POPS |
20 PFLOPS |
- |
NOT support |
NOT support |
NOT support |
NOT support |
- |
NOT support |
NOT support |
- |
| L1 Cache |
- |
- |
- |
- |
- |
128 KB |
256 KB |
256 KB |
256 KB |
- |
128 KB |
192 KB |
192 KB |
128 KB |
| L2 Cache |
- |
- |
- |
- |
- |
96MB |
50MB |
50MB |
50MB |
60MB |
96MB |
40MB |
80MB |
72MB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
📅 修正后的显卡规格对比 (2025年到2022年)
|
HGX B300 |
GB300 NVL72 |
HGX B200 |
GB200 NVL72 |
GB200 NVL4 |
GeForce RTX 5090 |
H200 (PCIe/SXM) |
H100 (PCIe/SXM) |
H800 (PCIe/SXM) |
H20 |
L20 (PCIe) |
A800 (PCIe/SXM) |
A100 (PCIe/SXM) |
GeForce RTX 4090 |
| Year |
2025 |
2025 |
2025 |
2025 |
2025 |
2024 |
2024 |
2024 |
2023 |
2023 |
2023 |
2022 |
2022 |
2022 |
| Manufacturing |
5nm |
5nm |
5nm |
5nm |
5nm |
5nm |
5nm |
5nm |
7nm |
5nm |
5nm |
7nm |
5nm |
5nm |
| Architecture |
Blackwell |
Blackwell |
Blackwell |
Blackwell |
Blackwell |
Blackwell |
Hopper |
Hopper |
Hopper (阉割) |
Hopper |
Ada Lovelace |
Ampere |
Ampere |
Ada Lovelace |
| Max Power |
1100 W |
1400 W |
1000W |
1200 W |
1200 W |
575W |
600/700W |
350-400/700 W |
300-350/700W |
400W |
350W |
300/400 W |
300/400 W |
425W |
| CUDA |
12.0 |
12.0 |
12.0 |
12.0 |
12.0 |
12.0 |
9.0 |
9.0 |
9.0 |
- |
8.9 |
8.0 |
8.0 |
9.0 |
| GPU Mem |
270 GB HBM3e |
279 GB HBM3E |
Up to 192 GB HBM3e |
186 GB HBM3E |
186 GB HBM3E |
32 GB GDDR7 |
141GB HBM3e |
64G/94G/80G HBM3 |
80G HBM3 |
96G HBM3 |
48G GDDR6 |
80G HBM2e |
80G HBM2e |
24GB GDDR6X |
| GPU Mem BW |
7.7 TB/s |
8 TB/s |
7.7 TB/s |
8 TB/s |
8 TB/s |
1792 GB/s |
4.8 TB/s |
3.9/3.35 TB/s |
2TB/s |
4TB/s |
864GB/s |
2TB/s |
1.9/2TB/s |
1008 GB/s |
GPU Interconnect (one-to-one max bw) |
NVLink 5:1.8 TB/s PCIe Gen6:256 GB/s |
NVLink 5:1.8 TB/s PCIe Gen6:256 GB/s |
NVLink 5:1.8 TB/s PCIe Gen5:128 GB/s |
NVLink 5:1.8 TB/s PCIe Gen5:128 GB/s |
NVLink 5:1.8 TB/s PCIe Gen5:128 GB/s |
- |
PCIe Gen5 128GB/s NVLINK 900 GB/s |
PCIe Gen5 128GB/s NVLINK 600/900GB/s |
NVLink: 400GB/s PCIe 5.0: 128GB/s |
PCIe Gen5 128GB/s NVLINK 900GB/s |
PCIe Gen4 64GB/s |
PCIe 4.0:64GB/s NVLink:400GB/s |
PCIe Gen4 64GB/s NVLINK 600GB/s |
PCIe 4.0 x16 (单向32 GB/s, 双向64 GB/s) |
GPU Interconnect (one-to-many total bw) |
NVLink 5 PCIe Gen6 |
- |
NVLink 5 PCIe Gen6 |
- |
- |
- |
4.8 TB/s |
3.9/3.35 TB/s |
2TB/s |
4TB/s |
864GB/s |
2TB/s |
1.9/2TB/s |
1TB/s |
| FP64 TFLOPS |
600 TFLOPS (系统) |
2880 TFLOPS (系统) |
37 TFLOPS |
40 TFLOPS |
40 TFLOPS |
- |
67 TFLOPS |
60 TFLOPS |
51 TFLOPS |
44 TFLOPS |
59.8 TFLOPS |
19.5 TFLOPS |
19.5 TFLOPS |
- |
| FP32 TFLOPS |
600 TFLOPS |
5760 TFLOPS |
75 TFLOPS |
80 TFLOPS |
80 TFLOPS |
- |
67 TFLOPS |
60 TFLOPS |
51 TFLOPS |
44 TFLOPS |
59.8 TFLOPS |
19.5 TFLOPS |
19.5 TFLOPS |
- |
| TF32 TFLOPS (稀疏) |
36 PFLOPS |
60 PFLOPS |
18 PFLOPS |
2.5 PFLOPS |
2.5 PFLOPS |
- |
989 TFLOPS |
853 TFLOPS |
989 TFLOPS |
74 TFLOPS |
59.8 TFLOPS |
312 TFLOPS |
312 TFLOPS |
- |
| BF16 TFLOPS (稀疏) |
72 PFLOPS |
120 PFLOPS |
36 PFLOPS |
5 PFLOPS |
5 PFLOPS |
- |
1979 TFLOPS |
1979 TFLOPS |
1979 TFLOPS |
148 TFLOPS |
119 TFLOPS |
312 TFLOPS |
624 TFLOPS |
- |
| FP8 TFLOPS (稀疏) |
144 PFLOPS |
240 PFLOPS |
72 PFLOPS |
10 PFLOPS |
10 PFLOPS |
- |
3958 TFLOPS |
3958 TFLOPS |
3958 TFLOPS |
296 TFLOPS |
- |
NOT support |
NOT support |
- |
| FP4 PFLOPS (稀疏) |
144 PFLOPS |
1440 PFLOPS |
72 PFLOPS |
20 PFLOPS |
20 PFLOPS |
- |
NOT support |
NOT support |
NOT support |
NOT support |
- |
NOT support |
NOT support |
- |
| INT8 TOPS |
2 POPS |
- |
10 POPS |
10 POPS |
10 POPS |
- |
3958 TOPS |
3958 TOPS |
3958 TOPS |
296 TOPS |
- |
NOT support |
1248 TOPS |
- |
| L1 Cache |
- |
- |
- |
- |
- |
128 KB |
256 KB |
256 KB |
256 KB |
- |
128 KB |
192 KB |
192 KB |
128 KB |
| L2 Cache |
- |
- |
- |
- |
- |
96MB |
50MB |
50MB |
50MB |
60MB |
96MB |
40MB |
80MB |
72MB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
备注:
- RTX 5090 架构: 已从 “40MB” 更正为 Blackwell。
- Blackwell 性能: 对 B300/GB200 系列的 TFLOPS/PFLOPS/POPS 单位进行了大幅修正,采用了官方公布的系统级性能数据(如
GB200 NVL72 的性能是 72 个 Blackwell GPU 的总和)。
- H100/H200 性能: 修正了 H200 的 TF32/BF16/FP8 TFLOPS 数据,使其与官方规格保持一致。
先看NVIDIA官网的数据表,比如A100的FP16算力是312 TFLOPS,但这是Tensor Core的稀疏性能。
实际常用的是稠密(Dense)算力,所以A100 80G NVLink的FP16稠密算力是156 TFLOPS单卡,乘以8卡就是1248 TFLOPS,换算成P就是1.25 PFLOPS。这里要注意NVLink对多卡效率的提升,但算力本身是线性叠加的。
$$1 Petaflops = 1,000 Teraflops$$
Flops:是“每秒浮点运算次数”的缩写,是衡量计算机计算能力的基本单位。
Teraflops:代表“每秒一万亿次浮点运算”。
“Tera-” 这个前缀在公制系统中代表 10¹²,即 1,000,000,000,000(一万亿)。
所以:
$$1 Teraflops = 10¹² Flops$$
Petaflops:代表“每秒一千万亿次浮点运算”。
“Peta-” 这个前缀代表 10¹⁵,即 1,000,000,000,000,000(一千万亿)。
所以;
$$1 Petaflops = 10¹⁵ Flops$$
深度学习中的精度格式一览
不同的精度格式在位宽、内存占用、计算速度和数值精度方面各有特点。选择合适的格式是优化模型性能和效率的关键。
浮点数格式 (Floating Point):
| 格式 |
全称 (Bits) |
结构 (符号/指数/尾数) |
内存 (Bytes) |
深度学习中的角色 |
| FP64 |
双精度浮点数 (64) |
1 / 11 / 52 |
8 |
科学计算/测试基准:提供最高精度,主要用于科学计算或作为模型训练的精度黄金标准。 |
| FP32 |
单精度浮点数 (32) |
1 / 8 / 23 |
4 |
标准训练/推理格式:传统上用于训练和推理的标准格式,提供足够的动态范围和动态范围。 |
| TF32 |
TensorFloat-32 (19) |
1 / 8 / 10 |
4 |
NVIDIA 加速训练格式:仅在 NVIDIA Tensor Core 上可用,它拥有 FP32 的动态范围(8位指数)和 FP16 的精度(10位尾数),加速训练同时保持接近 FP32 的效果。 |
| FP16 |
半精度浮点数 (16) |
1 / 5 / 10 |
2 |
通用混合精度格式:显著节省内存并加速计算。在混合精度训练和推理中广泛使用。 |
| BF16 |
Brain Floating Point (16) |
1 / 8 / 7 |
2 |
友好混合精度格式:与 FP16 共用 16 位,但具有与 FP32 相同的 8 位指数,因此动态范围更大,更不易溢出。在 Google TPU 和部分 NVIDIA 硬件上流行。 |
| FP8 |
8 位浮点数 (8) |
多种实体 (如 E5M2, E4M3) |
1 |
超低精度推理:进一步降低内存和延迟,通常需要专用的硬件支持(如最新的 NVIDIA Tensor Core)。 |
| NVFP4 |
NVIDIA 4 位浮点 (4) |
NVIDIA 专有 |
0.5 |
极限压缩推理:专为 NVIDIA 平台设计,用于在极低带宽下优化 LLM 推理性能。 |
|
|
|
|
|
|
整数格式 (Integer):
| 格式 |
位数 (Bits) |
内存 (Bytes) |
深度学习中的角色 |
常用配置 |
| INT8 |
8 位整数 (8) |
1 |
通用量化推理:业界标准的量化格式,通过将 FP32/FP16 数据映射到 8 位整数,实现推理速度和内存的显著优化,精度损失相对可控。 |
W8A8 (权重和激活值都是 INT8) |
| INT4 |
4 位整数 (4) |
0.5 |
极限量化推理:进一步将模型大小减半,常用于大型 LLM 的部署(如 Llama, Mistral),以解决内存限制问题。 |
W4A16 (权重 INT4,激活值 FP16/BF16) |
|
|
|
|
|
|
总结
| 优化目标 |
推荐格式 |
优点 |
缺点/要求 |
| 最大精度 |
FP64, FP32 |
最高的数值稳定性和动态范围。 |
内存占用高,计算速度慢。 |
| 加速训练 |
TF32, BF16 |
在保持动态范围的同时加速训练。 |
需要特定硬件(如 Tensor Core, TPU)。 |
| 通用混合精度 |
FP16, BF16 |
平衡了速度、内存和精度,是目前最主流的训练/推理格式。 |
FP16 动态范围较小,可能需要做操作。 |
| 内存/速度优化 |
INT8, FP8 |
内存占用极低,计算吞吐量最高。 |
精度损失风险增加,需要进行量化操作,可能需要专用硬件。 |
|
|
|
|
|
结构 (符号/指数/尾数) 是什么意思?
一个浮点数 $$V$$ 可以通过以下公式计算出来:
$$V = (-1)^S \times (1 + M) \times 2^{(E - \text{Bias})}$$
$$S$$ : 符号位 (0 或 1)
$$M$$ : 尾数域的值
$$E$$ : 指数域的编码值
$$\text{Bias}$$ : 固定的偏移量(如 FP32 为 127,FP16 为 15)
这种结构决定了浮点数的两个关键特性:
- 动态范围(Exponent 决定): 指数位越多,能表示的数值范围越大(从极小数到极大数),不易溢出。
- 精度(Mantissa 决定): 尾数位越多,能表示的有效数字越精确,舍入误差越小。
在 LLM 量化中,我们就是通过减少这些位宽(特别是指数和尾数)来达到压缩内存的目的,但必须使用像 AWQ 这样的算法来最小化随之而来的精度损失。
📝 以 FP16 为例(半精度浮点数)
FP16 共有 16 位,结构划分如下:
- 优点: 相比 FP32 占用一半内存,在深度学习中能显著加速运算。
- 权衡: 只有 5 位指数(动态范围较小)和 10 位尾数(精度较低),容易出现溢出(Overflow)或舍入误差。
📝 以 FP32 为例(单精度浮点数)
FP32 共有 32 位,结构划分如下:
- 优点: 动态范围大(8 位指数),精度高(23 位尾数)。
- 权衡: 内存占用较大(4 字节)。
低精度数据格式
好的,我们来详细解析一下您提到的这几种重要的低精度数据格式,它们是当前加速大型语言模型 (LLM) 推理的核心技术。这些格式主要体现了在浮点数和整数这两大类中,如何在位宽上进行精妙的取舍。
浮点数:FP8 (E4M3 和 E5M2)
FP8(8 位浮点数)格式仅使用 8 位来存储一个数值,它的关键在于这 8 位如何在指数 (E) 和尾数 (M) 之间进行分配,从而产生不同的权衡。
A. FP8 格式结构解析
| 字段 |
符号位 (S) |
指数域 (E) |
尾数域 (M) |
总位数 |
| E4M3 |
1 |
4 |
3 |
8 |
| E5M2 |
1 |
5 |
2 |
8 |
|
|
|
|
|
|
B. E4M3 (4 指数位, 3 尾数位)
- 特性: 动态范围优先。
- 指数 (E=4): 4 位指数,动态范围比 FP16 (5 位指数) 略小,但比 E5M2 小。
- 尾数 (M=3): 只有 3 位尾数,精度非常低,舍入误差较大。
- 适用场景:
- 适用于模型权重。权重相对静态,对精度要求略低,但需要一定的动态范围。
- 主要用于Transformer 模型的激活值,尤其是需要更大动态范围来处理激活值张量中可能出现的极端值(Outliers)时。
C. E5M2 (5 指数位, 2 尾数位)
- 特性: 超高动态范围优先。
- 指数 (E=5): 5 位指数,与 FP16 相同。这意味着它拥有与 FP16 一样的动态范围,能表示的数值范围极大(不易溢出)。
- 尾数 (M=2): 只有 2 位尾数,精度极低,是所有常用浮点格式中精度最低的之一。
- 适用场景:
- 适用于模型权重。由于其超大的动态范围,它可以更好地适应权重分布中可能出现的极端值,从而减少量化误差。
- 常用于激活值,因为激活值在计算过程中波动较大,需要高动态范围来防止数值溢出。
总结: 在深度学习中,E4M3 和 E5M2 通常配合使用,一个用于权重,一个用于激活值,以在 8 位的限制下平衡动态范围 (E) 和精度 (M)。
整数量化:INT8 和 INT4
整数格式(INT8/INT4)通过量化 (Quantization) 将浮点数(如 FP16/FP32)线性映射到整数值,实现极高的内存压缩和计算效率。
A. INT8 (W8A8) 精度
- 含义: 8 位整数 (INT8),是业界标准的量化格式。
- W8A8 结构:
- W8 (Weight 8-bit): 模型权重被量化为 INT8。
- A8 (Activation 8-bit): 模型激活值和计算也使用 INT8 格式。
- 如何实现量化?
- 量化过程需要确定一个比例因子 (Scale) 和一个零点 (Zero-point),将原始浮点数范围 $[V_{\min}, V_{\max}]$ 映射到 INT8 范围 $[-128, 127]$。
- 优势:
- 极致的计算效率: 许多现代硬件(CPU/GPU)都有高度优化的 INT8 矩阵乘法单元,能实现最高的每秒操作数 (TOPS)。
- 内存减半: 相较于 FP16 (2 字节),INT8 (1 字节) 内存占用减半。
- 挑战:
- 精度损失: INT8 只有 256 个可能的离散值,量化误差比浮点格式更大,因此需要复杂的量化算法来保持模型精度。
B. INT4 (W4A16) 精度
- 含义: 4 位整数 (INT4),专用于大型 LLM 的极限内存压缩。
- W4A16 结构:
- W4 (Weight 4-bit): 模型权重被量化为 INT4。
- A16 (Activation 16-bit): 模型激活值和计算仍使用 FP16 格式(或 BF16)。
- 优势:
- 极致的内存压缩: 相比 FP16,模型权重体积减少 4 倍(从 2 字节降到 0.5 字节),对于 GigaByte 级别的 LLM 至关重要。
- 高性能计算: 虽然激活值仍是 FP16,但计算过程通过反量化或特殊硬件支持,将 INT4 权重与 FP16 激活值结合,实现高效运算。
- 挑战:
- 精度保持难度高: 4 位只有 16 个可能的离散值,量化精度损失风险最大。因此,必须使用像 AWQ (Activation-aware Weight Quantization) 这样的先进算法来精心挑选需要量化的权重,以保持模型性能。
📊 总结对比表
| 格式 |
类型 |
位宽 (W/A) |
内存 (per value) |
主要优势 |
主要用途 |
| FP8 |
E4M3 |
浮点 8 (W8/A8) |
1 Byte |
动态范围,用于浮点计算 |
权重或激活值 |
| FP8 |
E5M2 |
浮点 8 (W8/A8) |
1 Byte |
超高动态范围,极少溢出 |
权重或激活值 |
| INT8 |
W8A8 |
整数 8 (W8/A8) |
1 Byte |
极高计算吞吐量 (TOPS) |
图像识别等非 LLM 场景 |
|
|
|
|
|
|
|
这些低精度格式的选择和配置,是 LLM 部署工程师们在硬件特性、内存预算和模型精度之间进行复杂权衡的结果。
量化算法
AWQ 算法 (Activation-aware Weight Quantization)
AWQ (Activation-aware Weight Quantization) 算法是专门针对 W4A16(权重 INT4,激活值 FP16) 这种超低精度量化配置设计的,其核心目标是在极度压缩模型权重的同时,最大限度地保护模型的精度。
AWQ 提升性能的关键不在于计算速度本身(计算速度主要由 INT4 格式和硬件决定),而在于它能让模型在 INT4 下保持足够高的精度,从而使得这种高效的低精度部署在实际应用中可行。
- 含义: 是一种感知激活值的权重(量化)算法。
- 作用: 在将权重从高精度(如 FP16)量化到超低精度(如 INT4)时,AWQ 算法会考虑激活值的重要性。
- 原理: 它不是平均地量化所有权重,而是跳过那些对最终输出影响最重要的权重(即与较大的激活值相乘的权重),确保它们能保持较高的精度。这最小化了量化对模型推理精度的负面影响,使得模型在 INT4 下仍能保持接近 FP16 的性能。
核心洞察:激活值的重要性
传统的量化方法(如 PTQ,Post-Training Quantization)通常只关注权重本身的分布,试图将它们均匀地映射到 INT4 范围。
AWQ 的核心洞察是:量化误差的影响并非均匀分布,而是取决于它与激活值的乘积。
在一个矩阵乘法 Y=W⋅X 中:
- W 是权重矩阵 (Weight)。
- X 是激活值矩阵 (Activation)。
如果一个权重 $w_i$ 虽然很大,但与之相乘的激活值 $x_i$ 很小,那么 $w_i$ 的量化误差对最终结果 $Y$ 的影响很小。
相反,如果一个权重 $w_j$ 无论大小,但与之相乘的激活值 $x_j$ 很大(即 $x_j$ 是一个“重要”的激活通道),那么 $w_j$ 的微小量化误差经过放大后,会对最终结果造成巨大的精度损失。
AWQ 的机制:保护重要的权重
基于上述洞察,AWQ 算法执行了一个“敏感性分析”步骤,来决定哪些权重在量化过程中需要被“保护”起来。
步骤一:敏感性评分 (Salience Score)
AWQ 首先计算每个输出通道的权重敏感性评分。这个评分基于激活值的统计信息(例如,激活值的最大绝对值)。
$$Score_i=max(∣X_{channel,i}∣)$$
$$Score_i$$ 代表了第 $$i$$ 个通道的激活值的重要性。
步骤二:权重缩放(保护高敏感通道)
在将权重 W 量化到 INT4 之前,AWQ 会对权重应用一个通道级的缩放因子 (Scaling Factor s)。
AWQ 的目标是给那些具有高敏感性评分(即与大激活值相乘)的权重施加更大的缩放因子 s。
新的权重=W/s
施加缩放因子后,这些权重在量化到 INT4 范围时:
- 它们在量化后的 相对误差会更小。
- 它们有效地被“隔离”了量化对激活值的影响,使得它们能够更精确地表示。
步骤三:四舍五入到 INT4
最终,缩放后的权重被量化到 INT4。在推理时,这些 INT4 权重会通过反量化和 FP16 激活值进行计算。
AWQ 如何专门提升 INT4 (W4A16) 的性能?
AWQ 的设计与 W4A16 配置完美契合,体现在两个方面:
A. 专门解决 INT4 的极限精度问题
INT4 (4 位) 只有 16 个离散值,量化是极其粗糙的。任何微小的量化误差都可能被放大,导致模型性能崩溃。AWQ 通过有针对性地保护最重要的 1% 权重,成功地避免了这种精度崩溃,使得 LLM 在 4 位下依然能保持接近 FP16 的表现。
B. 充分利用 W4A16 的计算结构
在 W4A16 中,激活值保持在 FP16,这为 AWQ 提供了便利。AWQ 可以利用高精度的 FP16 激活值来精确计算敏感性评分,指导权重缩放,从而得到一个对精度最友好的 INT4 权重集。如果激活值也是低精度(如 W8A8),这种精确的敏感性分析将难以进行。
总结
AWQ 算法通过引入激活值感知的量化策略,确保了最关键的权重能够保持最高的相对精度。这使得极度节省内存的 INT4 (W4A16) 量化配置在 LLM 上具有实用性,从而间接实现了“在可接受精度损失下,最高效的推理性能”。
GPTQ (GPT Quantization)
GPTQ 是一种离线(Post-Training)量化方法,它通过对模型权重进行逐层优化,以最小化量化带来的精度损失。
核心思想:逐层最小化误差
GPTQ 的核心是利用一种称为 Optimal Brain Damage (OBD) 或 二阶信息 的概念来决定如何量化权重。
- 目标: 对于模型中的每一层,找到最佳的 INT4 权重,使得量化后的输出尽可能接近原始 FP16 模型的输出。
- 方法: 它不是简单地四舍五入,而是使用一种最小二乘法(Least Squares)的优化过程。在量化每一层时,它会使用一小部分校准数据(calibration data,通常几百个样本)通过最小化均方误差 (MSE) 来确定最优的量化值。
- 操作: 逐列、逐层进行优化,并使用 Hessian 矩阵的逆(或近似)来计算量化误差对其他未量化权重的影响,并进行补偿。
优势与劣势
| 类别 |
优势 |
劣势 |
| 优势 |
* 精度高: 通常是所有离线 4-bit 量化方法中精度表现最好的之一。* 无需训练: 属于离线量化,无需反向传播或大量训练数据。 |
* 量化速度慢: 量化过程需要进行复杂的二阶优化,量化时间较长。* 占用内存高: 量化过程中需要存储大量中间数据(如 Hessian 矩阵),对 CPU/GPU 内存要求较高。 |
|
|
|
|
SmoothQuant
SmoothQuant 是一种混合量化策略,它通过平滑激活值的分布,使激活值和权重都更容易被量化到低位宽(通常是 W8A8 或 W4A8)。
核心思想:平衡权重和激活值的难度
在大型 LLM 中,激活值的分布往往比权重的分布更难处理,因为激活值中经常出现“离群值”(Outliers,少数几个极大的值),这使得 INT8/INT4 量化难以准确覆盖整个动态范围。
SmoothQuant 的策略是:将激活值中的量化难度“转移”到权重上。
- 平滑操作: 通过引入一个 平滑因子 s,将激活值 X 的量化难度转移给权重 W:
- W′=W⋅s和X′=X/s
- 结果: 经过 s 因子操作后:
- 新的激活值 X′ 的分布变得更平坦,更容易进行低位宽(如 INT8)量化。
- 新的权重 W′ 的分布变得更加极端(包含更大的数值)。
- 量化: 由于权重通常是在离线量化中处理一次,可以容忍更高的量化难度。因此,平滑后的激活值 X′使用 INT8/INT4 量化,平滑后的权重 W′ 也使用 INT8/INT4 量化。
| 类别 |
优势 |
劣势 |
| 优势 |
* W8A8/W4A8 可行性: 解决了激活值难以量化的问题,使得全 INT8 (W8A8) 或 W4A8 等配置在 LLM 上可行。* 推理速度快: 权重和激活值都是低位宽,推理计算效率极高。 |
* 需要预处理: 需要在推理前对权重进行一次性平滑处理。* 对权重增加难度: 虽然解决了激活值的难度,但将难度转移给了权重,可能需要更精细的权重量化。 |
|
|
|
|
三种量化方法的区别总结
| 特征 |
AWQ (Activation-aware Weight Quantization) |
GPTQ (GPT Quantization) SmoothQuant |
| 主要目标 |
W4A16 保持高精度 |
W4A16 保持高精度 |
| 核心机制 |
保护权重:基于激活值的重要性(最大值),保护高敏感度的权重。 |
最小化误差:通过二阶优化逐层计算和补偿量化误差。 |
| 处理对象 |
仅缩放权重。利用激活值信息指导权重缩放。 |
仅优化权重。优化权重使输出误差最小。 |
| 量化速度 |
快。量化过程简单高效。 |
慢。涉及复杂的二阶优化。 |
| 适用场景 |
内存受限,需要极致压缩,同时保持推理速度(W4A16)。 |
需要最高精度保证,且能容忍较慢的离线量化时间。 |
|
|
|
|
实际应用中的选择:
- 如果您需要最低的内存占用,并且能接受 W4A16(权重 4 位,激活值 16 位)的混合计算模式,并且追求最快的量化速度,请选择 AWQ。
- 如果您对模型的推理精度要求极高,并且可以接受较慢的离线量化时间,请选择 GPTQ。
- 如果您想让权重和激活值都实现低位宽(如 W8A8),以最大化硬件的 INT8 计算吞吐量,请选择 SmoothQuant。
为什么需要混合精度?(FP8/NVFP4 vs. FP16)
在 LLM 推理中,该 SDK 采用了一种混合精度策略:
权重和 GEMM 操作采用 FP8 或 NVFP4 格式,而 LayerNorm、KV 缓存、LM 头部和注意力层则保持 FP16 格式。
这样做是为了在性能和精度之间取得最佳平衡:
采用低精度(FP8/NVFP4)的部分:
- 权重 (Weights): 模型权重是模型中数量最大的部分,压缩它们可以显著节省内存。
- GEMM 操作 (General Matrix Multiply): 这是 LLM 推理过程中计算量最大、耗时最久的部分(主要是矩阵乘法)。使用 FP8/NVFP4 可以在支持的硬件上调用高度优化的低精度计算核,从而大幅提升推理速度(内核性能)。
保持高精度(FP16)的部分:
- LayerNorm (层归一化): 这是一个稳定性要求很高的操作。如果在这里使用过低的精度,很可能会导致数值溢出或欠流,从而使模型输出迅速崩溃或失去有效性。
- KV 缓存 (Key/Value Cache): KV 缓存存储了中间计算结果,会重复多次被访问和使用。如果精度太低,误差会随着序列长度的增加而累积,最终影响生成文本的质量。
- LM 头部 (Language Model Head) 和注意力层 (Attention Layers): 这些是决定最终输出结果的关键部分。保持 FP16 能够保证最终的 Logits 具有足够的数值精度,从而确保模型生成的结果是准确的。
简而言之,计算量大且对精度不太敏感的部分(如 GEMM)使用低精度来加速;而对数值稳定性或最终输出质量至关重要的部分(如 LayerNorm、KV 缓存)则保持 FP16 来保证准确性。