Skip to content

Qwen3-0.6B x86 v1 q4_k path fails due to lm_head name mismatch #684

Description

@kkkzbh

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions