附录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开发的必备硬件。