116_深度学习提速:PyTorch 利用 GPU 训练的全攻略

在 PyTorch 中,利用 GPU 训练并不复杂,核心逻辑就是:将模型和数据"搬"到显卡内存中。 你的笔记中详细记录了两种实现方式,下面我们结合代码逐一拆解。

1. 哪些部分需要移动到 GPU?

要实现 GPU 加速,必须保证以下三部分都在同一块显卡上:

  1. 网络模型 (nn.Module)
  2. 损失函数 (Loss Function)
  3. 数据 (包括输入 imgs 和标注 targets)

2. 方式一:使用 .cuda() (基础版)

这种方式简单直接,通过调用对象的 .cuda() 方法来实现迁移。

代码实战:

Python

复制代码
# 1. 网络模型转移到 GPU
tudui = Tudui()
if torch.cuda.is_available():
    tudui = tudui.cuda()

# 2. 损失函数转移到 GPU
loss_fn = nn.CrossEntropyLoss()
if torch.cuda.is_available():
    loss_fn = loss_fn.cuda()

# 3. 训练循环中的数据转移
for data in train_dataloader:
    imgs, targets = data
    if torch.cuda.is_available():
        imgs = imgs.cuda()
        targets = targets.cuda()
    
    outputs = tudui(imgs)
    loss = loss_fn(outputs, targets)
    # ... 后续优化逻辑

注意 :使用 .cuda() 前务必先用 torch.cuda.is_available() 判断当前环境是否有显卡。


3. 方式二:使用 .to(device) (推荐方案)

这种方式更加通用且优雅。你可以定义一个 device 变量,后续一键切换 CPU 或 GPU。

代码实战:

Python

复制代码
# 定义训练设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 1. 转移模型
tudui = Tudui()
tudui = tudui.to(device)

# 2. 转移损失函数
loss_fn = nn.CrossEntropyLoss()
loss_fn = loss_fn.to(device)

# 3. 转移数据
for data in train_dataloader:
    imgs, targets = data
    imgs = imgs.to(device)
    targets = targets.to(device)
    
    # ... 执行训练

4. 关键点深度解析

为什么模型和损失函数不需要重新赋值,而数据需要?

在你的代码中,你可能会发现:

  • tudui.to(device) 执行后,模型就变了。
  • 但数据必须写成 imgs = imgs.to(device)。
  • 原因 :模型(nn.Module)的 .to() 方法会直接修改其内部参数;而张量(Tensor)的 .to() 方法会返回一个新的副本,所以必须重新赋值。

如何查看显卡占用情况?

文件中最后提到通过命令行查看 GPU 状态:

Bash

复制代码
!nvidia-smi

通过这个命令,你可以实时监控显存占用(Memory-Usage)和 GPU 利用率(Volatile GPU-Util),确保你的显卡正在全力工作。


5. 总结:GPU 训练的"避坑"准则

  1. 保持一致性 :输入数据和模型必须在同一个 device 上,否则会报 RuntimeError: Expected all tensors to be on the same device。
  2. 单机多卡处理 :如果你有多个 GPU,可以通过 cuda:0, cuda:1 来指定特定的显卡。
  3. 内存管理 :如果遇到 out of memory (OOM),尝试调小 batch_size。

💡 学习小结

学会利用 GPU 训练后,你已经解锁了处理大规模图像任务的能力。

相关推荐
沉下心来学鲁班2 分钟前
具身智能进阶:让 MicroDuck 踩着高跷走路
人工智能·python·机器人
紧跟先前的步伐4 分钟前
Go AI Agent 实战 08|HTTP 模型 API 的工作原理与请求流程
人工智能·http·ai·golang
紧跟先前的步伐8 分钟前
Go AI Agent 实战 07|模型幻觉、能力边界与成本控制
大数据·人工智能·golang
dghongcheng11 分钟前
工业涂装数字化转型:从经验喷涂到数据驱动
人工智能·喷涂·喷漆设备·自动喷涂线·自动喷涂
liuyanqun-parbie13 分钟前
从零设计一个通用智能电话平台:FreeSWITCH + ESL + AI 实战架构
人工智能·架构
文慧的科技江湖13 分钟前
2026年10月21日智慧停车行业早报:番禺把单次封顶从132元砍到58元,同一天黄埔要往下挖59米只放200个车位——收费在往下走,车位在往深处长
人工智能·开源·智慧城市·智慧停车·城市管理·静态交通·停车saas
comedate16 分钟前
【AI】Jev API 接入实战:用 Python 调用 TypeSafe Jev 做结构化判断
人工智能·python·jev·typesafe·快速判断模型
workflower22 分钟前
无人机注册量与飞行量
大数据·网络·人工智能·云计算·汽车·无人机
鶴哥只手遮天22 分钟前
Spring AI Alibaba 深度技术系列-第 05 章 编译与执行引擎:CompiledGraph、GraphRunner与三段式 Executor
java·人工智能·开源
灵动的艺术23 分钟前
如一 Agent 架构解读(六):阈值、联动与坑位——压缩系统的肌理
人工智能·agent·如一