Pytorch: لماذا يعتبر model.cuda () طريقة صنف بدلا من خاصية؟

تم إنشاؤها على ١٥ أبريل ٢٠١٧  ·  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 () إلى خاصية . من خلال القيام بذلك ، يمكن الوصول إلى نموذج GPU المقيم بواسطة model.cuda

التعليق الأكثر فائدة

تم إنشاء طريقة cuda نظرًا لأنها عملية مكلفة نسبيًا ، والتي تتضمن نسخ البيانات من وحدة المعالجة المركزية إلى وحدة معالجة الرسومات. بينما grad و data عمليات رخيصة ( O(1) ) ، والتي تسترد فقط المراجع إلى Tensor المقابل. أعتقد أن جعل طريقة cuda طريقة معقولة.

ال 3 كومينتر

تم إنشاء طريقة cuda نظرًا لأنها عملية مكلفة نسبيًا ، والتي تتضمن نسخ البيانات من وحدة المعالجة المركزية إلى وحدة معالجة الرسومات. بينما grad و data عمليات رخيصة ( O(1) ) ، والتي تسترد فقط المراجع إلى Tensor المقابل. أعتقد أن جعل طريقة cuda طريقة معقولة.

.cuda () ينسخ بيانات وحدة المعالجة المركزية إلى وحدة معالجة الرسومات. ربما لا تريد الاحتفاظ بالبيانات في وحدة معالجة الرسومات طوال الوقت. هذا يعني أنك تقوم بتخزين البيانات في وحدة معالجة الرسومات فقط عندما تكون ضرورية حقًا.

كما هو مذكور في كلا التعليقين أعلاه ، فإن جعل .cuda خاصية غير مناسبة. نعيد كائنات جديدة عند الرجوع إلى .cuda() ويحدث الكثير.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات