在最新版本的 PyTorch 中,让所有张量默认使用特定设备的最佳实践是什么?

乔西

在pytorch中,如果我做类似的事情

import torch
x = torch.randn(3)
y = x + 5

默认情况下,所有张量都对应于“cpu”设备。有什么办法可以做到,默认情况下,所有张量都在另一个设备上(例如“cuda:0”)?

我知道在创建张量时我总是可以小心地添加.cuda()或指定 cuda,但是如果我可以直接在程序开始时更改默认设备并完成它,那就太好了,所以它torch.randn(3)来自所需的设备无需每次都指定。

或者由于某种原因这会是一件坏事吗?例如,有什么理由我不希望默认情况下每个张量/操作都在 cuda 上完成?

铜钙铁

Pytorch 有一个可选的函数来改变张量的默认类型set_default_tensor_type在主脚本上应用默认类型:

>>> import torch
>>>
>>> if __name__ == '__main__':
...     cuda = torch.cuda.is_available()
...     if cuda:
...         torch.set_default_tensor_type('torch.cuda.FloatTensor')
...     a = torch.randn(3,3)
...     print(a.device)
...
cuda:0

或者由于某种原因这会是一件坏事吗?例如,有什么理由我不希望默认情况下每个张量/操作都在 cuda 上完成?

我找不到任何参考资料或任何文件来回答这个问题。但是,在我看来,这是为了避免 GPU 内存中的内存碎片

我不是专家,但是内存中的数据应该以一种有效的方式排列,否则,多余的空间会导致OOM。这就是为什么默认情况下,无论您的模型有多少参数,Tensorflow 都会占用您所有 GPU 的内存。只需设置 8 amp 文档的张量形状倍数即可提高空间和速度

在实践中,当 A 和 B 维度是 8 的倍数时,可以获得更高的性能。

总之,我认为最好手动控制张量的设备,而不是将其设置为 gpu 为默认值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章