VibeThinker-3B β Tenstorrent Blackhole (vLLM bundle)
A tt-kernel v4 vLLM bundle that
runs WeiboAI/VibeThinker-3B β a Qwen2.5-3B-family
dense reasoning model (Qwen2ForCausalLM) β on a single Tenstorrent Blackhole p150a through
the Tenstorrent vLLM plugin. It ships no kernel cache and no weights: kernels JIT-compile at
first-run warmup and weights are pulled from the base repo. This is the generic tt_transformers
path β the registration references the upstream built-in QwenForCausalLM, so no custom adapter
is shipped.
Serve it with tt (recommended)
tt serve --backend kernel mando2222/vibethinker-3b-P150
That's the whole bringup. The tt CLI provisions the
entire bare-metal serving stack for you β there is no tt-metal to build by hand. From the bundle's
manifest it:
- resolves the declared
platform.ttnnrange (>=0.72,<0.73) to a releasedttnnwheel and installs it, plus the matching sfpi JIT toolchain (so kernel compilation uses the toolchain that ttnn version expects, not whatever is on the host); - installs the Tenstorrent vLLM fork + plugin (CUDA-free) and
tt-kernel; - composes all of the above into a reusable serving environment under
$TT_DATA_DIR/envs, keyed by version so multiple models share one install rather than duplicating it; - hands off to
tt-kernel, which selects that environment and launches the server.
First run JIT-compiles kernels and downloads the weights from WeiboAI/VibeThinker-3B; later runs
reuse both. The result is an OpenAI-compatible server on :8000 (model id
WeiboAI/VibeThinker-3B, aliases vibethinker-3b, vibethinker-3b-P150).
Manage the composed environments with tt env list / tt env gc.
Requirements
- A Tenstorrent Blackhole card (this bundle targets a single p150a) with the driver loaded.
- Linux x86_64 (
ttnn/sfpi ship for that platform only). - The
ttCLI. No hand-built tt-metal, no Docker, and noscripts/install.shstep βttowns provisioning.
Using the model
Native 131072 context; up to 32 concurrent requests (max_num_seqs=32). The model emits long
<think>β¦</think> chain-of-thought β use generous max_tokens and its recommended sampling
(temperature 0.6 / top_p 0.95 / top_k 40). bf8 weights + bf8 KV, traced decode, host sampling.
curl http://localhost:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"vibethinker-3b","messages":[{"role":"user","content":"Prove that sqrt(2) is irrational."}],"max_tokens":4096,"temperature":0.6,"top_p":0.95}'
What's in this bundle
A single tt_kernel_manifest.json (tt-kernel schema v4, unified model+manifest). It declares the
platform envelope (platform.ttnn), the serving runtime (runtime.kind = vllm), the plugin
entrypoint (Qwen2ForCausalLM β models.tt_transformers.tt.generator_vllm:QwenForCausalLM), the
launch recipe, and the weights reference β from which tt-kernel renders the plugin's
vllm_metadata.json on pull. No precompiled kernels, no weights.
Advanced: serve without tt
You can still serve directly with tt-kernel if you manage the tt-metal + vLLM stack yourself (see
the tt-kernel docs and
tt-kernel instances). The tt path above automates exactly that setup.