Spre deosebire de Dataset-ul standard bazat pe index (map-style) care necesită implementarea metodelor __len__ și __getitem__, clasa IterableDataset implementează generatorul __iter__. Este proiectată pentru seturi de date masive (tera/petabytes) stocate în cloud (AWS S3) sau fluxuri continue de mesagerie.
import torch
from torch.utils.data import IterableDataset, DataLoader
class TextStreamingDataset(IterableDataset):
def __init__(self, file_path):
self.file_path = file_path
def __iter__(self):
worker_info = torch.utils.data.get_worker_info()
with open(self.file_path, "r") as f:
for idx, line in enumerate(f):
# Dacă avem mai mulți workers, distribuim liniile interfoliat
if worker_info is not None and idx % worker_info.num_workers != worker_info.id:
continue
yield torch.tensor([float(x) for x in line.strip().split(",")])
loader = DataLoader(TextStreamingDataset("date_masive.csv"), batch_size=64, num_workers=2)
La utilizarea mai multor procese paralele (num_workers > 1), este esențială împărțirea iteratorului conform ID-ului fiecărui worker pentru a evita citirea duplicată a mostrelor.
Întrebări & Exemple practice:
Procesarea Streaming a Datelor Masive cu IterableDatasetAi o întrebare despre Procesarea Streaming a Datelor Masive cu IterableDataset sau ai descoperit un truc, prompt sau fragment de cod util? Distribuie-l cu ceilalți membri ai comunității!
Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau resurse pentru această pagină. Dacă ai testat un prompt sau ai un snippet util, adaugă-l mai jos pentru comunitate.