pytorch训练过程中出现nan的排查思路

部署运行你感兴趣的模型镜像
  1. 最常见的就是出现了除0或者log0这种,看看代码中在这种操作的时候有没有加一个很小的数,但是这个数数量级要和运算的数的数量级要差很多。一般是1e-8。
  2. 在optim.step()之前裁剪梯度。
optim.zero_grad()
loss.backward()
nn.utils.clip_grad_norm(model.parameters, max_norm, norm_type=2)
optim.step()

max_norm一般是1,3,5。
3. 前面两条还不能解决nan的话,就按照下面的流程来判断。

...

loss = model(input)
# 1. 先看loss是不是nan,如果loss是nan,那么说明可能是在forward的过程中出现了第一条列举的除0或者log0的操作
assert torch.isnan(loss).sum() == 0, print(loss)

optim.zero_grad()
loss.backward()
# 2. 如果loss不是nan,那么说明forward过程没问题,可能是梯度爆炸,所以用梯度裁剪试试
nn.utils.clip_grad_norm(model.parameters, max_norm, norm_type=2)

# 3.1 在step之前,判断参数是不是nan, 如果不是判断step之后是不是nan
assert torch.isnan(model.mu).sum() == 0, print(model.mu)
optim.step()
# 3.2 在step之后判断,参数和其梯度是不是nan,如果3.1不是nan,而3.2是nan,
# 特别是梯度出现了Nan,考虑学习速率是否太大,调小学习速率或者换个优化器试试。
assert torch.isnan(model.mu).sum() == 0, print(model.mu)
assert torch.isnan(model.mu.grad).sum() == 0, print(model.mu.grad)

转载自: https://blog.youkuaiyun.com/mch2869253130/article/details/111034068

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

### PyTorch 训练过程中 Exit 134 错误的原因分析 Exit 134 是一种常见的程序崩溃信号,通常表示程序因非法操作而终止运行。这种错误可能是由多种原因引起的,包括但不限于内存访问越界、指针未初始化、CUDA 内存分配失败或其他硬件资源不足等问题。 以下是可能导致该问题的具体原因以及解决方案: #### 1. **GPU/CPU 内存不足** 如果模型过大或者批量大小设置过高,可能会导致 GPU 或 CPU 内存耗尽,从而引发退出码 134 的错误[^2]。 - 解决方案:减少批量大小(batch size),优化模型结构以降低显存占用。 - 可通过以下方式监控显存使用情况: ```bash nvidia-smi ``` #### 2. **数据预处理中的 NaN 值** 输入数据中可能存在 `NaN` 或者无穷大值 (`inf`),这会干扰模型的正常训练过程并触发异常行为[^2]。 - 使用 NumPy 检查是否有无效数值: ```python import numpy as np if np.any(np.isnan(input_data)): raise ValueError("Input data contains NaN values.") if np.any(np.isinf(input_data)): raise ValueError("Input data contains infinite values.") ``` #### 3. **损失函数配置不当** 某些特定类型的损失函数可能对目标值有严格的要求。例如,在使用交叉熵损失时,标签应为整数类别索引;而在使用均方误差(MSE)时,则需确保预测值和真实值在同一范围内。 - 验证 loss 函数是否适配当前任务需求,并调整其参数设定。 #### 4. **CUDA 运算错误** 当启用 CUDA 加速时,任何与 GPU 相关的操作都可能发生潜在风险,尤其是涉及张量形状不匹配或超出设备能力范围的情况。此外,多线程或多进程环境下的同步机制也可能成为隐患之一[^1]。 - 尝试禁用 CUDA 并切换到纯 CPU 模式重新测试流程: ```python device = torch.device('cpu') model.to(device) ``` - 如果仍然存在问题,则进一步排查代码逻辑缺陷。 #### 5. **第三方库冲突** 构建项目依赖项期间指定选项不合理亦或是版本兼容性不佳都会影响最终执行效果。例如 OpenCV 路径定义错误便会造成链接阶段失败[^1]。因此建议仔细核验 CMakeLists.txt 文件内容及其传递给编译器的各项标志位准确性。 --- ### 总结 针对上述提到的各种可能性逐一验证直至定位根本诱因所在为止。同时注意保存好每次修改后的备份以便回滚至稳定状态前的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值