device机制
根据官网推荐和自己实验,如果想在一个torch module的内部生成一个常量(它不算模型参数,无法自动分配设备,但是参与运算),最好的办法就是
1. __init__ 中生成,forward时type_as一下
2. 在nn.Module. __init__() 中self.register_buffer()
如果在 __init__ 中使用self.device属性,仍会发生不同设备异常
Graphics Processing Unit (GPU) — PyTorch Lightning 1.6.1 documentation
LightningModules
一般都是一个LM嵌套一堆nn.Modules
实验发现,一个LM嵌套一堆pl.LightningModules也是可以的,官网也有这样的用法(参考trainer.predict)
但是没有什么好处。regisiter在torch里也能做