microsoft / Oscar

Oscar and VinVL
MIT License
1.04k stars 251 forks source link

TypeError: cannot serialize '_io.TextIOWrapper' object #148

Closed GabrieleFerrario closed 2 years ago

GabrieleFerrario commented 2 years ago

Hi, when executing the run_captioning command I get this error:

ForkingPickler(file, protocol).dump(obj) TypeError: cannot serialize '_io.TextIOWrapper' object

I also report here the complete log:

python oscar/run_captioning.py --do_test --do_eval --test_yaml vinvl_demo_images_features/inference_test/test.yaml --per_gpu_eval_batch_size 64 --num_beams 5 --max_gen_length 20 --eval_model_dir vinvl_demo_images_features/coco_captioning_large_scst/checkpoint-4-50000

2021-10-03 18:34:06,058 vlpretrain WARNING: Device: cuda, n_gpu: 1 2021-10-03 18:34:06,063 vlpretrain WARNING: Override max_seq_length to 50 = max_gen_length:20 + od_labels_len:30 2021-10-03 18:34:06,064 vlpretrain WARNING: Override do_lower_case with train args: False -> True 2021-10-03 18:34:06,070 vlpretrain WARNING: Override add_od_labels with train args: False -> True 2021-10-03 18:34:06,101 vlpretrain INFO: Evaluate the following checkpoint: vinvl_demo_images_features/coco_captioning_large_scst/checkpoint-4-50000 2021-10-03 18:34:17,930 vlpretrain INFO: Training/evaluation parameters Namespace(adam_epsilon=1e-08, add_od_labels=True, cider_cached_tokens='coco-train-words.p', config_name='', data_dir='datasets/coco_caption', device='cpu', distributed=False, do_eval=True, do_lower_case=True, do_test=True, do_train=False, drop_out=0.1, drop_worst_after=0, drop_worst_ratio=0, eval_model_dir='vinvl_demo_images_features/coco_captioning_large_scst/checkpoint-4-50000', evaluate_during_training=False, freeze_embedding=False, gradient_accumulation_steps=1, img_feature_dim=2054, img_feature_type='frcnn', label_smoothing=0, learning_rate=3e-05, length_penalty=1, local_rank=0, logging_steps=20, loss_type='sfmx', mask_prob=0.15, max_gen_length=20, max_grad_norm=1.0, max_img_seq_length=50, max_masked_tokens=3, max_seq_a_length=40, max_seq_length=50, max_steps=-1, min_constraints_to_satisfy=2, model_name_or_path=None, no_cuda=True, num_beams=5, num_gpus=1, num_keep_best=1, num_labels=2, num_return_sequences=1, num_train_epochs=40, num_workers=4, output_dir='output/', output_hidden_states=False, output_mode='classification', per_gpu_eval_batch_size=64, per_gpu_train_batch_size=64, repetition_penalty=1, save_steps=-1, sc_baseline_type='greedy', sc_beam_size=1, sc_train_sample_n=5, scheduler='linear', scst=False, seed=88, temperature=1, test_yaml='vinvl_demo_images_features/inference_test/test.yaml', tie_weights=False, tokenizer_name='', top_k=0, top_p=1, train_yaml='train.yaml', use_cbs=False, val_yaml='val.yaml', warmup_steps=0, weight_decay=0.05) 2021-10-03 18:34:17,933 vlpretrain INFO: Evaluate on dataset: vinvl_demo_images_features/inference_test/test.yaml c:\users\gabriele.ferrario\onedrive\desktop\tesi\vinvl\oscar\oscar\oscar\utils\misc.py:34: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. return yaml.load(fp) predict_file: vinvl_demo_images_features/coco_captioning_large_scst/checkpoint-4-50000\pred.coco_caption.test.beam5.max20.odlabels.tsv values: <generator object test..gen_rows at 0x000001F47BC3DD48> test_dataloader: <torch.utils.data.dataloader.DataLoader object at 0x000001F47B421448> C:\Users\gabriele.ferrario.conda\envs\sg_benchmark\lib\site-packages\torch\cuda__init.py:52: UserWarning: CUDA initialization: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx (Triggered internally at ..\c10\cuda\CUDAFunctions.cpp:100.) return torch._C._cuda_getDeviceCount() > 0 Traceback (most recent call last): File "oscar/run_captioning.py", line 1018, in main() File "oscar/run_captioning.py", line 1014, in main checkpoint) File "oscar/run_captioning.py", line 621, in evaluate test(args, val_dataloader, model, tokenizer, predict_file) File "oscar/run_captioning.py", line 715, in test tsv_writer(gen_rows(), cache_file) File "c:\users\gabriele.ferrario\onedrive\desktop\tesi\vinvl\oscar\oscar\oscar\utils\tsv_file_ops.py", line 18, in tsv_writer for value in values: File "oscar/run_captioning.py", line 681, in gen_rows for step, (img_keys, batch) in tqdm(enumerate(test_dataloader)): File "C:\Users\gabriele.ferrario.conda\envs\sg_benchmark\lib\site-packages\torch\utils\data\dataloader.py", line 352, in iter__ return self._get_iterator() File "C:\Users\gabriele.ferrario.conda\envs\sg_benchmark\lib\site-packages\torch\utils\data\dataloader.py", line 294, in _get_iterator return _MultiProcessingDataLoaderIter(self) File "C:\Users\gabriele.ferrario.conda\envs\sg_benchmark\lib\site-packages\torch\utils\data\dataloader.py", line 801, in init w.start() File "C:\Users\gabriele.ferrario.conda\envs\sg_benchmark\lib\multiprocessing\process.py", line 112, in start self._popen = self._Popen(self) File "C:\Users\gabriele.ferrario.conda\envs\sg_benchmark\lib\multiprocessing\context.py", line 223, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "C:\Users\gabriele.ferrario.conda\envs\sg_benchmark\lib\multiprocessing\context.py", line 322, in _Popen return Popen(process_obj) File "C:\Users\gabriele.ferrario.conda\envs\sg_benchmark\lib\multiprocessing\popen_spawn_win32.py", line 89, in init reduction.dump(process_obj, to_child) File "C:\Users\gabriele.ferrario.conda\envs\sg_benchmark\lib\multiprocessing\reduction.py", line 60, in dump ForkingPickler(file, protocol).dump(obj) TypeError: cannot serialize '_io.TextIOWrapper' object

Does anyone have any suggestions? thank you

AlessandradellaFazia commented 2 years ago

did you manage it?

GabrieleFerrario commented 2 years ago

Hi, on windows no but passing on Linux the problem does not exist.

AlessandradellaFazia commented 2 years ago

ty for your reply, I have noticed that a workaround, in my case, is to set up --num_workers to 0