You need to enable JavaScript to run this app. 如何在PyTorch中修改模块部分参数的设备类型
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyTorch中修改模块部分参数的设备类型

问题原因

循环中迭代得到的p是临时变量,直接执行p = p.to('cuda')仅修改了临时变量的指向,没有改动模型内部实际存储的参数对象,因此迁移操作不会生效。

正确解决方法

方案1:全模型批量迁移(优先推荐)

直接调用模型自带的to()方法,可一次性将所有参数、缓冲区迁移到指定设备,无需手动遍历参数:

net = net.to('cuda')

方案2:仅迁移位于CPU的参数

如果你确实需要仅迁移当前在CPU上的参数,需要直接修改参数的底层数据属性,若存在梯度也要同步迁移:

for p in net.parameters():
    if p.device == torch.device('cpu'):
        p.data = p.data.to('cuda')
        # 同步迁移梯度数据
        if p.grad is not None:
            p.grad.data = p.grad.data.to('cuda')

修改完成后再打印参数设备,就能看到CPU的参数已经成功迁移到CUDA。

内容的提问来源于stack exchange,提问作者skytree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 01:09:03