Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ORPOTrainer crashes due to pickling failure if dataloader_num_workers > 0 #2779

Open
kiratp opened this issue Feb 6, 2025 · 0 comments
Open
Labels
🐛 bug Something isn't working 🏋 ORPO Related to ORPO

Comments

@kiratp
Copy link

kiratp commented Feb 6, 2025

Reproduction

 training_arguments = TrainingArguments(
        output_dir,
        overwrite_output_dir=False,
        per_device_train_batch_size=script_args.per_device_train_batch_size,
        gradient_accumulation_steps=script_args.gradient_accumulation_steps,
        optim=script_args.optim,
        save_steps=script_args.save_steps,
        logging_steps=script_args.logging_steps,
        learning_rate=script_args.learning_rate,
        fp16=script_args.fp16,
        bf16=script_args.bf16,
        max_steps=script_args.max_steps,
        warmup_ratio=script_args.warmup_ratio,
        group_by_length=script_args.group_by_length,
        lr_scheduler_type=script_args.lr_scheduler_type,
        gradient_checkpointing=script_args.gradient_checkpointing,
        ddp_find_unused_parameters=False,
        dataloader_num_workers=script_args.num_dataset_proc_workers,
        remove_unused_columns=False,
        num_train_epochs=script_args.num_train_epochs,
        eval_strategy=script_args.eval_strategy,
        eval_steps=script_args.eval_steps,
        eval_accumulation_steps=script_args.eval_accumulation_steps,
        resume_from_checkpoint=True,
        # half_precision_backend=half_precision_backend,
        dataloader_drop_last=True,
        **fsdp_training_args,
    )
// ...

grpo_config = GRPOConfig(
        max_prompt_length=script_args.max_prompt_length,
        num_generations=8,
        temperature=1.0,
        max_completion_length=script_args.max_seq_length,
        use_vllm=False,
        vllm_device="auto",
        vllm_gpu_memory_utilization=0.9,
        beta=0.04,
        **training_arguments.to_dict(),
    )

    # Doing this makes things work again
    # grpo_config.dataloader_num_workers = 0

    return GRPOTrainer(
        model,
        reward_funcs=grpo_reward_func_direct
        if script_args.mode == Mode.GRPO_DIRECT
        else grpo_reward_func_with_thinking,
        train_dataset=dataset["train"],
        eval_dataset=dataset["validation"],
        peft_config=peft_config,
        processing_class=tokenizer,
        args=grpo_config,
        # compute_metrics=compute_metrics,
    )

outputs:

tarting Training
  0%|                                                                                                                                                                                                                       | 0/1000 [00:00<?, ?it/s]Traceback (most recent call last):
  File "/Users/kiratpandya/code/osmos/osmos/python/agents-trainer/train-trl.py", line 566, in <module>
    trainer.train()
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/site-packages/transformers/trainer.py", line 2171, in train
    return inner_training_loop(
           ^^^^^^^^^^^^^^^^^^^^
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/site-packages/transformers/trainer.py", line 2480, in _inner_training_loop
    batch_samples, num_items_in_batch = self.get_batch_samples(epoch_iterator, num_batches)
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/site-packages/transformers/trainer.py", line 5153, in get_batch_samples
    batch_samples += [next(epoch_iterator)]
                      ^^^^^^^^^^^^^^^^^^^^
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/site-packages/accelerate/data_loader.py", line 560, in __iter__
    dataloader_iter = self.base_dataloader.__iter__()
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/site-packages/torch/utils/data/dataloader.py", line 484, in __iter__
    return self._get_iterator()
           ^^^^^^^^^^^^^^^^^^^^
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/site-packages/torch/utils/data/dataloader.py", line 415, in _get_iterator
    return _MultiProcessingDataLoaderIter(self)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/site-packages/torch/utils/data/dataloader.py", line 1138, in __init__
    w.start()
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/multiprocessing/process.py", line 121, in start
    self._popen = self._Popen(self)
                  ^^^^^^^^^^^^^^^^^
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/multiprocessing/context.py", line 224, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/multiprocessing/context.py", line 289, in _Popen
    return Popen(process_obj)
           ^^^^^^^^^^^^^^^^^^
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/multiprocessing/popen_spawn_posix.py", line 32, in __init__
    super().__init__(process_obj)
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/multiprocessing/popen_fork.py", line 19, in __init__
    self._launch(process_obj)
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/multiprocessing/popen_spawn_posix.py", line 47, in _launch
    reduction.dump(process_obj, fp)
  File "/Users/kiratpandya/miniconda3/envs/agents-trainer/lib/python3.12/multiprocessing/reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
AttributeError: Can't get local object 'GRPOTrainer.__init__.<locals>.data_collator'
  0%|          | 0/1000 [00:00<?, ?it/s]```


### System Info

- Platform: macOS-14.6.1-arm64-arm-64bit
- Python version: 3.12.8
- PyTorch version: 2.6.0.dev20241112
- CUDA device(s): not available
- Transformers version: 4.48.2
- Accelerate version: 1.3.0
- Accelerate config:
  - compute_environment: LOCAL_MACHINE
  - distributed_type: NO
  - mixed_precision: no
  - use_cpu: False
  - debug: False
  - num_processes: 1
  - machine_rank: 0
  - num_machines: 1
  - rdzv_backend: static
  - same_network: True
  - main_training_function: main
  - enable_cpu_affinity: False
  - downcast_bf16: no
  - tpu_use_cluster: False
  - tpu_use_sudo: False
  - tpu_env: []
- Datasets version: 3.2.0
- HF Hub version: 0.28.1
- TRL version: 0.14.0.dev0
- bitsandbytes version: not installed
- DeepSpeed version: not installed
- Diffusers version: not installed
- Liger-Kernel version: not installed
- LLM-Blender version: not installed
- OpenAI version: not installed
- PEFT version: 0.14.0

### Checklist

- [x] I have checked that my issue isn't already filed (see [open issues](https://github.com/huggingface/trl/issues?q=is%3Aissue))
- [x] I have included my system information
- [x] Any code provided is minimal, complete, and reproducible ([more on MREs](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks))
- [x] Any code provided is properly formatted in code blocks, (no screenshot, [more on code blocks](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks))
- [x] Any traceback provided is complete
@github-actions github-actions bot added 🏋 ORPO Related to ORPO 🐛 bug Something isn't working labels Feb 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛 bug Something isn't working 🏋 ORPO Related to ORPO
Projects
None yet
Development

No branches or pull requests

1 participant