huckiyang commited on
Commit
ee69faa
·
verified ·
1 Parent(s): 8287854

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +35 -2
README.md CHANGED
@@ -16,8 +16,8 @@ We put this repo bundles the loader
16
  package (`inkling_mlx/`), so it runs with just `mlx` + `mlx-lm` + `transformers`.
17
 
18
  > Community build for large-model-on-Apple-Silicon experiments. ~**315 GB** in 2-bit ->
19
- > needs a large / multi-Mac (distributed MLX) or SSD expert-offload setup; does not fit a
20
- > single 192 GB Mac resident.
21
 
22
  ## Quantization (recipe: experts_only)
23
 
@@ -40,6 +40,39 @@ ids = tok("The capital of France is")["input_ids"]
40
  print(tok.decode(greedy_generate(model, config, ids, max_new_tokens=64)))
41
  ```
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  ## Attribution
44
 
45
  - Weights converted from `thinkingmachines/Inkling`.
 
16
  package (`inkling_mlx/`), so it runs with just `mlx` + `mlx-lm` + `transformers`.
17
 
18
  > Community build for large-model-on-Apple-Silicon experiments. ~**315 GB** in 2-bit ->
19
+ > doesn't fit a single 192 GB Mac *resident*, so run it via multi-Mac (distributed MLX) or
20
+ > **SSD expert-offload** (see below — one 192 GB Mac, or even a 64 GB Mac slowly).
21
 
22
  ## Quantization (recipe: experts_only)
23
 
 
40
  print(tok.decode(greedy_generate(model, config, ids, max_new_tokens=64)))
41
  ```
42
 
43
+ ## Run on a single Mac with SSD expert-offload
44
+
45
+ ~315 GB doesn't fit a 192 GB Mac resident — but an MoE only fires **6 of 256** experts per
46
+ token, so you can keep the always-needed weights in RAM (attention, shared experts, embeddings,
47
+ norms, router, vision/audio towers ≈ 35 GB) and **page the routed experts from SSD on demand**,
48
+ letting the OS page cache hold the hot ones. This makes the 2-bit omni build runnable on one
49
+ 192 GB Mac Studio (and even generates on a 64 GB Mac, slowly).
50
+
51
+ Tool: **[github.com/huckiyang/mlx-moe-offload](https://github.com/huckiyang/mlx-moe-offload)**
52
+ (MIT) — a drop-in over mlx-lm's `SwitchGLU`. It also answers the mlx-lm feature request
53
+ [ml-explore/mlx-lm#1438](https://github.com/ml-explore/mlx-lm/issues/1438).
54
+
55
+ ```bash
56
+ pip install mlx mlx-lm scipy pillow
57
+ git clone https://github.com/huckiyang/mlx-moe-offload && cd mlx-moe-offload && pip install -e .
58
+
59
+ # 1) one-time: repack the stacked experts into a per-expert SSD store
60
+ # (copies the bundled inkling_mlx/ loader in, so the offload dir is self-contained)
61
+ python -m mlx_moe_offload.repack --build /path/Inkling-mlx-2bit --out /path/Inkling-mlx-2bit-offload
62
+ OFF=/path/Inkling-mlx-2bit-offload
63
+
64
+ # 2) generate — text, image, or audio (omni)
65
+ python examples/inkling_omni.py --offload-dir $OFF --prompt "The capital of France is"
66
+ python examples/inkling_omni.py --offload-dir $OFF --image cat.png --prompt "What is in this image?"
67
+ python examples/inkling_omni.py --offload-dir $OFF --audio q.wav --prompt "Transcribe in English:"
68
+ ```
69
+
70
+ The prompt is prefilled in small `--prefill-chunk` blocks so only a bounded set of experts is
71
+ live at once (a lazy full-prompt prefill would page ~all experts per layer and OOM). Decode
72
+ speed is gated by the routing hit-rate + SSD bandwidth — check `store.stats()`. At 2-bit,
73
+ text is solid (*"…capital of Japan is Tokyo"*) while image/audio are recognizable but degraded
74
+ by quantization; a higher-bit build sharpens multimodal quality.
75
+
76
  ## Attribution
77
 
78
  - Weights converted from `thinkingmachines/Inkling`.