84 lines
2.9 KiB
Markdown
84 lines
2.9 KiB
Markdown
---
|
|
library_name: transformers
|
|
pipeline_tag: text-generation
|
|
base_model:
|
|
- Qwen/Qwen3-8B
|
|
---
|
|
|
|
# Qwen3-8B Fixed Model
|
|
|
|
This repository is a fixed version of [yunmorning/broken-model](https://huggingface.co/yunmorning/broken-model).
|
|
The original model could not be used to run a functional `/chat/completions` API server due to two critical issues.
|
|
|
|
---
|
|
|
|
## Changes Made
|
|
|
|
### Fix 1: Added `chat_template` to `tokenizer_config.json`
|
|
|
|
**Before:** `chat_template` field did not exist
|
|
**After:** Added official Qwen3 Jinja2 chat template
|
|
|
|
**Why:** OpenAI-compatible API servers (vLLM, FriendliAI, etc.) rely on `chat_template` to convert the `messages` array into model input via `tokenizer.apply_chat_template()`. Without this field, the `/chat/completions` endpoint cannot format prompts and fails entirely.
|
|
|
|
---
|
|
|
|
### Fix 2: Corrected shard mapping in `model.safetensors.index.json`
|
|
|
|
**Before:** Layer 7's `q_proj`, `k_proj`, `v_proj` pointed to wrong shard
|
|
**After:** Corrected to the right shard
|
|
|
|
| Tensor | Before | After |
|
|
|--------|--------|-------|
|
|
| `model.layers.7.self_attn.q_proj.weight` | `model-00001-of-00005.safetensors` | `model-00002-of-00005.safetensors` |
|
|
| `model.layers.7.self_attn.k_proj.weight` | `model-00001-of-00005.safetensors` | `model-00002-of-00005.safetensors` |
|
|
| `model.layers.7.self_attn.v_proj.weight` | `model-00001-of-00005.safetensors` | `model-00002-of-00005.safetensors` |
|
|
|
|
**Why:** All other tensors in Layer 7 correctly point to `model-00002`. This mismatch causes a weight loading error at inference time since the tensors cannot be found in the referenced shard.
|
|
|
|
---
|
|
|
|
### Fix 3: Corrected `base_model` metadata in `README.md`
|
|
|
|
**Before:** `base_model: meta-llama/Meta-Llama-3.1-8B`
|
|
**After:** `base_model: Qwen/Qwen3-8B`
|
|
|
|
**Why:** The actual weights (`lm_head.weight` shape `[151936, 4096]`) and config (`model_type: qwen3`, `architectures: Qwen3ForCausalLM`) confirm this is a Qwen3-8B model. LLaMA 3.1-8B has a vocab size of 128,256, which does not match. This is a metadata-only fix with no effect on inference.
|
|
|
|
---
|
|
|
|
## What Was NOT Changed
|
|
|
|
| Item | Reason |
|
|
|------|--------|
|
|
| `config.json` | All architecture values match Qwen3-8B spec exactly |
|
|
| `tokenizer_class: "Qwen2Tokenizer"` | Qwen3 intentionally reuses Qwen2Tokenizer (same BPE) |
|
|
| `eos_token_id: [151645, 151643]` | Matches official Qwen3 generation config |
|
|
|
|
---
|
|
|
|
## Verification
|
|
|
|
```python
|
|
from transformers import pipeline
|
|
import torch
|
|
|
|
pipe = pipeline(
|
|
"text-generation",
|
|
model="syj4205/broken-model-fixed",
|
|
dtype=torch.bfloat16,
|
|
device_map="auto",
|
|
)
|
|
|
|
messages = [{"role": "user", "content": "Who are you?"}]
|
|
result = pipe(messages, max_new_tokens=40)
|
|
print(result[0]["generated_text"][-1]["content"])
|
|
```
|
|
|
|
**Output:**
|
|
|
|
```
|
|
<think> Okay, the user asked, "Who are you?" I need to respond in a friendly and
|
|
informative way. Let me start by introducing my name, Qwen...</think>
|
|
I'm Qwen, a large language model developed by Alibaba Cloud.
|
|
``` |