/usr/local/lib64/python3.6/site-packages/torch/utils/data/_utils
NameSizeModeActions
__pycache__/-0755rm
collate.py36540644editdlrm
fetch.py19260644editdlrm
pin_memory.py20970644editdlrm
signal_handling.py31560644editdlrm
worker.py126870644editdlrm
__init__.py15960644editdlrm
Edit: /usr/local/lib64/python3.6/site-packages/torch/utils/data/_utils/pin_memory.py (2097B)
r""""Contains definitions of the methods used by the _BaseDataLoaderIter to put fetched tensors into pinned memory. These **needs** to be in global scope since Py2 doesn't support serializing static methods. """ import collections import queue import torch from torch._six import string_classes from . import MP_STATUS_CHECK_INTERVAL from torch._utils import ExceptionWrapper def _pin_memory_loop(in_queue, out_queue, device_id, done_event): # This setting is thread local, and prevents the copy in pin_memory from # consuming all CPU cores. torch.set_num_threads(1) torch.cuda.set_device(device_id) # See NOTE [ Data Loader Multiprocessing Shutdown Logic ] for details on the # logic of this function. while not done_event.is_set(): try: r = in_queue.get(timeout=MP_STATUS_CHECK_INTERVAL) except queue.Empty: continue idx, data = r if not done_event.is_set() and not isinstance(data, ExceptionWrapper): try: data = pin_memory(data) except Exception: data = ExceptionWrapper( where="in pin memory thread for device {}".format(device_id)) r = (idx, data) while not done_event.is_set(): try: out_queue.put(r, timeout=MP_STATUS_CHECK_INTERVAL) break except queue.Full: continue del r # save memory def pin_memory(data): if isinstance(data, torch.Tensor): return data.pin_memory() elif isinstance(data, string_classes): return data elif isinstance(data, collections.abc.Mapping): return {k: pin_memory(sample) for k, sample in data.items()} elif isinstance(data, tuple) and hasattr(data, '_fields'): # namedtuple return type(data)(*(pin_memory(sample) for sample in data)) elif isinstance(data, collections.abc.Sequence): return [pin_memory(sample) for sample in data] elif hasattr(data, "pin_memory"): return data.pin_memory() else: return data