MCPcopy Create free account
hub / github.com/OPPO-Mente-Lab/X2I / _PreprocessSingleProcessDataLoaderIter

Class _PreprocessSingleProcessDataLoaderIter

core/data/dataloader.py:75–176  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

73
74
75class _PreprocessSingleProcessDataLoaderIter(_BaseDataLoaderIter):
76
77 def __init__(self, loader, preprocess: Preprocess=None, queue_max_size=2):
78 self._preprocess = preprocess
79 if self._preprocess is not None and self._preprocess.has_cpu_preprocess():
80 org_create_fetcher = _DatasetKind.create_fetcher
81 _DatasetKind.create_fetcher = _create_fetcher_proxy(org_create_fetcher, self._preprocess)
82
83 super(_PreprocessSingleProcessDataLoaderIter, self).__init__(loader)
84
85 self._dataset_fetcher = _DatasetKind.create_fetcher(
86 self._dataset_kind, self._dataset, self._auto_collation, self._collate_fn, self._drop_last)
87
88 if self._preprocess is not None and self._preprocess.has_cpu_preprocess():
89 _DatasetKind.create_fetcher = org_create_fetcher
90
91 self._timeout = self._timeout if self._timeout > 0 else (12 * _utils.MP_STATUS_CHECK_INTERVAL)
92
93 if self._preprocess is not None and self._preprocess.has_gpu_preprocess():
94 self._stopped = False
95 self._stream = torch.cuda.Stream()
96 print(f"xxxxxx _PreprocessSingleProcessDataLoaderIter queue_max_size: {queue_max_size}")
97 self._data_queue = queue.Queue(maxsize=queue_max_size)
98 self._device_id = torch.cuda.current_device()
99 self._preprocess_thread_done_event = threading.Event()
100 self._preprocess_thread = threading.Thread(target=self._preprocess_loop)
101 self._preprocess_thread.daemon = True
102 self._preprocess_thread.start()
103
104 def _preprocess_loop(self):
105 # torch.set_num_threads(1)
106 torch.cuda.set_device(self._device_id)
107 while not self._preprocess_thread_done_event.is_set():
108 while not self._stopped:
109 index = None
110 data = None
111 try:
112 index = self._next_index()
113 data = self._dataset_fetcher.fetch(index)
114 if self._pin_memory:
115 data = _utils.pin_memory.pin_memory(data)
116 # print(f"_preprocess_loop data is {type(data)}")
117 # print(f"************** _PreprocessSingleProcessDataLoaderIter _preprocess_loop **************")
118 if self._preprocess is not None and self._preprocess.has_gpu_preprocess():
119 with torch.no_grad(), torch.cuda.stream(self._stream):
120 data = self._preprocess.gpu_preprocess(data, self._stream)
121 # print(f"xxxxxx data: {data.keys()})")
122 self._stream.synchronize()
123 # print(f"xxxxxx _stream.synchronize")
124 # self._data_queue.put((index, data))
125 except StopIteration as e:
126 # print("xxxxxx StopIteration")
127 self._stopped = True
128 index = None
129 data = None
130 except Exception as e:
131 data = _utils.ExceptionWrapper(where=f"in _preprocess_loop thread for device {self._device_id}")
132 r = (index, data)

Callers 2

_get_iteratorMethod · 0.85
_get_iteratorMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected