Pytorch: ์™œ model.cuda()๊ฐ€ ์†์„ฑ ๋Œ€์‹  ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2017๋…„ 04์›” 15์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pytorch/pytorch

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 ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

cuda ๋Š” CPU์—์„œ GPU๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋น„๊ต์  ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. grad ๋ฐ data ๋Š” ํ•ด๋‹น Tensor์— ๋Œ€ํ•œ ์ฐธ์กฐ๋งŒ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ €๋ ดํ•œ ์ž‘์—…( O(1) )์ž…๋‹ˆ๋‹ค. cuda ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

.cuda()๋Š” CPU ๋ฐ์ดํ„ฐ๋ฅผ GPU์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ GPU์— ํ•ญ์ƒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ •๋ง ํ•„์š”ํ•  ๋•Œ๋งŒ GPU์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๋‘ ์˜๊ฒฌ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด .cuda ๋ฅผ ์†์„ฑ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ถ€์ ์ ˆํ•ฉ๋‹ˆ๋‹ค. .cuda() ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์ƒˆ ๊ฐœ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋งŽ์€ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