Hi. Thank you for the reply. But it does not work yet, let me show you what I did.
First please let me write what is working without multiprocessing
. The makePrediction
function takes the image as input and prints the label of class.
def makePrediction(image_loc):
img = open_image(image_loc)
pred_class,pred_idx,outputs = learn_gender_eth.predict(img)
outputs[None]
thresh = 0.4
labelled_preds = [' '.join([learn_gender_eth.data.classes[i] for i,p in enumerate(pred) if p > thresh]) for pred in outputs[None]]
print (labelled_preds)
My input is some image:
process(PosixPath('utkface/crop_part1/64_1_0_20170110140833569.jpg.chip.jpg'))
This works perfectly!
Now, I want to use multiprocessing
. I make the following code.
from multiprocessing import Pool
p = Pool(processes=20)
data = p.map(makePrediction, Path(path/"utkface/crop_part1/").ls()[0:4])
p.close()
print(data)
Here, Path(path/"utkface/crop_part1/").ls()[0:6]
is list of images as shown below:
[PosixPath('utkface/crop_part1/64_1_0_20170110140833569.jpg.chip.jpg'),
PosixPath('utkface/crop_part1/26_1_0_20170104165749289.jpg.chip.jpg'),
PosixPath('utkface/crop_part1/1_0_2_20161219162852759.jpg.chip.jpg'),
PosixPath('utkface/crop_part1/43_0_4_20170104000923085.jpg.chip.jpg')]
But it gives an error
---------------------------------------------------------------------------
RemoteTraceback Traceback (most recent call last)
RemoteTraceback:
"""
Traceback (most recent call last):
File "/media/raghav/workspace/anaconda3/lib/python3.7/multiprocessing/pool.py", line 121, in worker
result = (True, func(*args, **kwds))
File "/media/raghav/workspace/anaconda3/lib/python3.7/multiprocessing/pool.py", line 44, in mapstar
return list(map(*args))
File "<ipython-input-55-2edee360c795>", line 3, in makePrediction
pred_class,pred_idx,outputs = learn_gender_eth.predict(img)
File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/fastai/basic_train.py", line 374, in predict
batch = self.data.one_item(item)
File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/fastai/basic_data.py", line 181, in one_item
return self.one_batch(ds_type=DatasetType.Single, detach=detach, denorm=denorm, cpu=cpu)
File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/fastai/basic_data.py", line 168, in one_batch
try: x,y = next(iter(dl))
File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/fastai/basic_data.py", line 75, in __iter__
for b in self.dl: yield self.proc_batch(b)
File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 348, in __next__
data = _utils.pin_memory.pin_memory(data)
File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/torch/utils/data/_utils/pin_memory.py", line 51, in pin_memory
return [pin_memory(sample) for sample in data]
File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/torch/utils/data/_utils/pin_memory.py", line 51, in <listcomp>
return [pin_memory(sample) for sample in data]
File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/torch/utils/data/_utils/pin_memory.py", line 43, in pin_memory
return data.pin_memory()
RuntimeError: cuda runtime error (3) : initialization error at /tmp/pip-req-build-58y_cjjl/aten/src/THC/THCCachingHostAllocator.cpp:296
"""
The above exception was the direct cause of the following exception:
RuntimeError Traceback (most recent call last)
<ipython-input-58-28845f1c4938> in <module>
1 from multiprocessing import Pool
2 p = Pool(processes=20)
----> 3 data = p.map(makePrediction, Path(path/"utkface/crop_part1/").ls()[0:6])
4 p.close()
5 print(data)
/media/raghav/workspace/anaconda3/lib/python3.7/multiprocessing/pool.py in map(self, func, iterable, chunksize)
266 in a list that is returned.
267 '''
--> 268 return self._map_async(func, iterable, mapstar, chunksize).get()
269
270 def starmap(self, func, iterable, chunksize=None):
/media/raghav/workspace/anaconda3/lib/python3.7/multiprocessing/pool.py in get(self, timeout)
655 return self._value
656 else:
--> 657 raise self._value
658
659 def _set(self, i, obj):
RuntimeError: cuda runtime error (3) : initialization error at /tmp/pip-req-build-58y_cjjl/aten/src/THC/THCCachingHostAllocator.cpp:296
What should I do?