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 () إلى خاصية . من خلال القيام بذلك ، يمكن الوصول إلى نموذج GPU المقيم بواسطة model.cuda
تم إنشاء طريقة cuda
نظرًا لأنها عملية مكلفة نسبيًا ، والتي تتضمن نسخ البيانات من وحدة المعالجة المركزية إلى وحدة معالجة الرسومات. بينما grad
و data
عمليات رخيصة ( O(1)
) ، والتي تسترد فقط المراجع إلى Tensor المقابل. أعتقد أن جعل طريقة cuda
طريقة معقولة.
.cuda () ينسخ بيانات وحدة المعالجة المركزية إلى وحدة معالجة الرسومات. ربما لا تريد الاحتفاظ بالبيانات في وحدة معالجة الرسومات طوال الوقت. هذا يعني أنك تقوم بتخزين البيانات في وحدة معالجة الرسومات فقط عندما تكون ضرورية حقًا.
كما هو مذكور في كلا التعليقين أعلاه ، فإن جعل .cuda
خاصية غير مناسبة. نعيد كائنات جديدة عند الرجوع إلى .cuda()
ويحدث الكثير.
التعليق الأكثر فائدة
تم إنشاء طريقة
cuda
نظرًا لأنها عملية مكلفة نسبيًا ، والتي تتضمن نسخ البيانات من وحدة المعالجة المركزية إلى وحدة معالجة الرسومات. بينماgrad
وdata
عمليات رخيصة (O(1)
) ، والتي تسترد فقط المراجع إلى Tensor المقابل. أعتقد أن جعل طريقةcuda
طريقة معقولة.