diff --git a/nemo_rl/models/policy/__init__.py b/nemo_rl/models/policy/__init__.py index 8f2448e4e76..01fb0d50fdf 100644 --- a/nemo_rl/models/policy/__init__.py +++ b/nemo_rl/models/policy/__init__.py @@ -55,13 +55,34 @@ def _patch_transformers_tokenizer_class_set(): "Check if the upstream fix now applies and remove this patch if so." ) + from transformers import AutoTokenizer from transformers.models.auto.tokenization_auto import ( MODELS_WITH_INCORRECT_HUB_TOKENIZER_CLASS, TOKENIZER_MAPPING_NAMES, ) - MODELS_WITH_INCORRECT_HUB_TOKENIZER_CLASS.discard("deepseek_v3") - TOKENIZER_MAPPING_NAMES.pop("deepseek_v3", None) + _original_from_pretrained = AutoTokenizer.from_pretrained + + def _patched_from_pretrained(pretrained_model_name_or_path, *args, **kwargs): + try: + # DSV3 goes here: the transformers blocklist routes its + # tokenizer.json around LlamaTokenizerFast.__init__'s Llama-specific + # post-processing, which would corrupt DSV3 special tokens. + return _original_from_pretrained( + pretrained_model_name_or_path, *args, **kwargs + ) + except Exception: + # Moonlight goes here: it ships no tokenizer.json (only + # tiktoken.model + remote-code TikTokenTokenizer), so the blocklist + # prevents loading. Strip deepseek_v3 from the registries so + # trust_remote_code / auto_map takes over. + MODELS_WITH_INCORRECT_HUB_TOKENIZER_CLASS.discard("deepseek_v3") + TOKENIZER_MAPPING_NAMES.pop("deepseek_v3", None) + return _original_from_pretrained( + pretrained_model_name_or_path, *args, **kwargs + ) + + AutoTokenizer.from_pretrained = _patched_from_pretrained _patch_transformers_tokenizer_class_set() diff --git a/tests/test_suites/llm/performance/dapo-deepseek-v3-64n8g.v2.sh b/tests/test_suites/llm/performance/dapo-deepseek-v3-64n8g.v2.sh index 53b86f46fe9..84ac0f8ae1a 100755 --- a/tests/test_suites/llm/performance/dapo-deepseek-v3-64n8g.v2.sh +++ b/tests/test_suites/llm/performance/dapo-deepseek-v3-64n8g.v2.sh @@ -24,8 +24,8 @@ exit_if_max_steps_reached cd $PROJECT_ROOT uv run examples/run_grpo.py \ --config $CONFIG_PATH \ - grpo.num_prompts_per_step=64 \ - grpo.num_generations_per_prompt=8 \ + grpo.num_prompts_per_step=32 \ + grpo.num_generations_per_prompt=16 \ grpo.max_num_steps=$MAX_STEPS \ policy.model_name=$NRL_DEEPSEEK_V3_BF16_CKPT \ policy.tokenizer.name=$NRL_DEEPSEEK_V3_BF16_CKPT \