Summary
The documented x86 Qwen3-0.6B v1 q4_k path currently appears to fail before inference because the recommended v1 model file uses lm_head.weight, while the current Qwen3 FA2 implementation tries to load lm_head_out.weight.
Documented path
docs/cpu_backend/x86/index.rst recommends downloading the pre-converted model from the mllmTeam HuggingFace organization:
wget https://huggingface.co/mllmTeam/qwen-3-0.6b-mllm/blob/main/qwen-3-0.6b-q4_k.mllm
and then running it with -mv v1:
/path/to/build/bin/mllm-qwen3-runner \
-m /path/to/model/qwen-3-0.6b-q4_k.mllm \
-mv v1 \
-t /path/to/tokenizer/tokenizer.json \
-c /path/to/config/config_0.6B_w4a32_kai.json
The README mllm v1 model table also points Qwen3-0.6B CPU FP32/INT4 users to mllmTeam/qwen-3-0.6b-mllm.
What I found
I parsed the descriptor of the downloaded v1 .mllm file using the upstream v1 file layout. The file is a valid v1 model file and contains lm_head.weight, but not lm_head_out.weight:
magic 20012
param_count 311
has lm_head.weight true
has lm_head_out.weight false
However, the current Qwen3 FA2 implementation registers lm_head_out when tie_word_embeddings is enabled:
lm_head_ = reg<nn::Linear>("lm_head_out", cfg.hidden_size, cfg.vocab_size, false, cfg.linear_impl_type);
examples/qwen3/config_0.6B_w4a32_kai.json sets:
"tie_word_embeddings": true
so the runner tries to load lm_head_out.weight, which is not present in the documented v1 model file.
Possible cause
This looks like a mismatch between the older v1 pre-converted Qwen3-0.6B artifact and the newer Qwen3/KAI naming convention. The quantization config maps lm_head.weight to lm_head_out.weight, but the documented v1 model artifact still uses the old name.
Question
What is the preferred direction for fixing this path?
- keep backward compatibility with the documented v1 artifact by accepting
lm_head.weight as a fallback for tied embeddings;
- update the x86 docs to point to a v2/newly converted artifact;
- or re-publish the pre-converted model with the
lm_head_out.weight name?
I found a separate x86 FP16/Q4_K dequantization issue while investigating this path, and I will submit that as a separate PR because it affects the common x86 quantization code rather than only Qwen3.
Summary
The documented x86 Qwen3-0.6B v1 q4_k path currently appears to fail before inference because the recommended v1 model file uses
lm_head.weight, while the current Qwen3 FA2 implementation tries to loadlm_head_out.weight.Documented path
docs/cpu_backend/x86/index.rstrecommends downloading the pre-converted model from the mllmTeam HuggingFace organization:and then running it with
-mv v1:The README
mllm v1model table also points Qwen3-0.6B CPU FP32/INT4 users tomllmTeam/qwen-3-0.6b-mllm.What I found
I parsed the descriptor of the downloaded v1
.mllmfile using the upstream v1 file layout. The file is a valid v1 model file and containslm_head.weight, but notlm_head_out.weight:However, the current Qwen3 FA2 implementation registers
lm_head_outwhentie_word_embeddingsis enabled:examples/qwen3/config_0.6B_w4a32_kai.jsonsets:so the runner tries to load
lm_head_out.weight, which is not present in the documented v1 model file.Possible cause
This looks like a mismatch between the older v1 pre-converted Qwen3-0.6B artifact and the newer Qwen3/KAI naming convention. The quantization config maps
lm_head.weighttolm_head_out.weight, but the documented v1 model artifact still uses the old name.Question
What is the preferred direction for fixing this path?
lm_head.weightas a fallback for tied embeddings;lm_head_out.weightname?I found a separate x86 FP16/Q4_K dequantization issue while investigating this path, and I will submit that as a separate PR because it affects the common x86 quantization code rather than only Qwen3.