Executable programs and extensions
Last updated
GLM-5.3 744B on two M5 Ultras: memory and link requirements
The full GLM-5.3 model is split across two Macs, and each needs 256 GB of memory and a wired connection.
TensorFold 1.0.8 runs the full GLM-5.3 744B model across two M5 Ultras with kindlingai's trellis-coded EXLR8 home profile. Each machine has 256 GB unified memory1; download the checkpoint2 by rank and connect the machines over a cable. At context 8192 and parallel 4, each rank needs 159.6 GB. A single stream decoded at 31–32 tok/s with MTP3 and 21 tok/s without it; prefill4 was about 200 tok/s.
Split one model across two Mac ranks
TensorFold's GLM-5.3 EXLR8 path splits checkpoint experts and attention5 heads across two ranks. One Mac does not hold the complete 744B model. Each rank works on the same request and computes its share of the model.
The figures here apply to the full GLM-5.3 744B home profile. The Flash model uses a different checkpoint and runtime6 path, so their memory and speed figures are kept separate. Before setup, confirm the model name, memory capacity, and TensorFold version on both Macs.

Check per-rank memory and MTP figures
Each Mac downloads half of the expert weights (139.5 GiB) plus 11 GB of whole files shared by each rank. These are checkpoint file sizes. Separately, a running rank uses 159.6 GB at context 8192 and parallel 4. File size and runtime memory measure different things and use the source's different units; leave room for the OS, apps, and cache even on a 256 GB Mac.
| Setting | Value | How to read it |
|---|---|---|
| Model | Full GLM-5.3 744B · EXLR8 home | Flash excluded |
| Hardware | Two M5 Ultras · 256 GB each | Connect ranks over a cable |
| Condition | context 8192 · parallel 4 | 159.6 GB per rank |
| decode | MTP on 31–32 · off 21 tok/s | Single stream |
On two M5 Ultras, a single stream decoded at 21 tok/s with MTP off and 31–32 tok/s with it on. Prompt7 prefill was about 200 tok/s. These are results for one stream's decode8 and prompt processing, not concurrent-user throughput9 or a long-run average.
Prepare both ranks and check the link
Install TensorFold 1.0.8 and pull the same checkpoint revision on both Macs with --node 0/2 and --node 1/2. These numbers select the download shard. For serving, start rank 1 first and start rank 0 within five minutes.
tensorfold pull kindlingai/glm-5.3-exlr8-k2-k3-k4@f459f5d0272a529403dd9b3fd32f771f4250a0d4 --exlr8 home --node 0/2 --dir ~/models/glm-5.3-exlr8-hometensorfold pull kindlingai/glm-5.3-exlr8-k2-k3-k4@f459f5d0272a529403dd9b3fd32f771f4250a0d4 --exlr8 home --node 1/2 --dir ~/models/glm-5.3-exlr8-homeFirst prepare the network on both Macs. Follow the MCDMA Thunderbolt fabric setup to enable RDMA in Recovery, then check the cable-connected interface and peer address. This setup uses the built-in Thunderbolt RDMA path and does not use the separate security changes for Mac and ConnectX drivers.
From the MCDMA repository root, run the build below in a regular macOS terminal. When build/rpc/libmcdma-fabric.dylib is created and passes the official fabric connectivity check, prepare the rank JSON files.
git clone https://github.com/ashhart/MCDMA.git
cd MCDMA
make -C rpc
ls -l build/rpc/libmcdma-fabric.dylib
printf '%s\n' "$PWD/build/rpc/libmcdma-fabric.dylib"Use ~/models/glm-5.3-exlr8-home on both Macs. Save rank0.json there on Mac A and rank1.json on Mac B. Set library to the absolute library path printed earlier, and device and via to the actual RDMA device and cable-peer address. Replace 192.0.2.x and /path/to with actual values, then start rank 1 followed by rank 0. When both logs are ready, send requests to Mac A on port 8080.
{
"rank": 0,
"library": "/path/to/MCDMA/build/rpc/libmcdma-fabric.dylib",
"links": [{"peer": 1, "device": "rdma_en4", "via": "en4/192.0.2.2", "port": 7490, "name": "speedup"}]
}{
"rank": 1,
"library": "/path/to/MCDMA/build/rpc/libmcdma-fabric.dylib",
"links": [{"peer": 0, "device": "rdma_en4", "via": "en4/192.0.2.1", "port": 7490, "name": "speedup"}]
}tensorfold serve ~/models/glm-5.3-exlr8-home --speed-up "$HOME/models/glm-5.3-exlr8-home/rank1.json" --context 8192 --parallel 4 --temperature 0tensorfold serve ~/models/glm-5.3-exlr8-home --speed-up "$HOME/models/glm-5.3-exlr8-home/rank0.json" --context 8192 --parallel 4 --temperature 0 --name glm-5.3curl -fsS http://127.0.0.1:8080/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"glm-5.3","messages":[{"role":"user","content":"Say READY in one word."}],"max_tokens":8,"temperature":0}'
Set the working limits after the first response
When both ranks are ready and return a reply, the link is working. Change context or parallel one at a time. A longer context expands the state held for each request; more parallel requests require more memory at once. Record response delay and memory pressure together to identify a suitable setting.

Terminology notes
Unified memory — An architecture where the CPU and GPU share one physical memory pool.
Back to the textCheckpoint — A file containing saved model weights and related state. Versions or tasks in one model family may use different checkpoints.
Back to the textMTP — A training objective or model component for predicting multiple future tokens at once. In speculative decoding, those predictions can be proposed as candidate tokens.
Back to the textPrefill — The stage where an LLM reads the input prompt and computes representations for its tokens. Longer prompts contain more tokens to process.
Back to the textAttention — A neural-network operation that calculates relationships between input tokens and combines information from each position into the current representation.
Back to the textRuntime — The software environment that provides facilities needed while a program runs. In local AI, it can also refer to a model execution engine.
Back to the textPrompt — The input text sent to a model. For generative models it describes the desired result and strongly shapes the output.
Back to the textToken decoding — The stage that generates successive output tokens using the input and the response produced so far.
Back to the textThroughput — The amount of work processed or generated over time. Comparisons need the unit, such as tokens per second or requests per second.
Back to the text
Frequently asked questions
- What should you check first in this article?
- TensorFold 1.0.8 runs the full GLM-5.3 744B model across two M5 Ultras with kindlingai's trellis-coded EXLR8 home profile. Each machine has 256 GB unified memory; download the checkpoint by rank and connect the machines over a cable. At context 8192 and parallel 4, each rank needs 159.6 GB. A single stream decoded at 31–32 tok/s with MTP and 21 tok/s without it; prefill was about 200 tok/s.
- How much memory does it need?
- Each Mac downloads half of the expert weights (139.5 GiB) plus 11 GB of whole files shared by each rank. These are checkpoint file sizes. Separately, a running rank uses 159.6 GB at context 8192 and parallel 4. File size and runtime memory measure different things and use the source's different units; leave room for the OS, apps, and cache even on a 256 GB Mac.
Read next
memory and model
M5 Ultra SSD: faster loading or faster local AI?
Executable programs and extensions
Which local LLM app or serving engine should you start with?
Model setup recipes
GLM-5.3-Flash Serving Guide: A 320B Server-Scale MoE Recipe
Executable programs and extensions
How to Back Up and Restore a Local LLM You Already Use
