算力单位

正确理解和使用算力单位是评估AI基础设施的基础。 本文将详细介绍各种算力度量单位的定义、换算关系和应用场景。

预计阅读时间:45分钟·难度:初级·更新时间:2024年4月

算力单位概述

AI算力的度量涉及多个维度和单位,不同的场景使用不同的指标。 理解这些单位之间的关系对于准确评估和比较算力至关重要。

常见算力单位分类

算力单位分类体系:
├── 峰值计算能力
│   ├── FLOPs (浮点运算次数)
│   │   └── 衡量浮点计算能力
│   ├── TOPS (万亿次操作)
│   │   └── 常用于整数运算
│   └── IPS (指令/秒)
│       └── 通用处理器指标
│
├── 实际应用性能
│   ├── Tokens/s
│   │   └── 大模型生成速度
│   ├── Images/s
│   │   └── 图像生成速度
│   └── Inferences/s
│       └── 推理吞吐量
│
├── 内存性能
│   ├── 带宽 (GB/s)
│   │   └── 数据传输速率
│   └── 容量 (GB)
│       └── 可用存储空间
│
└── 通信性能
    ├── 带宽 (Gb/s)
    │   └── 网络传输速率
    └── 延迟 (μs)
        └── 通信时延

FLOPs详解

定义与计算

FLOPs定义

FLOPs (Floating Point Operations):
┌──────────────────────────────────────────┐
│ 定义:每秒执行的浮点运算次数             │
│                                          │
│ 常用单位:                                │
│ ├── MFLOPs = 10^6 FLOPs (百万)           │
│ ├── GFLOPs = 10^9 FLOPs (十亿)           │
│ ├── TFLOPs = 10^12 FLOPs (万亿)          │
│ ├── PFLOPs = 10^15 FLOPs (千万亿)        │
│ └── EFLOPs = 10^18 FLOPs (百亿亿)        │
└──────────────────────────────────────────┘

计算示例:
├── 矩阵乘法 A(m×k) × B(k×n)
│   └── FLOPs = 2 × m × k × n
│   └── 每个输出元素需要k次乘法和k次加法
│
├── 全连接层 (输入d, 输出h)
│   └── FLOPs = 2 × d × h
│
├── 注意力计算 (seq_len=s, hidden=d)
│   ├── Q×K^T: 2 × s × s × d
│   ├── Softmax: ~s^2
│   ├── Attn×V: 2 × s × s × d
│   └── 总计: ~4 × s^2 × d
│
└── Transformer层 (seq=s, hidden=d, ffn=4d)
    ├── Self-Attention: 4 × s × d^2 + 4 × s^2 × d
    ├── FFN: 8 × s × d^2
    └── LayerNorm等: ~O(s × d)
    └── 总计: ~12 × s × d^2 (当s << d时)

精度与性能

不同精度下的FLOPs

精度位数数值范围应用场景
FP6464位±1.8×10^308科学计算
FP3232位±3.4×10^38传统深度学习
TF3219位FP32范围A100默认
FP1616位±65504混合精度训练
BF1616位FP32范围稳定训练首选
FP88位有限范围H100推理
INT88位整数-128~127量化推理

GPU不同精度性能对比

GPUFP64FP32TF32FP16/BF16FP8/INT8
A10019.5 TF19.5 TF156 TF312 TF624 TOPS
H10034 TF67 TF989 TF1979 TF3958 TOPS
B20045 TF90 TF2250 TF4500 TF9000 TOPS

TOPS单位

TOPS定义与应用

TOPS (Tera Operations Per Second):
┌──────────────────────────────────────────┐
│ 定义:每秒执行万亿次运算                 │
│                                          │
│ 与FLOPs的关系:                          │
│ ├── FLOPs特指浮点运算                    │
│ ├── TOPS可指任何运算类型                 │
│ └── 通常用于整数运算或混合运算           │
└──────────────────────────────────────────┘

常见应用场景:
├── 边缘AI芯片
│   ├── 手机NPU: 10-50 TOPS
│   ├── 嵌入式AI: 1-10 TOPS
│   └── 自动驾驶: 100-1000 TOPS
│
├── 推理芯片
│   ├── INT8量化推理
│   └── 主要关注TOPS指标
│
└── 能效比指标
    ├── TOPS/W (每瓦性能)
    └── 能效评估标准

示例对比:
├── Apple M3 NPU: 18 TOPS
├── Snapdragon 8 Gen3: 73 TOPS
├── Tesla FSD Chip: 144 TOPS
├── NVIDIA Orin: 275 TOPS
└── NVIDIA Thor: 2000 TOPS

Tokens/s指标

Tokens/s详解

Tokens/s (Tokens Per Second):
┌──────────────────────────────────────────┐
│ 定义:每秒生成的Token数量                │
│                                          │
│ 特点:                                    │
│ ├── 直接反映大模型推理速度               │
│ ├── 用户可感知的性能指标                 │
│ └── 受多种因素影响                       │
└──────────────────────────────────────────┘

