tierlm fills your graphics card's memory first and puts the rest of the model in system RAM, automatically. A 46 GB model on a 32 GB card. A 15 GB model on an 8 GB laptop. Unzip, double-click, pick a model.
Illustration of how tierlm splits a model that doesn't fit. The setup screen shows the real numbers for your PC before you load.
Mixture-of-experts models (names with A3B, A10B...) use only a small part of the model for each word, so they stay fast even when most of the model lives in RAM. They're what tierlm is made for.

Before loading, tierlm works out where every piece of the model should live. If it all fits on the GPU, it runs there. If it doesn't, whole layers go to VRAM (with their part of the context) and the rest stay in RAM, where the CPU computes them. Each word crosses from CPU to GPU just once.
tierlm is written from scratch in C++ on ggml's math kernels. It does not use llama.cpp: the tokenizers, model graphs, memory planning, tier loader, server and web app are its own, and every model family is checked against an independent reference.


tierlm-0.2.0-windows.zip (1.1 GB, includes NVIDIA's CUDA engine: get this for an NVIDIA RTX card)
tierlm-0.2.0-windows-lite.zip (55 MB, Vulkan: Intel Arc, AMD Radeon, or no GPU)start-tierlm.bat. Your browser opens the setup screen: it shows your hardware and where the model will go.
Pick a model and chat.Windows 10 or 11, 64-bit, with an AVX2 processor. At least 32 GB of RAM to run models bigger than your GPU; 64 GB or more recommended. Your normal graphics driver: no CUDA toolkit, Python or SDKs.
The model has to fit in VRAM and RAM together, with about 8 GB to spare: roughly 30 GB with an 8 GB GPU and 32 GB of RAM, 60 GB with 8 GB and 64 GB, 85 GB with 32 GB and 64 GB.
| Family | Examples | Status |
|---|---|---|
| Qwen3.5 / 3.6 MoE (hybrid) | Qwen3.6-35B-A3B, Qwen3.5-122B-A10B | Tested |
| Qwen3.5 / 3.6 / 3.8 dense (hybrid) | Qwen3.8-27B, Qwen3.5-9B | Math verified |
| Qwen3 and Qwen3 MoE | Qwen3-0.6B to 32B, Qwen3-30B-A3B | Tested |
| Llama 3 / 3.1 / 3.2 / 3.3 | Llama-3.2-1B, Llama-3.1-8B, Llama-3.3-70B | Tested |
| Llama 2, Mistral 7B, TinyLlama | Mistral-7B-Instruct, TinyLlama-1.1B-Chat | Tested |
| Mixtral, Qwen2 / 2.5 | Mixtral-8x7B, Qwen2.5-7B, Qwen2.5-Coder | Math verified |
| OLMoE | OLMoE-1B-7B-0924-Instruct | Tested |
| Qwen3-Next, Gemma, Phi, DeepSeek, gpt-oss | Qwen3-Coder-Next, Gemma 3 | Not yet |
Any quantization from any publisher (bartowski, Unsloth, the model makers) works for a supported family, including multi-part files
(-00001-of-0000N.gguf), which load as one model.
Open WebUI, Continue, LibreChat and anything built on the OpenAI SDK can use the model loaded in tierlm. An Allow other devices switch (off by default) and an optional API key decide who can connect.
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8040/v1",
api_key="not-needed")
reply = client.chat.completions.create(
model="any", # uses the model loaded in tierlm
messages=[{"role": "user", "content": "Hello!"}],
stream=True)
for chunk in reply:
print(chunk.choices[0].delta.content or "", end="")
