I am on Windows 11, PyTorch 1.13.1. When I set num_workers > 0, training is faster. However, faster is one thing, and correct is another. Loss is not decreasing, and the results are a mess.
If I set num_workers = 0 (the only code change), training is correct.
I am using a custom Dataset
:
class DefaultDataset(Dataset):
def __init__(self,
inputLoader: InputLoader,
settings: Settings):
self._i = 0
self._curIndex = -1
self.inputLoader = inputLoader
self.settings = settings
#=================================================================
def setData(self, res: DataForEval, data):
res.setInput(torch.as_tensor(data, dtype=torch.float))
#=================================================================
def getSize(self) -> int:
return self.inputLoader.getSize()
#=================================================================
def createData(self, data):
res = DataForEval()
self.setData(res, data)
return res
#=================================================================
def getProgress(self):
return self._i / len(self)
#=================================================================
def __len__(self):
return self.getSize()
#=================================================================
def __getitem__(self, index):
self._i += 1
self._curIndex = index
if (self.settings.cache is not None):
data = self.settings.cache.getData(index)
if (data is not None):
return data.toDict()
data = self.inputLoader.getData(index)
res = self.createData(data)
res.setDataIndex(index)
if isinstance(res, DataForEval):
if (self.settings.cache is not None):
self.settings.cache.addData(index, res)
return res.toDict()
return res
InputLoader
is my class, that load raw data from files. DataForEval
is a wrapper around a dictionary to have some helper methods, and cache
is again a dictionary wrapper that stores loaded data under key (index).