使用mxnet时,在构建和训练模块mod
之后,我调用方法mod.get_params()
来检查模型的权重和偏差。
但是,我发现即使我在创建模块时将上下文设置为mx.gpu(0)
,get_params
方法的输出也始终显示参数(权重和偏差)都在{{1 }}。见下文:
我想知道权重是否真的在cpu上,所以我对程序进行了定时,发现如果我将上下文设置为cpu(0)
而不是gpu(0)
,实际上要快得多。因此,我认为权重实际上是在gpu上,否则训练不会那么快。但是,为什么cpu(0)
方法显示我的权重是在cpu上?
答案 0 :(得分:1)
调用mod.get_params
同步GPU内存中的参数,并将副本放在CPU内存中。您在cpu上下文中看到了副本,因此无需担心。
如果参数“脏”,则会调用_sync_params_from_devices
。 (即不同步);其中'设备'是GPU(s)。