diff --git a/tests/cossim_common.py b/tests/cossim_common.py index 34f513c..9c02a8c 100755 --- a/tests/cossim_common.py +++ b/tests/cossim_common.py @@ -58,6 +58,13 @@ from qwen_tts.core.models.modeling_qwen3_tts import Qwen3TTSForConditionalG from qwen_tts.core.models.configuration_qwen3_tts import Qwen3TTSConfig from qwen_tts.core.models.processing_qwen3_tts import Qwen3TTSProcessor from transformers import AutoConfig, AutoModel, AutoProcessor +from transformers.utils import logging as hf_logging + +# Silence the GenerationConfig validator that warns "flags are not valid +# and may be ignored" for temperature / top_k / top_p when do_sample=False. +# Those flags ride along inside the checkpoint generation_config and the +# greedy path drops them on purpose, the warning is just noise here. +hf_logging.set_verbosity_error() # Register the Qwen3-TTS classes once per process. Calling twice raises a # ValueError inside transformers, hence the guard. @@ -378,3 +385,14 @@ def compare_exact_i32(name, dump_cpp, dump_pt, label): pct = 100.0 * float(np.mean(ai[:n] == bi[:n])) print(f"[Cossim] {label} exact: {pct:.2f}% ({n} values)") return pct + +# Greedy generation kwargs shared by every cossim script. do_sample=False +# alone selects argmax, top_k / top_p / temperature are intentionally +# omitted because GenerationConfig flags them as "not valid" warnings when +# do_sample=False. The subtalker_* keys are custom kwargs forwarded to the +# talker forward, the talker validator is bypassed by the script main. +GEN_KWARGS_GREEDY = dict( + do_sample = False, + subtalker_dosample = False, + repetition_penalty = 1.0, +) diff --git a/tests/debug-base-cossim.py b/tests/debug-base-cossim.py index a46fead..6ffc0b2 100755 --- a/tests/debug-base-cossim.py +++ b/tests/debug-base-cossim.py @@ -87,31 +87,12 @@ def main(): # the strict validator. Disable it on the talker only. model.talker._validate_model_kwargs = lambda *a, **k: None - # Greedy hardcoded : argmax on both talker c0 and code predictor sub - # codes. Stochastic mode is not exercised here because the F32 drift - # between torch CUDA cuBLAS and ggml CUDA matmul on Qwen3 norm_w - # inflated activations propagates through the FFN and flips multinomial - # picks in flat distributions, breaking bit exactness. Argmax is robust - # to that drift, so greedy gives 100 percent CodesFull match and - # validates the full forward + sampling chain. - gen_kwargs = dict( - do_sample = False, - top_k = 1, - top_p = 1.0, - temperature = 1.0, - subtalker_dosample = False, - subtalker_top_k = 1, - subtalker_top_p = 1.0, - subtalker_temperature = 1.0, - repetition_penalty = 1.0, - ) - talker_codes_list, _ = model.generate( input_ids=[input_ids], languages=[args.lang], non_streaming_mode=True, max_new_tokens=args.max_new_tokens, - **gen_kwargs, + **cc.GEN_KWARGS_GREEDY, ) codes = talker_codes_list[0] print(f"[Python] Codes shape: {tuple(codes.shape)} (T_frames, num_code_groups)") diff --git a/tests/debug-clone-cossim.py b/tests/debug-clone-cossim.py index 141e310..9b743f9 100755 --- a/tests/debug-clone-cossim.py +++ b/tests/debug-clone-cossim.py @@ -147,18 +147,6 @@ def main(): # the strict validator. Disable it on the talker only. model.talker._validate_model_kwargs = lambda *a, **k: None - gen_kwargs = dict( - do_sample = False, - top_k = 1, - top_p = 1.0, - temperature = 1.0, - subtalker_dosample = False, - subtalker_top_k = 1, - subtalker_top_p = 1.0, - subtalker_temperature = 1.0, - repetition_penalty = 1.0, - ) - # voice_clone_prompt dict mirrors what _prompt_items_to_voice_clone_prompt # builds for a single ICL prompt item : ref_code is the [T_codec, K] # tensor, ref_spk_embedding is the [hidden] tensor, x_vector_only=False @@ -177,7 +165,7 @@ def main(): languages=[args.lang], non_streaming_mode=False, max_new_tokens=args.max_new_tokens, - **gen_kwargs, + **cc.GEN_KWARGS_GREEDY, ) codes = talker_codes_list[0] print(f"[Python] Codes shape: {tuple(codes.shape)} (T_frames, num_code_groups)") diff --git a/tests/debug-customvoice-cossim.py b/tests/debug-customvoice-cossim.py index 8378a38..5606f60 100755 --- a/tests/debug-customvoice-cossim.py +++ b/tests/debug-customvoice-cossim.py @@ -113,18 +113,6 @@ def main(): # the strict validator. Disable it on the talker only. model.talker._validate_model_kwargs = lambda *a, **k: None - gen_kwargs = dict( - do_sample = False, - top_k = 1, - top_p = 1.0, - temperature = 1.0, - subtalker_dosample = False, - subtalker_top_k = 1, - subtalker_top_p = 1.0, - subtalker_temperature = 1.0, - repetition_penalty = 1.0, - ) - talker_codes_list, _ = model.generate( input_ids=[input_ids], instruct_ids=instruct_ids_arg, @@ -132,7 +120,7 @@ def main(): speakers=[args.speaker], non_streaming_mode=True, max_new_tokens=args.max_new_tokens, - **gen_kwargs, + **cc.GEN_KWARGS_GREEDY, ) codes = talker_codes_list[0] print(f"[Python] Codes shape: {tuple(codes.shape)} (T_frames, num_code_groups)") diff --git a/tests/debug-tts-cossim.py b/tests/debug-tts-cossim.py index 59e10cd..9be0c40 100755 --- a/tests/debug-tts-cossim.py +++ b/tests/debug-tts-cossim.py @@ -103,25 +103,13 @@ def main(): # the strict validator. Disable it on the talker only. model.talker._validate_model_kwargs = lambda *a, **k: None - gen_kwargs = dict( - do_sample = False, - top_k = 1, - top_p = 1.0, - temperature = 1.0, - subtalker_dosample = False, - subtalker_top_k = 1, - subtalker_top_p = 1.0, - subtalker_temperature = 1.0, - repetition_penalty = 1.0, - ) - talker_codes_list, _ = model.generate( input_ids=[input_ids], instruct_ids=[instruct_ids], languages=[args.lang], non_streaming_mode=True, max_new_tokens=args.max_new_tokens, - **gen_kwargs, + **cc.GEN_KWARGS_GREEDY, ) codes = talker_codes_list[0] print(f"[Python] Codes shape: {tuple(codes.shape)} (T_frames, num_code_groups)")