module must have parameters on cuda:0 but found cuda:2:DataParallel 主卡与模型位置要一致

简介: 本文详解PyTorch中DataParallel的设备一致性要求:模型参数与缓冲区必须位于`device_ids[0]`对应卡(如`cuda:2`),否则报错。强调单卡隔离应设`CUDA_VISIBLE_DEVICES`后直用`cuda:0`,多卡则需确保基础模型先`.to("cuda:X")`再包装,且输入/输出设备匹配。

原帖把模型搬到 cuda:2,却用 device_ids=[0,1,2,3] 包装 DataParallel;后者要求基础模型在列表第一张卡:

RuntimeError: module must have its parameters and buffers on device cuda:0 (device_ids[0]) but found one of them on device: cuda:2

先按原目标决定是否需要 DataParallel

原题想让两个 Notebook 各自使用一张 GPU,却在每个模型上列了四张卡。若按单卡隔离目标配置,直接使用一张可见卡即可;确实需要多卡时,再让模型初始位置与 device_ids[0] 一致。两种需求应有明确配置,不能同时混用。

如果目标是两个 Notebook 分别独占 GPU 2 与 GPU 0,通常无需让每个 Notebook 再占四张卡。先检查当前进程的可见性与模型位置:

import os
import torch
print("josh050608")
print("visible:", os.environ.get("CUDA_VISIBLE_DEVICES"))
print("device_ids:", getattr(model, "device_ids", None))
print("parameters:", sorted({
   str(p.device) for p in model.parameters()}))
print("buffers:", sorted({
   str(b.device) for b in model.buffers()}))

单卡隔离可以在启动 kernel 前设置 CUDA_VISIBLE_DEVICES,只暴露所需物理 GPU;进程内使用重新编号后的 cuda:0,直接 model.to('cuda:0'),不包装 DataParallel。已经初始化 CUDA 后再改可见性,需要重启 kernel 才能可靠生效。

如果确实要以 GPU 2 为主卡使用多卡,在四卡均可见时保持顺序一致:

base_model = base_model.to("cuda:2")
model = torch.nn.DataParallel(base_model, device_ids=[2, 0, 1, 3])
inputs = inputs.to("cuda:2")

base_model 是尚未包装的模型,输入设备和输出处理也应按此设计。不要对已经错误包装的对象反复套 DataParallel。

验证所有参数与 buffers 初始位于 device_ids[0],再做一次前向。设备编号应以当前进程的打印结果与完整堆栈为准。

可见性重编号后,主卡列表也跟着改变

例如启动某个 kernel 前只暴露物理 GPU 2,进程内通常只看到一张 cuda:0。此时不能再传 [2,0,1,3];该列表只适用于四张卡全部可见且编号对应的环境。已经初始化 CUDA 后改变可见性,应重启 kernel。

以下合成配置检查不调用 GPU,用于说明 DataParallel 的基础约束:

def check_primary(device_ids, parameter_devices, buffer_devices):
    if not device_ids:
        raise ValueError("没有指定多卡设备")
    primary = f"cuda:{device_ids[0]}"
    actual = set(parameter_devices) | set(buffer_devices)
    if actual - {
   primary}:
        raise ValueError(f"基础模型应先放到 {primary},实际为 {sorted(actual)}")
    return primary
assert check_primary([2, 0, 1, 3], ["cuda:2"], ["cuda:2"]) == "cuda:2"
try:
    check_primary([0, 1, 2, 3], ["cuda:2"], [])
except ValueError as exc:
    print("primary mismatch:", exc)

真实模型要同时检查 parameters 和 buffers,BatchNorm 统计量等 buffer 也受主卡约束。替换子层后若忘记迁移,新层可能留在 CPU,也会产生后续设备问题。

从未包装的 base_model 开始配置,先 .to(primary),再包装 DataParallel,并将输入送到同一主卡。不要把错误对象层层嵌套包装。最终先前向,再验证 loss/backward,并通过设备统计确认每个 Notebook 的占卡范围符合最初目的。

参考:原始求助帖;技术依据:DataParallel(2.5)、PyTorch CUDA 环境变量(2.5)。

