Использование памяти намного выше, чем должно быть - PullRequest
1 голос
/ 01 мая 2019

Я использую простой метод для извлечения дескрипторов из изображений и сохранения их на диск в файл .csv.У меня есть около 1M изображений, и моя сеть возвращает 512 объектов на изображение (float32).

Поэтому, по моим оценкам, в конце цикла у меня будет 1e6 * 512 * 32/4 / 1e9 = 4.1GB.Однако я заметил, что он использует более чем в два раза больше памяти.

index - это string, а class_id - это int64, поэтому я не думаю, что они являются виновником здесь.

Я уже пытался использовать gc.collect(), но безуспешно.Как вы думаете, мой код оставляет ссылки позади?

Вот метод:

def prepare_gallery(self, data_loader, TTA, pbar=False, dump_path=None):
    '''Compute embeddings for a data_loader and store it in model.
    This is required before predicting to a test set.
    New entries should be removed from data before calling this function
    to avoid inferring on useless images.
    data_loader: A linear loader containing the database that test is
    compared against.'''
    self.set_mode('valid')
    self.net.cuda()
    n_iter = len(data_loader.dataset) / data_loader.batch_size
    if pbar:
        loader = tqdm(enumerate(data_loader), total=n_iter)
    else:
        loader = enumerate(data_loader)
    # Run inference and get embeddings
    feat_list = []
    index_list = []
    class_list = []
    for i, (index, im, class_id) in loader:
        with torch.no_grad():
            feat = tta(self.net, im)
            # Returns something like np.random.random((32, 512))

        feat_list.extend(feat)
        index_list.extend(index)
        class_list.extend(class_id.item())

    if dump_path is not None:
        np.save(dump_path + '_ids', index_list)
        np.save(dump_path + '_cls', class_list)
        np.save(dump_path + '_feat', feat_list)

    return np.asarray(index_list), np.asarray(feat_list), np.asarray(class_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...