pytorch 使用cpu与mps或ROCm训练时的不同损失

huwehgph  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(234)

我是pytorch的新手,想使用这里的模型:(https://github.com/HardeyPandya/Temporal-Convolutional-Neural-Network-Single-Channel-Speech-Enhancement/tree/main/TCNN
我在MacBook与M1 Pro,也尝试了不同的计算机(Ubuntu,锐龙3900 X,Radeon VII)
我试着在cpu上用一个非常小的数据集来训练它(只有3个历元来检查是否一切看起来都正常工作),并在第一个历元得到了以下结果。

============== 1 epoch ==============
[0 seconds] Begin training...
Loss: 
tensor(0.7866, grad_fn=<AddBackward0>)
Loss: 
tensor(1.5864, grad_fn=<AddBackward0>)
Loss: 
tensor(2.2366, grad_fn=<AddBackward0>)
[38.63273882865906 seconds] End this epoch.

在接下来的几个时期,损失甚至接近于零。
然后我试着在GPU上运行它:
修改型号。ipynb:

if torch.backends.mps.is_available():
    print("MPS AVAILABLE")
    device = torch.device("mps")

# when initialising the model:
model = initialize_config(config["model"])
model.to(device)

修改后的基础训练器.py

# replaced this line
#self.device = self._prepare_device(self.n_gpu, cudnn_deterministic=config["cudnn_deterministic"])
# with this
self.device = torch.device('mps')

它现在似乎可以在GPU上运行,然而损失却无处不在:

tensor(1.3858, device='mps:0', grad_fn=<AddBackward0>)
Loss: 
tensor(9.0829, device='mps:0', grad_fn=<AddBackward0>)
Loss: 
tensor(10.2000, device='mps:0', grad_fn=<AddBackward0>)
[24.909322023391724 seconds] End this epoch.
============== 2 epoch ==============
[0 seconds] Begin training...
Loss: 
tensor(7.4854, device='mps:0', grad_fn=<AddBackward0>)
Loss: 
tensor(14.3712, device='mps:0', grad_fn=<AddBackward0>)
Loss: 
tensor(15.1385, device='mps:0', grad_fn=<AddBackward0>)
[25.140717029571533 seconds] End this epoch.
============== 3 epoch ==============
[0 seconds] Begin training...
Loss: 
tensor(6.0472, device='mps:0', grad_fn=<AddBackward0>)
Loss: 
tensor(11.4786, device='mps:0', grad_fn=<AddBackward0>)
Loss: 
tensor(12.0494, device='mps:0', grad_fn=<AddBackward0>)
[26.356099843978882 seconds] End this epoch.

在使用ROCm的linux机器上我注意到了同样的问题,这里我不需要改变base_trainer.py,无论何时我在gpu上运行,损失是非常高的,但是执行速度要快得多。
有什么主意吗?多谢!

bis0qfac

bis0qfac1#

可能设置种子是你需要的,不确定,除非你完成整个代码。Refer to how to set seed

相关问题