
Ember (repo: otheru-ai/ember) is the inference engine that powers OtherU. It is a narrow, self-contained C-based runtime optimized for DeepSeek V4 Flash, not a general GGUF loader. It runs on the reference deployment in Docker with ROCm passthrough.
Source & Upstream
| Field | Value |
|---|---|
| Repository | github.com/otheru-ai/ember |
| Author | OtherU |
| License | MIT |
| Language | C / C++ |
| Upstream reference | github.com/antirez/ds4 by antirez (Salvatore Sanfilippo) — the architecture Ember reimplements |
| Backends | ROCm (AMD Strix-Halo — production), CPU (diagnostics) |
| Models | DeepSeek V4 Flash |
| Status | Beta — active development, frequent releases |
Ember is OtherU's own from-scratch engine, written against the ds4 architecture as an upstream reference and now at feature and performance parity with it. Like ds4 it builds on the foundations of llama.cpp / GGML.
Reference Deployment (Strix-Halo)
| Component | Detail |
|---|---|
| Container image | ghcr.io/otheru-ai/ember:2026.8.23 (built and published by OtherU) |
| Runtime | Docker with GPU passthrough (/dev/kfd, /dev/dri) |
| Model | DeepSeek-V4-Flash-0731-ablit1042-v2.gguf (2-bit quant, imatrix-tuned) |
| Port | 8000 (OpenAI-compatible API) |
| Context | 131,072 tokens (--max-ctx 131072) |
| GPU | AMD Radeon 8060S iGPU (gfx1151, RDNA 3.5) on Ryzen AI MAX+ 395, via ROCm |
| Power limit | 100% |
| KV cache | Disk-backed (/srv/ember/kvcache, 256 GB budget via --kv-cache-mb 262144) |
| Speculative decoding | Draft model DeepSeek-V4-Flash-0731-ablit1042-DSpark-draft.gguf (DFLASH_DS4_SPEC_MAX_CTX=49152) |
Start Command
docker run -d --restart unless-stopped --name ember-server \
--device /dev/kfd --device /dev/dri \
--security-opt seccomp=unconfined \
--network host \
-v /srv:/srv \
ghcr.io/otheru-ai/ember:2026.8.23 \
--port 8000 \
-m /srv/models/DeepSeek-V4-Flash-0731-ablit1042-v2.gguf \
--model-name deepseek-v4-flash \
--model-card /ember/share/model_cards/deepseek-v4-flash-src.json \
--kv-cache-dir /srv/ember/kvcache --kv-cache-mb 262144 \
--ds4-expert-top-k 4 --default-temperature 0.6 \
--prefix-cache-slots 6 --max-ctx 131072
Architecture
Ember is not a wrapper or generic runner — it is a purpose-built C program with its own graph execution engine. Key design choices:
- Single-model narrowness — only DeepSeek V4 Flash GGUFs with the expected tensor layout, quantization mix, and metadata
- Self-contained — no dependency on llama.cpp/GGML at runtime; kernels, quant formats, and prompt rendering are native
- Asymmetric quantization — routed MoE experts at
IQ2_XXS, down atQ2_K; shared experts, projections, and routing left unquantized. This is what makes 2-bit quants viable: most of the model space is aggressively compressed but the critical paths stay accurate - Disk-first KV cache — checkpoints are written to SSD at four moments (cold, continued, evict, shutdown), enabling fast session resume across restarts without re-prefilling from token zero
- Single-threaded inference — one graph worker serializes all requests; client threads handle HTTP parsing in parallel
Endpoints
| Endpoint | Method | Description |
|---|---|---|
/v1/chat/completions |
POST | Standard OpenAI chat (streaming or non-streaming) |
/v1/models |
GET | List loaded model(s) with metadata |
/v1/responses |
POST | OpenAI Responses API |
/v1/completions |
POST | Legacy completions endpoint |
/v1/messages |
POST | Anthropic-compatible messages API |
The deployment serves a single model id: deepseek-v4-flash.
Key CLI Flags
| Flag | Purpose |
|---|---|
--max-ctx N |
Allocated context tokens |
--power N |
GPU duty-cycle target (1–100) |
--kv-cache-dir DIR |
Enable disk-backed KV checkpoints |
--kv-cache-mb N |
Disk KV budget in MB |
--ds4-expert-top-k N |
Routed MoE experts evaluated per token |
--prefix-cache-slots N |
Number of cached prompt-prefix slots |
--ssd-streaming |
Run models larger than VRAM via SSD-backed expert cache |
--rocm / --cpu |
Select backend |
--trace FILE |
Log prompts, cache decisions, output, and tool calls |
--mtp |
Enable speculative decoding (experimental) |
Disk KV Cache Behavior
Checkpoints are written at four moments:
- cold — after a long first prompt reaches a stable prefix, before generation
- continued — when prefill or generation reaches the next aligned frontier
- evict — before an unrelated request replaces the live in-memory session
- shutdown — when the server exits cleanly
Cold saves trim the last 32 tokens and align down to a 2048-token chunk boundary to avoid BPE retokenization misses.
Model Quantization
Quantized GGUFs in use:
| Variant | RAM Required | Description |
|---|---|---|
q2-imatrix |
96–128 GB | Production default on Strix-Halo. Imatrix-tuned 2-bit with asymmetric routed-expert quant |
q2-q4-imatrix |
96–128 GB | Same with last 6 layers at Q4 |
Download script: download_model.sh q2-imatrix fetches from HuggingFace.
Performance Benchmarks
Reference Deployment (AMD Strix-Halo) — Measured
Measured 2026-08-22 on one AMD Ryzen AI Max+ 395 with Radeon 8060S (gfx1151) and 128 GB unified memory, against the published artifacts, with DSpark speculative decoding enabled:
| Metric | Result |
|---|---|
| Median decode | 34.16 tok/s (33.67–34.16) |
| DSpark acceptance | 0.989 median on greedy 256-token samples |
| Peak prefill | 386.8 tok/s at \~2,074 prompt tokens |
| Prefill at \~32.8k tokens | 282.3 tok/s |
Acceptance is workload-dependent: mixed free-form sampling at temperature 0.6 measured \~0.52 mean acceptance on the same pair. Full harness, raw results and environment are in the benchmark bundle on the model card.
SSD Streaming
When the model does not fit in GPU-addressable memory, Ember can run in SSD streaming mode. Non-routed weights stay resident; routed MoE experts are cached and loaded from the GGUF file on miss. The automatic budget takes 80% of the GPU recommended working set, subtracts non-routed weights, then uses the rest for expert cache.
# Automatic cache budget
ember-server --ssd-streaming
# Explicit cache size
ember-server --ssd-streaming --ssd-streaming-cache-experts 32GB
Tooling
| Binary | Purpose |
|---|---|
ember |
CLI interactive/one-shot inference |
ember-server |
HTTP API server (OpenAI-compatible) |
ember-bench |
Performance benchmark (prefill + decode across context frontiers) |
ember-agent |
Integrated coding agent (alpha) |
ember-eval |
Extractor self-test runner |
download_model.sh |
Fetch GGUFs from HuggingFace |
Additional tools under gguf-tools/: GGUF generation, imatrix collection, quantization, quality testing against official DeepSeek logits.