Views
No views yet
Built with mlx-optiq, the MLX-native toolkit to quantize, fine-tune, and serve LLMs locally on Apple Silicon, no PyTorch and no cloud. Read the write-up · All OptiQ quants · Docs
optiq serve --stream-experts.optiq/optiq_vision.safetensors, 0.90 GB), so the image path keeps full precision while the language tower runs at 2 bits. The tower stays resident; only the experts stream.| image | output |
|---|---|
| a red circle on white | "The image contains a red circle." |
| a blue square on white | "The image contains a blue square." |
1from PIL import Image
2from optiq.runtime.moe_stream import load_streaming
3from optiq.runtime.engine import OptiqEngine
4
5model, tok = load_streaming("mlx-community/Qwen3.5-122B-A10B-OptiQ-2bit")
6eng = OptiqEngine.from_loaded(model, tok, "mlx-community/Qwen3.5-122B-A10B-OptiQ-2bit")
7print(eng.generate("What is in this image?", images=[Image.open("photo.jpg")]).text)mlx-optiq >= 0.3.3.
| Property | Value |
|---|---|
| Base | Qwen3.5-122B-A10B (122 B total, ~10 B active per token, 256 experts/layer) |
| Method | OptiQ static — structural per-layer bit allocation, no calibration |
| Bit-widths | 4-bit on attention / router / embeddings / first+last block, 2-bit on the routed experts |
| Achieved bits-per-weight | 2.50 |
| On disk | 44 GB |
| Resident while running | ~12 GB (experts streamed) |
| Decode speed | ~5 tok/s on an M3 Max (36 GB) |
static method assigns bits from architecture alone. On small models it matches the calibration method at a fraction of the cost (see the methods comparison).model_type: qwen3_5_moe), so it needs mlx-lm from main and import optiq (the MoE text tower postdates the 0.31.3 PyPI release; the main build also reports 0.31.3, so install from git, not a version pin):pip install -U mlx-optiq "mlx-lm @ git+https://github.com/ml-explore/mlx-lm.git"--stream-experts forces it):optiq serve --model mlx-community/Qwen3.5-122B-A10B-OptiQ-2bit --stream-expertsQwen3.5-122B-A10B-4bit and up). The full story is in the blog post.