共计 1788 个字符,预计需要花费 5 分钟才能阅读完成。
什么是 AI 算力?
AI 算力(Computing Power for AI)简单来说就是计算机执行人工智能任务的能力。我们可以把它想象成汽车的发动机马力——马力越大,车跑得越快;算力越强,AI 模型训练和推理的速度就越快。

关键性能指标
- FLOPS(Floating Point Operations Per Second):每秒浮点运算次数,是衡量算力的基本单位
- 1 TFLOPS = 1 万亿次浮点运算 / 秒
-
典型显卡 RTX 3090:约 36 TFLOPS
-
TOPS(Tera Operations Per Second):专用于神经网络加速器的指标
- 1 TOPS = 1 万亿次操作 / 秒
- 谷歌 TPU v4:约 275 TOPS
硬件架构对比
CPU vs GPU vs TPU
- CPU(中央处理器)
- 优势:通用性强,适合复杂逻辑处理
- 局限:并行计算单元少(通常 <32 核)
-
算力示例:i9-13900K 约 2 TFLOPS
-
GPU(图形处理器)
- 优势:数千个计算核心,适合矩阵并行计算
- 典型代表:NVIDIA Tesla V100(125 TFLOPS)
-
内存带宽:900GB/s(A100)
-
TPU(张量处理器)
- 专为神经网络设计的 ASIC 芯片
- 优势:能效比高,推理速度快
- 局限:编程灵活性较低
graph LR
A[CPU] -->| 低并行度 | B(标量运算)
C[GPU] -->| 高并行度 | D(矩阵运算)
E[TPU] -->| 专用电路 | F(张量运算)
实战:监控 GPU 利用率
以下是用 PyTorch 监控 GPU 使用情况的示例代码:
import torch
import time
def monitor_gpu_usage():
"""
实时监控 GPU 利用率
返回:utilization: 当前 GPU 利用率百分比
memory_used: 已用显存 (MB)
"""
if not torch.cuda.is_available():
print("CUDA 不可用")
return None, None
# 获取当前设备
device = torch.cuda.current_device()
# 获取利用率
utilization = torch.cuda.utilization(device)
# 获取显存信息
mem_info = torch.cuda.mem_get_info(device)
memory_used = (mem_info[1] - mem_info[0]) / (1024 ** 2) # 转换为 MB
return utilization, memory_used
# 示例使用
if __name__ == "__main__":
print("开始监控 GPU(按 Ctrl+ C 停止)")
try:
while True:
util, mem = monitor_gpu_usage()
print(f"GPU 利用率: {util}%, 显存占用: {mem:.2f}MB")
time.sleep(1)
except KeyboardInterrupt:
print("监控结束")
常见算力瓶颈与优化
四大典型瓶颈
- 内存带宽限制
- 现象:计算单元等待数据加载
-
解决方案:
- 使用内存 coalescing 技术
- 增大 batch size
- 采用混合精度训练
-
并行度不足
- 现象:GPU 利用率长期低于 70%
-
解决方案:
- 检查数据加载是否使用多线程(num_workers>0)
- 优化计算图结构
-
PCIe 带宽瓶颈
- 现象:多 GPU 训练时扩展性差
-
解决方案:
- 使用 NVLink 连接
- 考虑更紧凑的数据表示
-
计算精度浪费
- 现象:使用 FP32 处理本可用 FP16 的任务
- 解决方案:
- 启用自动混合精度(AMP)
- 对推理任务使用 INT8 量化
生产环境算力评估清单
成本 / 性能权衡 checklist
- 需求分析阶段
- 预估模型参数量级
- 确定可接受的训练时间
-
评估推理延迟要求
-
硬件选型
- 单卡性能 vs 多卡扩展性
- 显存容量需求(参考:7B 参数模型≈15GB)
-
是否支持 bfloat16 等新特性
-
云服务考量
- 按需实例 vs 预留实例
- 竞价实例风险评估
-
跨可用区带宽成本
-
优化优先级
- 先确保足够 batch size
- 再优化数据流水线
- 最后考虑分布式训练
思考题:分布式训练的挑战
当我们需要训练百亿参数大模型时,单机算力显然不够。这时就需要分布式训练,但这也带来了新的问题:
- 如何有效分割模型?(数据并行 vs 模型并行)
- 通信开销会如何影响实际加速比?
- 在参数服务器和 AllReduce 架构间如何选择?
这些问题没有标准答案,需要根据具体场景进行权衡。建议从 Horovod 或 PyTorch DDP 等成熟框架开始实践,逐步深入理解分布式训练的算力扩展挑战。
正文完
