Spaces:
Running on Zero
Running on Zero
Diagnose Qwen generation termination
Browse files
app.py
CHANGED
|
@@ -597,7 +597,7 @@ def _load_qwen38():
|
|
| 597 |
return processor, model
|
| 598 |
|
| 599 |
|
| 600 |
-
def _generate_qwen38(prompt, max_new_tokens=
|
| 601 |
processor, model = _load_qwen38()
|
| 602 |
max_new_tokens = max(1, min(256, int(max_new_tokens)))
|
| 603 |
temperature = max(0.0, min(2.0, float(temperature)))
|
|
@@ -614,6 +614,10 @@ def _generate_qwen38(prompt, max_new_tokens=64, temperature=0.7, thinking=False)
|
|
| 614 |
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
|
| 615 |
inputs = processor(text=[text], return_tensors="pt")
|
| 616 |
inputs = {key: value.to("cpu") if hasattr(value, "to") else value for key, value in inputs.items()}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 617 |
t0 = time.time()
|
| 618 |
with torch.inference_mode():
|
| 619 |
output = model.generate(
|
|
@@ -621,12 +625,38 @@ def _generate_qwen38(prompt, max_new_tokens=64, temperature=0.7, thinking=False)
|
|
| 621 |
max_new_tokens=max_new_tokens,
|
| 622 |
do_sample=temperature > 0,
|
| 623 |
temperature=max(temperature, 0.01),
|
|
|
|
|
|
|
|
|
|
|
|
|
| 624 |
)
|
| 625 |
elapsed = max(time.time() - t0, 0.001)
|
| 626 |
-
|
| 627 |
-
generated =
|
| 628 |
-
|
| 629 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 630 |
|
| 631 |
|
| 632 |
def _load_tinyllama():
|
|
|
|
| 597 |
return processor, model
|
| 598 |
|
| 599 |
|
| 600 |
+
def _generate_qwen38(prompt, max_new_tokens=256, temperature=0.7, thinking=True):
|
| 601 |
processor, model = _load_qwen38()
|
| 602 |
max_new_tokens = max(1, min(256, int(max_new_tokens)))
|
| 603 |
temperature = max(0.0, min(2.0, float(temperature)))
|
|
|
|
| 614 |
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
|
| 615 |
inputs = processor(text=[text], return_tensors="pt")
|
| 616 |
inputs = {key: value.to("cpu") if hasattr(value, "to") else value for key, value in inputs.items()}
|
| 617 |
+
tokenizer = processor.tokenizer
|
| 618 |
+
eos_id = tokenizer.eos_token_id
|
| 619 |
+
pad_id = tokenizer.pad_token_id if tokenizer.pad_token_id is not None else eos_id
|
| 620 |
+
input_tokens = int(inputs["input_ids"].shape[-1])
|
| 621 |
t0 = time.time()
|
| 622 |
with torch.inference_mode():
|
| 623 |
output = model.generate(
|
|
|
|
| 625 |
max_new_tokens=max_new_tokens,
|
| 626 |
do_sample=temperature > 0,
|
| 627 |
temperature=max(temperature, 0.01),
|
| 628 |
+
eos_token_id=eos_id,
|
| 629 |
+
pad_token_id=pad_id,
|
| 630 |
+
return_dict_in_generate=True,
|
| 631 |
+
output_scores=True,
|
| 632 |
)
|
| 633 |
elapsed = max(time.time() - t0, 0.001)
|
| 634 |
+
sequences = output.sequences
|
| 635 |
+
generated = sequences[0, input_tokens:]
|
| 636 |
+
eos_positions = (generated == eos_id).nonzero(as_tuple=True)[0].tolist() if eos_id is not None else []
|
| 637 |
+
answer = tokenizer.decode(generated, skip_special_tokens=True).strip()
|
| 638 |
+
return {
|
| 639 |
+
"text": answer,
|
| 640 |
+
"prompt_tokens": input_tokens,
|
| 641 |
+
"completion_tokens": int(generated.shape[-1]),
|
| 642 |
+
"generation_tokens_per_sec": round(float(generated.shape[-1]) / elapsed, 2),
|
| 643 |
+
"inference_time_sec": round(elapsed, 3),
|
| 644 |
+
"device": "cpu",
|
| 645 |
+
"dtype": "bfloat16",
|
| 646 |
+
"thinking": bool(thinking),
|
| 647 |
+
"debug": {
|
| 648 |
+
"rendered_chat_template": text,
|
| 649 |
+
"input_ids": inputs["input_ids"][0].tolist(),
|
| 650 |
+
"generated_token_ids": generated.tolist(),
|
| 651 |
+
"eos_token_id": eos_id,
|
| 652 |
+
"pad_token_id": pad_id,
|
| 653 |
+
"eos_positions": eos_positions,
|
| 654 |
+
"sequence_length": int(sequences.shape[-1]),
|
| 655 |
+
"max_new_tokens": max_new_tokens,
|
| 656 |
+
"scores_steps": len(output.scores) if output.scores is not None else 0,
|
| 657 |
+
"finish_reason": "eos" if eos_positions else ("length" if generated.shape[-1] >= max_new_tokens else "unknown"),
|
| 658 |
+
},
|
| 659 |
+
}
|
| 660 |
|
| 661 |
|
| 662 |
def _load_tinyllama():
|