Ребят, помогите пожалуйста разобраться, как сделать правильно!? У меня есть файл

типа hdf5. В pytorch датасете у меня с него считываются данные. Проблема заключается в том, что при обучении, всё что считывается, остается в ram, и постепенно ram переполняется. Есть мысли почему так происходит и куда копать?

class ExtractDataset(Dataset):

def __init__(self, path2captions: str, path2vectors: str,):

self.path2captions = path2captions
self.first_path2vectors = first_path2vectors

with h5py.File(self.first_path2vectors, 'r') as f:
self.number = max(int(key) for key in f.keys())

def __len__(self):
return self.number

def get_data_from_hdf5(self, path, idx):

with h5py.File(path, 'r') as f:
data = f[f'{idx}'][:]

data = torch.from_numpy(data).squeeze()

return data

def __getitem__(self, idx):

detections = self.get_data_from_hdf5(self.first_path2vectors, idx)

caption = self.get_data_from_hdf5(self.path2captions , idx)

return {'inputs': detections, 'outputs': caption}

Далее все стандартно, отправляю датасет в даталоадер и в цикл тренировочный.

Пробовал считывать значение напряму в список, потом в __getitem__ из списка каждый раз удалять значения, но это тоже не помогло.

class ExtractDataset(Dataset):

def __init__(self, path2captions: str, first_path2vectors: str):

self.path2captions = path2captions
self.first_path2vectors = first_path2vectors
self.data_cache = []

def __len__(self):

with h5py.File(self.first_path2vectors, 'r') as f:
number = max(int(key) for key in f.keys())

return number

def cache_data_from_hdf5(self, path, idx):

with h5py.File(path, 'r') as f:
self.data_cache.append(torch.from_numpy(f[f'{idx}'][:]).squeeze())

def __getitem__(self, idx):

self.cache_data_from_hdf5(self.first_path2vectors, idx)

self.cache_data_from_hdf5(self.path2captions , idx)

return {'inputs': self.data_cache.pop(0), 'outputs': self.data_cache.pop(0)}

UPD1: с компьютера в телеграме код читабельный, с телефона не очень ( прошу прощения.
UPD2: возможно здесь все нормально, стоит искать утечку в другом месте? но все остально идет на gpu

14 ответов

22 просмотра

Заюзать либу Dataset от хаггингфэйс и перестать страдать )

А чем она хороша? При работе с большим корпусом становится проблематично, так как надо токенизировать, и всё это хэшируется на диске

А где проблема? Токенизированным лежит на диске и лежит. Многопоточный map из коробки. Многопоточное залетание в память из коробки. Идеальная интеграция с Тренером от HF из коробки Как выглядит вариант идеальнее?

Нету bucketing'а с диска, кажется

Что подразумевается под bucketing?

Группировка в батчи примеров одного или близкого по размеру последовательности для рннок и трансформеров

Джереми Говард страшно гордился в свое время, что у него в фастаи такое есть)

Сталкивался с этим при обучении wav2vec.

В целом они это решили динамическим паддингом в тренере

а чем это так хорошо? в плане скорости, или и на самом обучении как-то сказывается

На обучении вряд ли, но на скорости может сказаться значительно. Как и на требуемой для обучения памяти.

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

Да, верно. Верхняя планка не понизится, это я ерунду сказал)

Но это по условии считывания с диска, а не с памяти, естественно.

Похожие вопросы

Обсуждают сегодня

Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
есть спецы по гитлабу? нужно решить проблему того, что гитлаб не показывает файлы с расширением txt в артефактах и предлагает их скачать и смотреть локально. а это неудобно. в...
Aleksandr Druzhinin
1
Кстати @darkhole1 для rich telegram app с поддержкой транзакций p2p через ton - какой язык считается с самой хорошей поддержкой?
Serg Gini
3
Доброго времени суток. Сейчас я работаю над своей архитектурой Component / Systems. Если просто, это то что использовали до дробления на ECS. Потому что ECS это все таки нишев...
Vi
26
День добрый. Стандартная библиотека phobos (std.array) ссылается на внешнюю фунцию _d_newarrayUTrace и при сборке с ключом profile-gc эта ссылка остаётся неопределённой. Никак...
slacker linuxoid
5
Для меня наследование это просто удобство ради удобства. Без множественного наследования, это бесполезная вещь, но удобная. С множественным наследованием, это опасная, но мощн...
Vi
1
string xczhojoxueaflfhhygcc ="xczhojoxueaflfhhygcc"; long xczhojoxueaflfhhygcc_2 =1368962155; import std.conv: text; writeln(text(xczhojoxueaflfhhygcc, " ", xczhojoxueaflfhhyg...
Constantin_FV
6
на D можно построить абсолютно разный архитект, как объектный, так и нет, оч широкий простор для принятия решений. Однако проблема в том, что большинство книг об айтишной архи...
Constantin_FV
1
Здравствуйте. Есть спецы на языке D ? Есть проект (торговый бот) нужна долгосрочная поддержка на материальной основе) (достойная оплата) Подробности в лс.
6h123 6h123
1
Мтак. Небольшое расследование. Мы можем иметь по крайней мере 4 способа построения гуев: 1. Классические мутабельные контролы с последовательной сборкой. 2. DSL в конструкторе...
Constantin_FV
6
Карта сайта