GPU (Graphics Processing Unit)
GPU 是一种拥有数千个核心、专为并行计算打造的处理器,因此它是训练和运行深度学习模型的主要硬件。
图形处理器(GPU)是一种拥有数千个简单核心的处理器,可同时对大量数据执行相同操作。GPU 最初是为渲染 3D 图形而设计的,这意味着要并行计算数百万个像素和顶点;后来它成为深度学习的主要硬件,因为神经网络训练和推理主要依赖矩阵乘法,而矩阵乘法可以通过同样的方式并行化。NVIDIA 于 2007 年推出的 CUDA平台让其 GPU 能够用于通用计算;2012 年,AlexNet网络使用两块 NVIDIA GTX 580 GPU 训练了五到六天,并以 15.3% 的 top-5 错误率赢得 ImageNet挑战赛,远低于亚军的 26.2%。如今,PyTorch、TensorFlow和 JAX 可通过 CUDA 在 NVIDIA GPU 上运行,通过 ROCm 在 AMD GPU上运行,也可通过 Metal在 Apple 芯片上运行;数千块 GPU 组成的集群则用于训练规模最大的基础模型。
GPU 如何加速深度学习#
CPU将芯片的大部分面积用于缓存和控制逻辑,让少数核心能快速运行带分支的代码。GPU 则将这部分面积用于运算:NVIDIA GPU 被划分为多个流式多处理器,每个处理器运行由 32 个线程组成的线程组,称为 warp;这些线程会对不同数据执行同一条指令。当一些 warp 等待内存时,另一些 warp 会继续计算,因此只要有足够多的并行工作,芯片就能保持繁忙。自 2017 年 Volta 架构以来,NVIDIA GPU 还配备了 Tensor Core;这种单元可用较低精度一步完成小型矩阵乘法,现在支持 FP8,自 Blackwell 起还支持 FP4。NVIDIA A100 使用 Tensor Core 时,标准 FP32 运算的峰值性能为 19.5 TFLOPS,使用 BF16时为 312 TFLOPS,这就是大多数 GPU 训练采用混合精度的原因。下面的代码会计时同一矩阵乘法在 CPU 和 GPU 上的运行情况:
import time
import torch
gpu = torch.accelerator.current_accelerator() # cuda, mps, or xpu device on this machine
a = torch.randn(4096, 4096)
b = torch.randn(4096, 4096)
for device in (torch.device("cpu"), gpu):
x, y = a.to(device), b.to(device)
x @ y # warm-up run
torch.accelerator.synchronize()
start = time.perf_counter()
for _ in range(10):
x @ y
torch.accelerator.synchronize() # GPU calls return immediately, so wait for them to finish
seconds = (time.perf_counter() - start) / 10
print(f"{device.type}: {seconds * 1000:.1f} ms per multiply, {2 * 4096**3 / seconds / 1e12:.1f} TFLOPS")在 Apple M5 Pro 笔记本电脑上,它会输出 cpu: 80.0 ms per multiply, 1.7 TFLOPS 和 mps: 18.3 ms per multiply, 7.5 TFLOPS,因此这台笔记本的集成 GPU 在 FP32 下速度约快 4.4 倍。数据中心 GPU 凭借更多核心和高带宽存储器(HBM)进一步拉大差距;HBM 每秒可传输数 TB 数据,足以持续为核心提供权重和激活值。GPU 内存通常称为显存(VRAM),它也决定了单台设备能容纳多大的模型和批次大小;梯度检查点和分布式训练等技术则可用于绕过这一限制。
在 GPU 上训练和部署模型#
只有当流水线的其他部分跟得上时,训练任务才能让 GPU 保持繁忙:CPU 工作线程必须以足够快的速度解码和增强图像,批次必须足够大以充分利用各个核心,计算也应在 Tensor Core 上以较低精度运行。GPU 利用率低通常说明以下某个步骤存在问题:
如果有可用的 CUDA GPU,Ultralytics YOLO 默认会使用第一块 GPU 进行训练,可通过 device=[0, 1] 进行多 GPU 训练;使用 batch=-1 时会运行 AutoBatch,测量 GPU 的可用显存并选择约占显存 60% 的批次大小。没有本地硬件的团队可以为每次训练在 Ultralytics Platform 上选择云 GPU。推理时,导出为 TensorRT的 YOLO26n模型在 NVIDIA T4 GPU 上处理一张 640 像素图像只需 1.7 毫秒,而使用 ONNX 在 CPU 上需要 38.9 毫秒。以下代码使用第一块 GPU 和 AutoBatch 训练 YOLO26:
from ultralytics import YOLO
# 加载最小的 YOLO26 检测模型
model = YOLO("yolo26n.pt")
# 在 GPU 0 上训练,并让 AutoBatch 根据 GPU 内存确定批次大小
results = model.train(data="coco8.yaml", epochs=3, imgsz=640, device=0, batch=-1)GPU 与 CPU、TPU 和 NPU 的比较#
- CPU:少量高性能核心,适用于通用的带分支代码。大多数训练流水线会用 CPU 执行数据加载和预处理;在没有加速器时,CPU 也负责推理。
- GPU:数千个可编程核心加上 Tensor Core。GPU 可以运行几乎任何模型和框架,来自多个厂商,并且可在所有主要云平台中使用。
- TPU:Google 的专用芯片,以大型矩阵乘法单元为核心设计。TPU 牺牲了 GPU 的灵活性,以提高大型稠密矩阵工作负载的效率,可通过 Google Cloud 使用。
- NPU:手机、笔记本电脑和边缘设备中的低功耗神经网络加速器,用于推理而非训练。
实际应用#
- 训练大型模型:拥有数十亿参数的语言和视觉模型会在数千块数据中心 GPU 组成的集群上训练,这些 GPU 通过 NVLink 和 InfiniBand 等高速链路连接。
- 实时视频分析:一块 GPU 可同时对多个摄像头视频流执行目标检测和跟踪,用于交通监控、零售分析或工厂巡检。
- 机器人与自动驾驶车辆:NVIDIA Jetson 等嵌入式 GPU 模块会在设备本地运行感知模型,因为将摄像头数据发送到服务器会造成过多延迟。
- 医学影像:GPU 可在几秒而非几分钟内处理大型 3D CT 和 MRI 影像,以分割器官和肿瘤。










