RuntimeError: Input type (torch.cuda.HalfTensor) and weight type (torch.FloatTensor) sh
1、RuntimeError: Input type (torch.cuda.HalfTensor) and weight type (torch.FloatTensor) sh
2、 assert len(optimizer_state["found_inf_per_device"]) > 0, "No inf checks were recorded for this optimizer." AssertionError: No inf checks were recorded for this optimizer.
这两个问题我调试了1天半:结果发现!!都是cuda的问题,
1是batch[image]没有放到cuda上,添加一个batch["image"]=batch["image"].cuda,把batch[image]放到gpu上(我这里单卡)
2是优化的数据和优化器不在同一张显卡上。不会改的同学建议去云端租一张大显卡跑!!
1、RuntimeError: Input type (torch.cuda.HalfTensor) and weight type (torch.FloatTensor) sh
是在这一步遇到的:di = net(batch["image"].to(device))
with torch.cuda.amp.autocast(enabled=(scaler is not None)):
# 确保所有输入都在指定设备上
di = net(batch["image"].cuda()!!!!!这里
labels = batch["label"].cuda()
当时又是问ai又是自己百度,答案都是清一色的:方法 1:让模型转换为 float16;方法 2:让输入转换为 float32。
但是我都严格的排除了上面的错误,并不存在此问题,我的图像和网络都是float32,我曾尝试把batch[image]=batch[image].half().结果还是数据不匹配。我是咋想到要这样的呢,因为我最近总是出一些数据不在同张显卡上报错等等,我就想是不是这个原因,因为在gpu上可以进行半精度计算并且可以自动管理浮点数类型,如果我的batch[image]不在cuda上,可能就不能被半精度管理?不太清楚,最近改多了,感觉全靠直觉!
2、 assert len(optimizer_state["found_inf_per_device"]) > 0, "No inf checks were recorded for this optimizer." AssertionError: No inf checks were recorded for this optimizer.
这个我记得去gpt,一堆可能的错误,比如说:
- 检查
loss.backward()是否被正确调用。 - 确保
scaler = GradScaler()正确初始化。 - 打印
loss值,确保它不是 0 或 NaN。 - 临时关闭 AMP 进行调试。
- 尝试降低
learning rate解决梯度爆炸问题。
我每一种可能都排查了一遍我保证没有问题,最后琢磨琢磨,好像是从我分配了不同卡跑不同网络后开始有这个问题的,我就开了个大卡跑,发现这个问题解决了!!所以议后疑难杂症就看cuda吧~
欢迎来到FlagOS开发社区,这里是一个汇聚了AI开发者、数据科学家、机器学习爱好者以及业界专家的活力平台。我们致力于成为业内领先的Triton技术交流与应用分享的殿堂,为推动人工智能技术的普及与深化应用贡献力量。
更多推荐



所有评论(0)