|Data type||dtype||Tensor types|
|32-bit floating point||
|64-bit floating point||
|16-bit floating point||
|8-bit integer (unsigned)||
|8-bit integer (signed)||
|16-bit integer (signed)||
|32-bit integer (signed)||
|64-bit integer (signed)||
torch.device contains a device type (
'cuda') and optional device ordinal for the
device type. If the device ordinal is not present, this represents the current device for the device type;
torch.Tensor constructed with device
'cuda' is equivalent to
'cuda:X' where X is the result of
torch.device can be constructed via a string or via a string and device ordinal
Via a string:
>>> torch.device('cuda:0') device(type='cuda', index=0) >>> torch.device('cpu') device(type='cpu') >>> torch.device('cuda') # current cuda device device(type='cuda')
Via a string and device ordinal:
>>> torch.device('cuda', 0) device(type='cuda', index=0) >>> torch.device('cpu', 0) device(type='cpu', index=0)
torch.device argument in functions can generally be substituted with a string.
This allows for fast prototyping of code.
>>> # Example of a function that takes in a torch.device >>> cuda1 = torch.device('cuda:1') >>> torch.randn((2,3), device=cuda1)
>>> # You can substitute the torch.device with a string >>> torch.randn((2,3), 'cuda:1')
For legacy reasons, a device can be constructed via a single device ordinal, which is treated
as a cuda device. This matches
Tensor.get_device(), which returns an ordinal for cuda
tensors and is not supported for cpu tensors.
>>> torch.device(1) device(type='cuda', index=1)
Methods which take a device will generally accept a (properly formatted) string or (legacy) integer device ordinal, i.e. the following are all equivalent:
>>> torch.randn((2,3), device=torch.device('cuda:1')) >>> torch.randn((2,3), device='cuda:1') >>> torch.randn((2,3), device=1) # legacy
torch.layout is an object that represents the memory layout of a
torch.Tensor. Currently, we support
torch.strided (dense Tensors)
and have experimental support for
torch.sparse_coo (sparse COO Tensors).
torch.strided represents dense Tensors and is the memory layout that
is most commonly used. Each strided tensor has an associated
torch.Storage, which holds its data. These tensors provide
view of a storage. Strides are a list of integers: the k-th stride
represents the jump in the memory necessary to go from one element to the
next one in the k-th dimension of the Tensor. This concept makes it possible
to perform many tensor operations efficiently.
>>> x = torch.Tensor([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) >>> x.stride() (5, 1) >>> x.t().stride() (1, 5)
For more information on
torch.sparse_coo tensors, see torch.sparse.