diff --git a/src/transformers/generation/utils.py b/src/transformers/generation/utils.py index 95cee542b291..cc88ca502dd8 100644 --- a/src/transformers/generation/utils.py +++ b/src/transformers/generation/utils.py @@ -1788,6 +1788,12 @@ def _prepare_generation_config( model_kwargs.update({"output_attentions": output_attentions} if output_attentions else {}) model_kwargs.update({"output_hidden_states": output_hidden_states} if output_hidden_states else {}) + # Enforce deterministic greedy decoding if do_sample=False and num_beams = 1 + if generation_config.do_sample is False and generation_config.num_beams == 1: + generation_config.temperature = 1.0 + generation_config.top_k = 0 + generation_config.top_p = 1.0 + return generation_config, model_kwargs def _get_initial_cache_position(self, seq_length, device, model_kwargs): diff --git a/tests/models/qwen3/test_modeling_qwen3.py b/tests/models/qwen3/test_modeling_qwen3.py index ba937656d3a6..05c5e746ba47 100644 --- a/tests/models/qwen3/test_modeling_qwen3.py +++ b/tests/models/qwen3/test_modeling_qwen3.py @@ -718,3 +718,20 @@ def test_600m_generation(self): new_generated_ids = model.generate(input_ids, max_new_tokens=50)[:, input_ids.shape[1] :] with self.subTest("Eager matches flash attention"): torch.testing.assert_close(generated_ids, new_generated_ids, rtol=1e-4, atol=1e-4) + + def test_qwen3_greedy_determinism(self): + """ + Ensures Qwen3 generate is deterministic when do_sample=False (greedy decoding as per HFs documentation). + """ + tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B-Base", use_fast=False) + model = Qwen3ForCausalLM.from_pretrained("Qwen/Qwen3-0.6B-Base", device_map="auto") + inputs = tokenizer("hello", return_tensors="pt") + + cfg = GenerationConfig(do_sample=False, num_beams=1, max_new_tokens=20) + + out1 = model.generate(**inputs, generation_config=cfg) + out2 = model.generate(**inputs, generation_config=cfg) + + assert torch.equal(out1, out2), ( + "Qwen3 should produce deterministic outputs with do_sample=False and num_beams=1" + )