附录A:GPU与算力指南
算力是什么?
算力(Computing Power)是指计算机进行数值计算的能力。在AI领域,算力是训练和运行模型的基础资源。
算力单位
FLOPS(Floating Point Operations Per Second,每秒浮点运算次数)是衡量算力的标准单位:
- MFLOPS:百万次/秒(10^6)
- GFLOPS:十亿次/秒(10^9)
- TFLOPS:万亿次/秒(10^12)
- PFLOPS:千万亿次/秒(10^15)
一块NVIDIA A100 GPU的算力约为 312 TFLOPS(FP16),而训练GPT-3需要约 3.14 × 10^23 FLOPS 的总计算量。
CPU vs GPU对比
| 维度 | CPU | GPU |
|---|---|---|
| 核心数 | 少量强大核心(4-64个) | 大量简单核心(数千个) |
| 擅长任务 | 串行计算、逻辑控制 | 大规模并行计算 |
| 内存带宽 | 较低(~50 GB/s) | 极高(~2 TB/s) |
| 适用场景 | 通用计算、操作系统 | AI训练/推理、图形渲染 |
类比理解
CPU就像一位大学教授:知识渊博,能解决各种复杂问题,但一次只能辅导一个学生。
GPU就像1000个小学生:每个人只能做简单的加减乘除,但1000个人同时做,总速度远超教授。AI训练需要做大量简单的矩阵运算,正好适合GPU的并行能力。
为什么AI需要GPU?
AI模型训练涉及大量的矩阵乘法运算,这些运算可以并行执行。GPU拥有数千个计算核心,可以同时处理大量运算,比CPU快数十倍甚至上百倍。没有GPU,训练现代大模型可能需要数年甚至数十年。
主流GPU产品
| GPU型号 | 显存 | FP16算力 | 适用场景 |
|---|---|---|---|
| NVIDIA H100 | 80GB HBM3 | ~990 TFLOPS | 大模型训练(旗舰级) |
| NVIDIA A100 | 40/80GB HBM2e | ~312 TFLOPS | 大模型训练/推理(主流) |
| NVIDIA RTX 4090 | 24GB GDDR6X | ~83 TFLOPS | 本地推理、小模型微调 |
显存的重要性
显存(VRAM)是GPU上用于存储模型参数和中间计算结果的内存。显存大小直接决定了能运行多大的模型。
为什么显存很重要?
模型参数需要加载到显存中才能进行计算。例如,一个7B参数的FP16模型需要约14GB显存,加上KV Cache等运行开销,至少需要16GB显存。如果显存不足,模型就无法运行,或者需要使用量化等压缩技术。
显存优化技术
- 量化:降低参数精度(FP16→INT8→INT4),减少显存占用
- 梯度检查点:用计算换显存,减少训练时的显存峰值
- LoRA/QLoRA:只训练少量额外参数,大幅减少训练显存需求
- 分布式训练:将模型分布到多张GPU上,突破单卡显存限制
代码实践
以下代码展示了如何检测GPU可用性,以及进行简单的GPU vs CPU性能对比。这些代码帮助你了解PyTorch如何利用GPU加速计算。
示例1:PyTorch GPU检测
import torch
print("=" * 50)
print("🔍 PyTorch GPU 检测工具")
print("=" * 50)
# 1. 检查PyTorch版本
print(f"\n📦 PyTorch 版本:{torch.__version__}")
# 2. 检查CUDA是否可用
print(f"\n🔥 CUDA 是否可用:{torch.cuda.is_available()}")
if torch.cuda.is_available():
# 3. CUDA版本
print(f"🔥 CUDA 版本:{torch.version.cuda}")
# 4. GPU数量
gpu_count = torch.cuda.device_count()
print(f"\n🎮 GPU 数量:{gpu_count}")
# 5. 遍历每个GPU
for i in range(gpu_count):
props = torch.cuda.get_device_properties(i)
print(f"\n 🎮 GPU {i}: {torch.cuda.get_device_name(i)}")
print(f" 总显存:{props.total_memory / 1024**3:.1f} GB")
print(f" 计算能力:{props.major}.{props.minor}")
print(f" 多处理器数量:{props.multi_processor_count}")
# 6. 当前使用的GPU
print(f"\n📍 当前默认 GPU:{torch.cuda.current_device()}")
else:
print("\n⚠️ 未检测到可用的GPU,将使用CPU进行计算。")
print(" 提示:如需GPU加速,请安装CUDA版本的PyTorch。")
# 7. 快速测试:创建张量
print("\n🧪 快速测试:")
if torch.cuda.is_available():
x = torch.rand(3, 3).cuda()
print(f" GPU 张量:{x.device}")
else:
x = torch.rand(3, 3)
print(f" CPU 张量:{x.device}")
print(f" 张量内容:\n{x}")
运行结果(有GPU时)
==================================================
🔍 PyTorch GPU 检测工具
==================================================
📦 PyTorch 版本:2.1.0
🔥 CUDA 是否可用:True
🔥 CUDA 版本:12.1
🎮 GPU 数量:1
🎮 GPU 0: NVIDIA GeForce RTX 4090
总显存:24.0 GB
计算能力:8.9
多处理器数量:128
📍 当前默认 GPU:0
🧪 快速测试:
GPU 张量:cuda:0
张量内容:
tensor([[0.1234, 0.5678, 0.9012],
[0.3456, 0.7890, 0.2345],
[0.6789, 0.0123, 0.4567]], device='cuda:0')
示例2:GPU vs CPU 性能对比
import torch
import time
print("=" * 50)
print("⚡ GPU vs CPU 性能对比")
print("=" * 50)
# 定义矩阵大小(越大越能看出差距)
size = 5000
# 创建随机矩阵
A_cpu = torch.randn(size, size)
B_cpu = torch.randn(size, size)
# ===== CPU 计算 =====
print(f"\n🖥️ CPU 计算(矩阵 {size}×{size})")
start = time.time()
C_cpu = torch.matmul(A_cpu, B_cpu)
cpu_time = time.time() - start
print(f" 耗时:{cpu_time:.3f} 秒")
# ===== GPU 计算 =====
if torch.cuda.is_available():
A_gpu = A_cpu.cuda()
B_gpu = B_cpu.cuda()
# 预热(第一次GPU调用通常较慢)
_ = torch.matmul(A_gpu, B_gpu)
torch.cuda.synchronize()
print(f"\n🎮 GPU 计算(矩阵 {size}×{size})")
start = time.time()
C_gpu = torch.matmul(A_gpu, B_gpu)
torch.cuda.synchronize() # 等待GPU完成
gpu_time = time.time() - start
print(f" 耗时:{gpu_time:.3f} 秒")
# 计算加速比
speedup = cpu_time / gpu_time
print(f"\n🚀 GPU 加速比:{speedup:.1f}x")
print(f" GPU 比 CPU 快了 {speedup:.1f} 倍!")
# 验证结果一致性
C_gpu_cpu = C_gpu.cpu()
max_diff = (C_cpu - C_gpu_cpu).abs().max()
print(f"\n✅ 结果一致性检查:最大差异 {max_diff:.6f}")
else:
print("\n⚠️ 未检测到GPU,跳过GPU性能对比。")
运行结果(RTX 4090 示例)
==================================================
⚡ GPU vs CPU 性能对比
==================================================
🖥️ CPU 计算(矩阵 5000×5000)
耗时:2.845 秒
🎮 GPU 计算(矩阵 5000×5000)
耗时:0.023 秒
🚀 GPU 加速比:123.7x
GPU 比 CPU 快了 123.7 倍!
✅ 结果一致性检查:最大差异 0.000031
(注:实际加速比因硬件配置而异,通常大型矩阵运算GPU可比CPU快数十到数百倍)
这两个示例展示了GPU在AI计算中的核心价值:
- GPU检测:了解你的计算环境,确认CUDA和PyTorch是否正确配置
- 性能对比:直观感受GPU在大规模矩阵运算中的加速效果
在深度学习中,模型训练和推理都依赖大量的矩阵运算,因此GPU是AI开发的必备硬件。