You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Pro运行pc_certification.py遇CUDA及load()错误的解决方法

MacPro M1 Pro运行模型认证脚本的错误修复

错误原因及修复方案

1. 反序列化错误(CUDA设备不可用)

M1 Pro芯片使用Apple Silicon的MPS后端而非CUDA,代码中硬编码了CUDA设备,且加载模型时未指定映射到CPU/MPS,导致反序列化失败。

2. TypeError: load()缺失必填位置参数'f'

通常是模型加载时torch.load调用参数错误,或旧的dump文件与当前设备环境不兼容导致加载失败。


具体代码修改

修改主脚本(pc_certification.py)

(1)动态设置设备

替换硬编码的CUDA设备为自动检测的设备:

# 原代码
device = 'cuda' 
model = model.to(device)
model.eval()
cudnn.benchmark = True

# 修改后
device = torch.device('mps' if torch.backends.mps.is_available() else 'cpu') 
model = model.to(device)
model.eval()
# 仅在CUDA设备下启用cudnn优化
if device.type == 'cuda':
    cudnn.benchmark = True

(2)替换所有.cuda()调用为.to(device)

找到代码中使用.cuda()的部分,修改为适配当前设备:

# 原代码
masked_output = model(torch.where(torch.logical_and(mask,mask2),data,torch.tensor(0.).cuda()))

# 修改后
masked_output = model(torch.where(torch.logical_and(mask,mask2),data,torch.tensor(0.).to(device)))

修改模型加载工具(utils/setup.py中的get_model函数)

在加载模型权重时添加map_location参数,确保模型加载到当前设备:

# 原代码(示例)
checkpoint = torch.load(os.path.join(model_dir, f"{model_name}.pth"))

# 修改后
checkpoint = torch.load(os.path.join(model_dir, f"{model_name}.pth"), map_location=device)

如果get_model函数未接收device参数,需要先修改函数定义:

# 修改get_model函数定义
def get_model(model_name, dataset, model_dir, device):
    # ... 原有代码 ...
    checkpoint = torch.load(os.path.join(model_dir, f"{model_name}.pth"), map_location=device)
    # ... 原有代码 ...

并在主脚本中传递device参数:

# 原代码
model = get_model(MODEL_NAME,DATASET,MODEL_DIR)

# 修改后
model = get_model(MODEL_NAME,DATASET,MODEL_DIR, device=device)

重新生成兼容的dump文件

执行命令时添加--override参数,强制重新计算并保存适配当前设备的预测结果,避免加载旧的CUDA环境生成的文件:

python pc_certification.py --model resnetv2_50x1_bit_distilled_cutout2_128 --dataset imagenette --num_img -1 --num_mask 6 --patch_size 32 --override

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:15:04