影响因素:
├── 模型大小
│   ├── 更大模型 = 更低Tokens/s
│   └── 70B vs 7B: ~10x差异
│
├── 硬件性能
│   ├── GPU计算能力
│   ├── 内存带宽
│   └── 批处理大小
│
├── 精度
│   ├── FP16: 基准
│   ├── INT8: +20-30%
│   └── INT4: +30-50%
│
└── 序列长度
    ├── 长序列 = 更低Tokens/s
    └── KV Cache影响

典型性能数据:
├── LLaMA-2-7B @ A100
│   ├── Batch=1: ~80 tokens/s
│   └── Batch=32: ~1500 tokens/s
│
├── LLaMA-2-70B @ A100
│   ├── Batch=1: ~20 tokens/s
│   └── Batch=8: ~120 tokens/s
│
└── GPT-4 (估计)
    └── ~30-50 tokens/s (用户感知)

不同模型推理性能对比

模型GPUBatch=1Batch=8Batch=32
LLaMA-2-7BA10080 t/s500 t/s1500 t/s
LLaMA-2-13BA10050 t/s300 t/s900 t/s
LLaMA-2-70BA100×220 t/s120 t/s350 t/s
LLaMA-3-70BH10035 t/s200 t/s600 t/s

其他指标

补充性能指标

其他重要指标:
├── 内存带宽 (Memory Bandwidth)
│   ├── 单位: GB/s
│   ├── 影响: 大模型推理瓶颈
│   └── A100: 2039 GB/s, H100: 3352 GB/s
│
├── 显存容量 (VRAM)
│   ├── 单位: GB
│   ├── 决定: 最大模型大小
│   └── A100: 80GB, H100: 80GB, B200: 192GB
│
├── 互联带宽 (Interconnect)
│   ├── 单位: GB/s
│   ├── 影响: 分布式训练效率
│   └── NVLink4: 900GB/s, NVLink5: 1800GB/s
│
├── 功耗 (TDP)
│   ├── 单位: W
│   ├── 影响: 运营成本
│   └── A100: 400W, H100: 700W
│
└── 性价比
    ├── $/TFLOPs
    ├── $/GB VRAM
    └── Tokens/s/$

单位换算

常用单位换算关系

算力单位换算:
┌──────────────────────────────────────────┐
│ 数量级前缀:                              │
│ ├── K (Kilo) = 10^3 = 千                 │
│ ├── M (Mega) = 10^6 = 百万               │
│ ├── G (Giga) = 10^9 = 十亿               │
│ ├── T (Tera) = 10^12 = 万亿              │
│ ├── P (Peta) = 10^15 = 千万亿            │
│ └── E (Exa) = 10^18 = 百亿亿             │
└──────────────────────────────────────────┘

换算示例:
├── 1 TFLOPs = 1000 GFLOPs
├── 1 PFLOPs = 1000 TFLOPs
├── 1 EFLOPs = 1000 PFLOPs
├── 1 TOPS ≈ 1 TFLOPs (整数运算)
└── 1 GFLOPs = 10^9 FLOPs

训练算力估算:
├── GPT-3训练量: 3.15×10^23 FLOPs
├── = 315,000 PFLOPs
├── = 315 EFLOPs
└── A100集群 (1000卡): ~300 PFLOPs
    → 训练时间 ≈ 1050 PFLOPs-days / 300 PFLOPs
                ≈ 3.5天 (理论值,实际更长)

实际应用

实际应用示例

# 估算模型训练所需的算力和时间

def estimate_training(
    params: int,      # 参数量
    tokens: int,      # 训练token数
    gpu_count: int,   # GPU数量
    gpu_tflops: float # 单GPU有效TFLOPs
):
    """估算训练需求"""
    # 总计算量 (6 FLOPs per param per token)
    total_flops = 6 * params * tokens
    
    # 转换为PFLOPs-days
    pflops_days = total_flops / (1e15 * 86400)
    
    # 有效总算力 (PFLOPs)
    total_pflops = gpu_count * gpu_tflops / 1000
    
    # 训练天数
    days = pflops_days / total_pflops
    
    return {
        'total_flops': total_flops,
        'pflops_days': pflops_days,
        'training_days': days,
        'gpu_hours': days * 24 * gpu_count
    }

# 示例:LLaMA-2-70B
result = estimate_training(
    params=70e9,      # 70B参数
    tokens=2e12,      # 2T tokens
    gpu_count=2000,   # 2000张A100
    gpu_tflops=150    # A100有效性能
)
# 输出:
# - 总计算量: 8.4e23 FLOPs
# - 约9715 PFLOPs-days
# - 训练约32天
# - 约1,536,000 GPU小时
----