Pytorch: Почему память, занятая переменной тензор, так мала? - PullRequest
0 голосов
/ 25 января 2019

В Pytorch 1.0.0 я обнаружил, что переменная tensor занимает очень мало памяти.Интересно, как он хранит так много данных?Вот код:

a = np.random.randn(1, 1, 128, 256)
b = torch.tensor(a, device=torch.device('cpu'))

a_size = sys.getsizeof(a)
b_size = sys.getsizeof(b)

a_size равно 262288. b_size равно 72.

1 Ответ

0 голосов
/ 25 января 2019

Ответ состоит из двух частей. Из документации sys.getsizeof, во-первых

Все встроенные объекты будут возвращать правильные результаты, но это не должно выполняться для сторонних расширений, поскольку это зависит от реализации.

так что может быть, что для тензоров __sizeof__ не определено или определено иначе, чем вы ожидаете - на эту функцию нельзя положиться. Во-вторых

Учитывается только потребление памяти, непосредственно относящееся к объекту, но не потребление памяти объектами, к которым он относится.

, что означает, что если объект torch.Tensor просто содержит ссылку на фактическую память, это не будет отображаться в sys.getsizeof. Это действительно так, если вы проверите размер базового хранилища , вы увидите ожидаемое число

import torch, sys
b = torch.randn(1, 1, 128, 256, dtype=torch.float64)
sys.getsizeof(b)
>> 72
sys.getsizeof(b.storage())
>> 262208

Примечание. Я явно устанавливаю dtype на float64, поскольку это значение по умолчанию dtype в numpy, тогда как torch использует float32 по умолчанию.

...