Pytorch: Warum ist model.cuda() eine Klassenmethode anstelle von property ?

Erstellt am 15. Apr. 2017  ·  3Kommentare  ·  Quelle: 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

Wenn .data und .grad Klassenattribute sind, dann kann .cuda() als Eigenschaft behalten werden, damit man b = a.cuda machen kann. Ich mache einen Vorschlag und denke, dass dies die API-Konsistenz erhöhen würde, da .cuda() , .data und .grad torch.Tensor sind, sodass cuda() in eine Eigenschaft geändert werden kann . Auf diese Weise kann über model.cuda das GPU-residente Modell zugegriffen werden

Hilfreichster Kommentar

cuda wird zu einer Methode, da es sich um eine relativ teure Operation handelt, bei der Daten von der CPU auf die GPU kopiert werden. Während grad und data billige Operationen sind ( O(1) ), die nur Verweise auf den entsprechenden Tensor abrufen. Ich denke, es ist vernünftig, cuda zu einer Methode zu machen.

Alle 3 Kommentare

cuda wird zu einer Methode, da es sich um eine relativ teure Operation handelt, bei der Daten von der CPU auf die GPU kopiert werden. Während grad und data billige Operationen sind ( O(1) ), die nur Verweise auf den entsprechenden Tensor abrufen. Ich denke, es ist vernünftig, cuda zu einer Methode zu machen.

.cuda() kopiert CPU-Daten auf die GPU. Wahrscheinlich möchten Sie die Daten nicht die ganze Zeit in der GPU behalten. Das bedeutet, dass Sie nur dann Daten in der GPU speichern, wenn es wirklich notwendig ist.

Wie in den beiden obigen Kommentaren erwähnt, ist es unangemessen, .cuda zu einer Eigenschaft zu machen. Wir geben neue Objekte zurück, wenn auf .cuda() verwiesen wird, und es passiert viel.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen