Fix GRPO bsz
This commit is contained in:
parent
e5c77f21e6
commit
fa91cc466f
2 changed files with 36 additions and 4 deletions
|
|
@ -29,6 +29,7 @@ from .rl_replacements import (
|
|||
RL_EXTRA_ARGS,
|
||||
RL_FUNCTIONS,
|
||||
RL_PRE_ITEMS,
|
||||
RL_CONFIG_CHANGES,
|
||||
)
|
||||
selective_log_softmax = RL_REPLACEMENTS["selective_log_softmax"]
|
||||
|
||||
|
|
@ -165,8 +166,14 @@ def _patch_trl_rl_trainers(trainer_file = "grpo_trainer"):
|
|||
if RLTrainer.__name__.startswith("Unsloth"): return
|
||||
if RLConfig .__name__.startswith("Unsloth"): return
|
||||
|
||||
# Get old source
|
||||
old_RLTrainer_source = inspect.getsource(RLTrainer)
|
||||
old_RLConfig_source = inspect.getsource(RLConfig)
|
||||
|
||||
all_imports = dir(trainer)
|
||||
imports = [x for x in all_imports if not x.startswith("_")]
|
||||
# imports = [x for x in all_imports if not x.startswith("_")]
|
||||
# Fix _deprecate_arguments not getting imported
|
||||
imports = all_imports
|
||||
|
||||
# Get default arguments
|
||||
EMPTY = inspect.Parameter.empty
|
||||
|
|
@ -381,6 +388,13 @@ def _patch_trl_rl_trainers(trainer_file = "grpo_trainer"):
|
|||
extra_args += num_proc_check
|
||||
pass
|
||||
|
||||
# Edit config with anything extra
|
||||
if trainer_file in RL_CONFIG_CHANGES:
|
||||
process_extra_args = RL_CONFIG_CHANGES[trainer_file]
|
||||
for process_extra_arg in process_extra_args:
|
||||
extra_args += process_extra_arg(old_RLTrainer_source, old_RLConfig_source)
|
||||
pass
|
||||
|
||||
# Edit report_to and default it to nothing if max_steps is like 60
|
||||
|
||||
# Create RLConfig args
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ __all__ = [
|
|||
"RL_EXTRA_ARGS",
|
||||
"RL_FUNCTIONS",
|
||||
"RL_PRE_ITEMS",
|
||||
"RL_CONFIG_CHANGES",
|
||||
]
|
||||
|
||||
import re
|
||||
|
|
@ -23,9 +24,10 @@ import torch
|
|||
import inspect
|
||||
from collections import defaultdict
|
||||
from unsloth_zoo.rl_replacements import RL_REPLACEMENTS
|
||||
RL_EXTRA_ARGS = defaultdict(list)
|
||||
RL_FUNCTIONS = defaultdict(list)
|
||||
RL_PRE_ITEMS = defaultdict(list)
|
||||
RL_EXTRA_ARGS = defaultdict(list)
|
||||
RL_FUNCTIONS = defaultdict(list)
|
||||
RL_PRE_ITEMS = defaultdict(list)
|
||||
RL_CONFIG_CHANGES = defaultdict(list)
|
||||
|
||||
torch_compile_options = {
|
||||
"epilogue_fusion" : True,
|
||||
|
|
@ -242,3 +244,19 @@ def grpo_trainer_compute_loss(function_name, function):
|
|||
return function
|
||||
pass
|
||||
RL_FUNCTIONS["grpo_trainer"].append(grpo_trainer_compute_loss)
|
||||
|
||||
# https://github.com/huggingface/trl/blob/main/trl/trainer/grpo_trainer.py#L356
|
||||
# TRL warns if batch size is not a multiple of num_generations -> fix this.
|
||||
def grpo_trainer_fix_batch_size(RLTrainer_source, RLConfig_source):
|
||||
if "multiple of num_generations" not in RLTrainer_source: return ""
|
||||
if "num_generations" not in RLConfig_source: return ""
|
||||
|
||||
check_batch_size = \
|
||||
"div = per_device_train_batch_size // num_generations\n"\
|
||||
"if div * num_generations != per_device_train_batch_size:\n"\
|
||||
" print('Unsloth: We know expect `per_device_train_batch_size` to be a multiple of `num_generations`.\\n'\\"\
|
||||
" 'We will change the batch size of ' + per_device_train_batch_size + ' to the `num_generations` of ' + num_generations')\n"\
|
||||
" per_device_train_batch_size = num_generations\n"
|
||||
return check_batch_size
|
||||
pass
|
||||
RL_CONFIG_CHANGES["grpo_trainer"].append(grpo_trainer_fix_batch_size)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue