import torch
from torch.autograd import Variable
a = Variable(torch.Tensor([1, 2]))
if torch.cuda.is_available():
b = a.cuda()
b_data = b.data
b_grad = b.grad
b_grad_data = b.grad.data
.data
๋ฐ .grad
๊ฐ ํด๋์ค ์์ฑ์ด๋ฉด .cuda()
๋ฅผ ์์ฑ์ผ๋ก ์ ์งํ์ฌ b = a.cuda
๋ฅผ ์ํํ ์ ์์ต๋๋ค. .cuda()
, .data
๋ฐ .grad
๊ฐ torch.Tensor
์ด๋ฏ๋ก cuda() ๋ฅผ ์์ฑ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ผ๋ฏ๋ก API ์ผ๊ด์ฑ์ด ํฅ์๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ ์ ์ํฉ๋๋ค. . ์ด๋ ๊ฒ ํ๋ฉด GPU ์์ฃผ ๋ชจ๋ธ์ model.cuda
๋ก ์ก์ธ์คํ ์ ์์ต๋๋ค.
cuda
๋ CPU์์ GPU๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ๋น๊ต์ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ด๊ธฐ ๋๋ฌธ์ ๋ฉ์๋๋ก ๋ง๋ค์ด์ก์ต๋๋ค. grad
๋ฐ data
๋ ํด๋น Tensor์ ๋ํ ์ฐธ์กฐ๋ง ๊ฒ์ํ๋ ์ ๋ ดํ ์์
( O(1)
)์
๋๋ค. cuda
๋ฉ์๋๋ฅผ ๋ง๋๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
.cuda()๋ CPU ๋ฐ์ดํฐ๋ฅผ GPU์ ๋ณต์ฌํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ GPU์ ํญ์ ์ ์งํ๊ณ ์ถ์ง๋ ์์ ๊ฒ์ ๋๋ค. ์ฆ, ์ ๋ง ํ์ํ ๋๋ง GPU์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
์์ ๋ ์๊ฒฌ์์ ์ธ๊ธํ๋ฏ์ด .cuda
๋ฅผ ์์ฑ์ผ๋ก ๋ง๋๋ ๊ฒ์ ๋ถ์ ์ ํฉ๋๋ค. .cuda()
๋ฅผ ์ฐธ์กฐํ ๋ ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ณ ๋ง์ ์ผ์ด ๋ฐ์ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
cuda
๋ CPU์์ GPU๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ๋น๊ต์ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ด๊ธฐ ๋๋ฌธ์ ๋ฉ์๋๋ก ๋ง๋ค์ด์ก์ต๋๋ค.grad
๋ฐdata
๋ ํด๋น Tensor์ ๋ํ ์ฐธ์กฐ๋ง ๊ฒ์ํ๋ ์ ๋ ดํ ์์ (O(1)
)์ ๋๋ค.cuda
๋ฉ์๋๋ฅผ ๋ง๋๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.