相关文章
|
2天前
|
存储 PyTorch 算法框架/工具
some of the strides of a given numpy array are negative:flip 后先复制再 from_numpy
PyTorch `torch.from_numpy()` 不支持负步长(如 `np.flip` 生成的视图),会报错。解决方法:① `.copy()` 或 `np.ascontiguousarray()` 转为正步长;② 改用 `torch.flip()` 在 Tensor 层翻转。注意图像轴向、标注同步及 Dataset 中提前处理,避免 collate 阶段出错。(239字)
|
9天前
|
存储 人工智能 弹性计算
阿里云2026年双十一活动:云服务器首单38元起,领券最高享1728元补贴
2026年阿里云双十一活动形成"限时抢购+长效普惠+99计划+全品类抢先购+核心业务组合+AI热门精选"的完整优惠矩阵。限时抢购每天10点、15点两场,云服务器首单38元起,领券最高享1728元红包补贴;长效普惠专区轻量应用服务器68元/年起、ECS e实例99元/年起;99计划承诺新购续费人人同享低价,覆盖ECS、RDS、OSS、无影云电脑等六款;另有数据库、大数据、安全、网络CDN与企业应用全品类特惠及五大场景组合套餐,AI生产力产品同步配齐。
阿里云2026年双十一活动:云服务器首单38元起,领券最高享1728元补贴
|
9天前
|
人工智能 弹性计算 双11
2026年阿里云双十一活动云服务器价格表及选购指南
2026阿里云双11已开启!轻量服务器低至38元/年,ECS经济款99元/年,GPU及AI套餐同步放价。覆盖个人建站、开发测试、企业核心业务与AI部署,叠加满减券至高省1728元。11.1–11.30限时抢购,先领券再下单更划算!
350 2
|
9天前
|
存储 人工智能 弹性计算
2026年阿里云双十一大促优惠活动整理
2026年阿里云双十一大促开启!云服务器首单38元/年起,最高领1728元红包;满减、限时抢购、长效普惠、Token节省计划直降55%、160+款产品免费试用——覆盖计算、存储、数据库、AI全品类,年度上云最佳时机!
246 0
|
10天前
|
弹性计算 双11 开发者
2026年阿里云双十一云服务器优惠活动汇总
2026年阿里云双十一大促开启(11.1–11.30)!覆盖轻量服务器、ECS、GPU算力等,新老用户同享低价:轻量2核2G低至38元/年,ECS 2核2G仅99元/年,续费锁价,学生/初创/企业全覆盖,全年最佳上云时机!
468 1
|
23天前
|
弹性计算 运维 安全
阿里云服务器免费领取攻略:个人新用户3个月、学生1年,涵盖个人/学生/企业申领渠道、服务器配置及运维全流程实操指南
免费ECS为零预算群体打开了一扇接触云计算的大门:个人用户最长三个月、学生最长一年,从注册到上手全流程都不复杂。但免费终究有边界,额度和时间到了要么续要么释放,别让账单悄悄产生。拿到机器后第一件事做好安全加固,只开必要端口,把风险降到最低。然后尽情用这台免费算力去部署、去调试、去积累你的云端实战经验。
501 1
|
2天前
|
人工智能 开发者 Docker
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop作为本地开发工具,和阿里云容器镜像服务、ECS、容器服务配合,是一套非常成熟的开发流水线。本地写代码、打包、测试、调试,镜像推送到ACR,再到云上部署,全程环境一致,消除本地和线上环境差异带来的问题。新手可以先从安装、汉化、配置阿里云加速器入手,熟悉镜像拉取、打包推送流程,再慢慢掌握资源限制、代理、Kubernetes附加组件等进阶能力。
337 0
|
27天前
|
存储 人工智能 数据库
2026年阿里云免费云服务器领取保姆级教程(个人/ 学生/ 企业)
阿里云为个人、学生及初创企业免费提供云服务器等160+款产品试用权益,涵盖计算、AI、数据库等,助力零成本上云、快速学习与项目验证。
308 1
|
8天前
|
存储 人工智能 弹性计算
2026阿里云双十一活动AI产品特惠解读:7000万免费Token额度与Token Plan优惠活动解析
2026阿里云双十一以"云上双11,好价好云"为主题,11月1日至30日开展、每日两批补货。AI侧新用户可领超7000万免费Tokens,Token Plan新客首购5折、Lite低至19.5元/月,150多款模型4.5折、Qoder夜间4折;千问办公29.9元抢全年,万小智建站9.9元起。算力侧云服务器38元/年起,ECS 99元/年起、续费同价最长至2030年。六类券个人享5%、企业8%,订单宜凑满2000元,新购续费分开结算;176款产品可免费试用,宜先测后买。
|
8天前
|
人工智能 弹性计算 双11
2026年阿里云双十一大促活动解析:云服务器、AI大模型、优惠券、域名与建站活动内容解读
2026年阿里云双十一以"算力底座—模型能力—优惠权益—应用落地"四层贯通形成系统性让利。服务器侧每天10点、15点两场限时抢购,首单38元起,长效普惠专区轻量服务器68元/年起、ECS e实例99元/年起,99计划以续费同价覆盖计算、存储、数据库等产品线。AI侧Token Plan低至5折,Lite版19.50元/月起、Essential版39.50元/月起,150+款模型通享节省计划低至4.5折,OPC最高百万Token补贴。优惠券按个人、企业、高校等身份分六类发放,互不叠加。域名建站方面,万小智AI建站9.9元/首月、.COM新购与转入76元、组合购低至60元。

热门文章

最新文章