Downloads · 30 days
60
40% of all-time downloads
hermitdave/Qwen3.6-35B-A3B-MLX-3bit-mixed_3_8
Qwen3.6-35B-A3B-MLX-3bit-mixed_3_8 is a image-text-to-text model from hermitdave. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for mlx. The card lists the license as apache-2.0.
A mixed-precision MLX conversion of Qwen/Qwen3.6-35B-A3B, quantized with a custom mixed38 recipe that protects MoE router gates and preserves the full vision tower at bf16.
Downloads · 30 days
60
40% of all-time downloads
All-time downloads
149
Public
Parameters
35.1B
19.8 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors19.7 GB · 100%
How the weights are stored.
U3234.7B · 99%
From the Hugging Face model README
A mixed-precision MLX conversion of Qwen/Qwen3.6-35B-A3B, quantized with a custom mixed_3_8 recipe that protects MoE router gates and preserves the full vision tower at bf16.
Effective size: ~3.5 bpw language + bf16 vision, ~19 GB on disk. Runs on any Apple Silicon Mac with 16 GB+ unified memory.
Qwen3.6-35B-A3B is a Mixture-of-Experts model from Alibaba's Qwen team. Despite the "35B" name, only 3 billion parameters are active per token — it has 256 experts but routes through only 8 at a time. That makes it far more efficient to run than a dense model of equivalent size.
This repo contains the full multimodal model — language tower + vision tower. It handles text, images, and video.
| Detail | Value |
|---|---|
| Base model | Qwen/Qwen3.6-35B-A3B |
| Recipe | mixed_3_8 (custom predicate) |
| Group size | 64 |
| Language tower | 3-bit low / 8-bit high |
| Vision tower | bf16 (unquantized) |
| Router gates | Forced to 8-bit |
| Total size | ~19 GB (4 safetensor shards) |
mixed_3_8 is a per-layer mixed-precision recipe — some layers get 3-bit, others get 8-bit. The bit allocation follows the same logic as llama.cpp's Q4_K_M:
v_proj, down_proj (when layer qualifies) → 8-bitlm_head → 8-bit3-bit keeps the bulk of the model small; 8-bit preserves the layers that matter most. The result is near-lossless quality on sensitive layers while still meaningfully shrinking the model.
The built-in mixed_3_8 recipe doesn't know about MoE architectures. For this conversion, a custom predicate forces all router.gate and router.linear weights to 8-bit. Without this, low-bit routing decisions cause silent quality degradation — tokens get sent to the wrong experts and the output drifts.
The vision encoder is left at bf16 (unquantized). ViTs are very sensitive to low-bit quantization, and the vision tower is small enough (~1.5 GB) that leaving it at full precision is the safe default.
pip install mlx-vlm
from mlx_vlm import load, generate
model, processor = load("hermitdave/Qwen3.6-35B-A3B-MLX-3bit-mixed_3_8")
messages = [{"role": "user", "content": "Describe this image.", "image": "path/to/image.jpg"}]
prompt = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
result = generate(model, processor, prompt=prompt, max_tokens=200)
print(result.text)
Or via CLI:
python -m mlx_vlm.generate --model hermitdave/Qwen3.6-35B-A3B-MLX-3bit-mixed_3_8 --max-tokens 100 --prompt "Describe this image." --image path/to/image.jpg
| Property | Value |
|---|---|
| Architecture | qwen3_5_moe (hybrid linear attention + full attention) |
| Total parameters | 35 billion |
| Active per token | ~3 billion |
| Experts | 256 (top-8 routing) |
| Context length | 262,144 tokens |
| Vocabulary | 248,320 |
| Modalities | Text, image, video |
| Dtype | bfloat16 (language quantized to mixed 3/8-bit, vision bf16) |
| License | Apache 2.0 |
enable_thinking: true). To disable, pass chat_template_kwargs={"enable_thinking": false} at inference time.python -m mlx_vlm.convert \
--hf-path Qwen/Qwen3.6-35B-A3B \
--mlx-path ./Qwen3.6-35B-A3B-MLX-3bit-mixed_3_8 \
-q --quant-predicate mixed_3_8 \
--trust-remote-code
The router-protected predicate is available as a Python snippet — load the model with lazy=True, build a predicate that maps router.gate paths to 8-bit, skips the vision tower, and applies standard mixed_3_8 to everything else, then pass it to convert().
Apache 2.0. Inherited from the upstream model.