Pytorch 0.4.0: There are three ways to create tensors on CUDA device. Is there some difference between them?
I failed in the third way. t3
is still on CPU. No idea why.
a = np.random.randn(1, 1, 2, 3)
t1 = torch.tensor(a)
t1 = t3.to(torch.device('cuda'))
t2 = torch.tensor(a)
t2 = t2.cuda()
t3 = torch.tensor(a, device=torch.device('cuda'))
pytorch tensor
add a comment |
I failed in the third way. t3
is still on CPU. No idea why.
a = np.random.randn(1, 1, 2, 3)
t1 = torch.tensor(a)
t1 = t3.to(torch.device('cuda'))
t2 = torch.tensor(a)
t2 = t2.cuda()
t3 = torch.tensor(a, device=torch.device('cuda'))
pytorch tensor
add a comment |
I failed in the third way. t3
is still on CPU. No idea why.
a = np.random.randn(1, 1, 2, 3)
t1 = torch.tensor(a)
t1 = t3.to(torch.device('cuda'))
t2 = torch.tensor(a)
t2 = t2.cuda()
t3 = torch.tensor(a, device=torch.device('cuda'))
pytorch tensor
I failed in the third way. t3
is still on CPU. No idea why.
a = np.random.randn(1, 1, 2, 3)
t1 = torch.tensor(a)
t1 = t3.to(torch.device('cuda'))
t2 = torch.tensor(a)
t2 = t2.cuda()
t3 = torch.tensor(a, device=torch.device('cuda'))
pytorch tensor
pytorch tensor
edited Nov 16 '18 at 6:37
Umang Gupta
3,56711740
3,56711740
asked Nov 16 '18 at 4:01
laridzhanglaridzhang
686
686
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
All three methods worked for me.
In 1 and 2, you create a tensor on CPU and then move it to GPU when you use .to(device)
or .cuda()
. They are same here.
However, when you use .to(device)
method you can explicitly tell torch to move to specific GPU by setting device=torch.device("cuda:<id>")
. with .cuda()
you have to do .cuda(<id>)
to move to some particular GPU.
Why do these two methods exist then?
.to(device)
was introduced in 0.4 because it is easier to declare device
variable at top of the code as
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
and use .to(device)
everywhere. This makes it quite easy to switch from CPU to GPU and vice-versa
Before this, we had to use .cuda()
and your code will have if
check for cuda.is_available()
everywhere which made it cumbersome to switch between GPU/CPU.
The third method doesn't create a tensor on CPU and directly copies data to GPU, which is more efficient.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53331247%2fpytorch-0-4-0-there-are-three-ways-to-create-tensors-on-cuda-device-is-there-s%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
All three methods worked for me.
In 1 and 2, you create a tensor on CPU and then move it to GPU when you use .to(device)
or .cuda()
. They are same here.
However, when you use .to(device)
method you can explicitly tell torch to move to specific GPU by setting device=torch.device("cuda:<id>")
. with .cuda()
you have to do .cuda(<id>)
to move to some particular GPU.
Why do these two methods exist then?
.to(device)
was introduced in 0.4 because it is easier to declare device
variable at top of the code as
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
and use .to(device)
everywhere. This makes it quite easy to switch from CPU to GPU and vice-versa
Before this, we had to use .cuda()
and your code will have if
check for cuda.is_available()
everywhere which made it cumbersome to switch between GPU/CPU.
The third method doesn't create a tensor on CPU and directly copies data to GPU, which is more efficient.
add a comment |
All three methods worked for me.
In 1 and 2, you create a tensor on CPU and then move it to GPU when you use .to(device)
or .cuda()
. They are same here.
However, when you use .to(device)
method you can explicitly tell torch to move to specific GPU by setting device=torch.device("cuda:<id>")
. with .cuda()
you have to do .cuda(<id>)
to move to some particular GPU.
Why do these two methods exist then?
.to(device)
was introduced in 0.4 because it is easier to declare device
variable at top of the code as
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
and use .to(device)
everywhere. This makes it quite easy to switch from CPU to GPU and vice-versa
Before this, we had to use .cuda()
and your code will have if
check for cuda.is_available()
everywhere which made it cumbersome to switch between GPU/CPU.
The third method doesn't create a tensor on CPU and directly copies data to GPU, which is more efficient.
add a comment |
All three methods worked for me.
In 1 and 2, you create a tensor on CPU and then move it to GPU when you use .to(device)
or .cuda()
. They are same here.
However, when you use .to(device)
method you can explicitly tell torch to move to specific GPU by setting device=torch.device("cuda:<id>")
. with .cuda()
you have to do .cuda(<id>)
to move to some particular GPU.
Why do these two methods exist then?
.to(device)
was introduced in 0.4 because it is easier to declare device
variable at top of the code as
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
and use .to(device)
everywhere. This makes it quite easy to switch from CPU to GPU and vice-versa
Before this, we had to use .cuda()
and your code will have if
check for cuda.is_available()
everywhere which made it cumbersome to switch between GPU/CPU.
The third method doesn't create a tensor on CPU and directly copies data to GPU, which is more efficient.
All three methods worked for me.
In 1 and 2, you create a tensor on CPU and then move it to GPU when you use .to(device)
or .cuda()
. They are same here.
However, when you use .to(device)
method you can explicitly tell torch to move to specific GPU by setting device=torch.device("cuda:<id>")
. with .cuda()
you have to do .cuda(<id>)
to move to some particular GPU.
Why do these two methods exist then?
.to(device)
was introduced in 0.4 because it is easier to declare device
variable at top of the code as
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
and use .to(device)
everywhere. This makes it quite easy to switch from CPU to GPU and vice-versa
Before this, we had to use .cuda()
and your code will have if
check for cuda.is_available()
everywhere which made it cumbersome to switch between GPU/CPU.
The third method doesn't create a tensor on CPU and directly copies data to GPU, which is more efficient.
edited Nov 16 '18 at 6:45
answered Nov 16 '18 at 6:37
Umang GuptaUmang Gupta
3,56711740
3,56711740
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53331247%2fpytorch-0-4-0-there-are-three-ways-to-create-tensors-on-cuda-device-is-there-s%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown