1.
问题:
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 64.00 MiB (GPU 0; 39.59 GiB total capacity; 37.72 GiB already allocated; 38.19 MiB free; 37.83 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
解决方法:
减小batch大小,可以减小每一批次的内存使用。批大小:24➡️12➡️6
减小批量大小(batch size)有几个潜在的好处:
-
减少内存占用: 更小的批量大小意味着每个批次需要的内存更少,这有助于减少GPU内存的占用。特别是在处理大型模型或者数据集时,较小的批量大小可以降低内存消耗,从而减少因内存不足而导致的错误。
-
加快训练速度: 较小的批量大小可能会导致更频繁的参数更新,这有助于加快模型的训练速度。虽然每轮迭代的计算量可能会增加,但由于参数更新更加频繁,整体上可以获得更快的收敛速度。
-
泛化能力: 一些研究表明,通过减小批量大小,模型可能会更好地泛化到新的数据上,从而提高模型的性能。
尽管减小批量大小具有上述好处,但也存在一些潜在的问题:
-
训练时间延长: 由于参数更新更频繁,整体训练时间可能会延长,尤其是在处理较大的数据集时。
-
训练稳定性: 对于某些模型和数据集,较小的批量大小可能导致训练过程的不稳定性,包括震荡、收敛速度下降等问题。
2.
问题:
RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0!
解决;
找到报错的位置,在方法体内,把张量后面加上.to('cuda:0')
补充:
张量(tensor)是深度学习中的一种数据结构,类似于多维数组。在PyTorch等深度学习框架中,张量是进行数值计算的基本数据类型,用来存储和处理数据以及执行各种运算。
张量可以是多维的,可以是标量(0维张量)、向量(1维张量)、矩阵(2维张量)甚至更高维度的数组。在深度学习中,神经网络的输入、输出和参数通常都表示为张量,通过张量之间的运算来实现神经网络模型的训练和推理过程。
张量支持各种数学运算,如加法、减法、乘法、除法、矩阵乘法等,同时也支持广播(broadcasting)、切片(slicing)等操作。在深度学习中,张量是非常重要的数据类型,对于构建和训练神经网络模型起着关键作用。
3.
问题:
AttributeError: 'list' object has no attribute 'float'
4.在计算loss的时候,出现了loss:nan的情况
解决:
(1)推测是值太小,loss = criterion(outputs, batch_y+1e-5) ➡️ loss = criterion(outputs, batch_y+1e-5),但更改后并未解决问题
(2)推测是数据精度问题,如bf16和fp16,但改变精度后并未解决问题
补:
(3)修改学习率learning_rate=0.01 ➡️ 0.001,目前效果良好
学习率在深度学习训练中起着非常重要的作用,它决定了模型参数在每次迭代中更新的幅度。学习率的高低对训练过程和结果有着直接影响:
-
学习率过高:
- 如果学习率设置过高,可能导致参数更新过大,使得模型在参数空间内来回波动,甚至出现数值溢出,最终导致训练不稳定或损失函数出现 NaN。
- 高学习率可能会导致模型无法收敛到最优解,甚至完全偏离最优解,从而影响模型的性能。
-
学习率过低:
- 如果学习率设置过低,模型参数更新的幅度较小,可能导致模型收敛速度过慢,需要更多的迭代次数才能达到收敛状态。
- 过低的学习率也可能导致模型陷入局部最优解或者鞍点,难以跳出局部最优解找到更好的全局最优解。
补充:
1.
2.
4.
问题:
当前 PyTorch 安装不支持 A100-SXM4-40GB GPU 的 CUDA 计算能力(sm_80),而只支持 CUDA 计算能力为 sm_37、sm_50、sm_60 和 sm_70 的设备。
A100-SXM4-40GB with CUDA capability sm_80 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70.
解决方法:
疑似torch版本较低
torch版本由1.12.1 ➡️ 2.0.1