[Python] IterableDataset not supported on GRPOTrainer

Discussão em 'Python' iniciado por Stack, Fevereiro 24, 2025.

  1. Stack

    Stack Membro Participativo

    The following program crashes upon execution

    from datasets import IterableDataset, Dataset
    from trl import GRPOConfig, GRPOTrainer

    prompts = ["Hi", "Hello"]
    def data_generator():
    while True:
    for s in prompts:
    yield {"prompt" : s}
    dataset = IterableDataset.from_generator(data_generator)


    training_args = GRPOConfig(
    output_dir= "tmp",
    max_steps = 1000,
    )

    trainer = GRPOTrainer(
    model="facebook/opt-350m",
    reward_funcs=lambda prompts,completions, **kwargs: [1]*8,
    train_dataset=dataset,
    args=training_args,
    )

    trainer.train()


    Causes the following trace:

    Traceback (most recent call last):
    File "/home/pietro/Documents/Code/CS234/starter_code/trl_testing.py", line 24, in <module>
    trainer.train()
    File "/home/pietro/.conda/envs/cs234_3/lib/python3.9/site-packages/transformers/trainer.py", line 2241, in train
    return inner_training_loop(
    File "/home/pietro/.conda/envs/cs234_3/lib/python3.9/site-packages/transformers/trainer.py", line 2500, in _inner_training_loop
    batch_samples, num_items_in_batch = self.get_batch_samples(epoch_iterator, num_batches)
    File "/home/pietro/.conda/envs/cs234_3/lib/python3.9/site-packages/transformers/trainer.py", line 5180, in get_batch_samples
    batch_samples += [next(epoch_iterator)]
    File "/home/pietro/.conda/envs/cs234_3/lib/python3.9/site-packages/accelerate/data_loader.py", line 856, in __iter__
    next_batch, next_batch_info = self._fetch_batches(main_iterator)
    File "/home/pietro/.conda/envs/cs234_3/lib/python3.9/site-packages/accelerate/data_loader.py", line 812, in _fetch_batches
    batch = concatenate(batches, dim=0)
    File "/home/pietro/.conda/envs/cs234_3/lib/python3.9/site-packages/accelerate/utils/operations.py", line 615, in concatenate
    return honor_type(data[0], (concatenate([d for d in data], dim=dim) for i in range(len(data[0]))))
    File "/home/pietro/.conda/envs/cs234_3/lib/python3.9/site-packages/accelerate/utils/operations.py", line 81, in honor_type
    return type(obj)(generator)
    File "/home/pietro/.conda/envs/cs234_3/lib/python3.9/site-packages/accelerate/utils/operations.py", line 615, in <genexpr>
    return honor_type(data[0], (concatenate([d for d in data], dim=dim) for i in range(len(data[0]))))
    File "/home/pietro/.conda/envs/cs234_3/lib/python3.9/site-packages/accelerate/utils/operations.py", line 617, in concatenate
    return type(data[0])({k: concatenate([d[k] for d in data], dim=dim) for k in data[0].keys()})
    File "/home/pietro/.conda/envs/cs234_3/lib/python3.9/site-packages/accelerate/utils/operations.py", line 617, in <dictcomp>
    return type(data[0])({k: concatenate([d[k] for d in data], dim=dim) for k in data[0].keys()})
    File "/home/pietro/.conda/envs/cs234_3/lib/python3.9/site-packages/accelerate/utils/operations.py", line 619, in concatenate
    raise TypeError(f"Can only concatenate tensors but got {type(data[0])}")
    TypeError: Can only concatenate tensors but got <class 'str'>


    However, replacing the IterableDataset as done below with an analogous Dataset fixes the issue:

    from datasets import IterableDataset, Dataset
    from trl import GRPOConfig, GRPOTrainer

    prompts = ["Hi", "Hello"]
    dataset = Dataset.from_dict({"prompt" : prompts})

    training_args = GRPOConfig(
    output_dir= "tmp",
    max_steps = 1000,
    )

    trainer = GRPOTrainer(
    model="facebook/opt-350m",
    reward_funcs=lambda prompts,completions, **kwargs: [1]*8,
    train_dataset=dataset,
    args=training_args,
    )

    trainer.train()


    This has been reproduced on 2 very different systems, so unlikely that this is the cause. Am I missing something?

    Continue reading...

Compartilhe esta Página