Downloads · 30 days
0
Lottolabs/Qwen3.5-9B-TT-BFP4-P150
Qwen3.5-9B-TT-BFP4-P150 is a text generation model from Lottolabs. Use it when you need the model to write or continue text. The card lists the license as apache-2.0.
An experimental, hardware-specific quantized weight-cache package and custom inference runtime derived from Qwen/Qwen3.5-9B, tested on one Tenstorrent Blackhole P150 with 32 GB device memory.
Downloads · 30 days
0
Access
Public
Updated Sep 6, 2026
Repo size
9.7 GB
Likes
0
Public
Click a slice to open those files.
.tensorbin9.7 GB · 100%
From the Hugging Face model README
An experimental, hardware-specific quantized weight-cache package and custom inference runtime derived from Qwen/Qwen3.5-9B, tested on one Tenstorrent Blackhole P150 with 32 GB device memory.
The published configuration combines packed quantized projections, fused GDN and SwiGLU kernels, sharded normalization, and one-token MTP speculative decoding. A fresh canonical LocalMaxxing test measured 76.15 output tokens/s; the separate three-workload clean-download benchmark measured 70.57–71.43 tokens/s.
Compatibility: These are native TTNN
.tensorbinfiles, not a standalone Transformers checkpoint or an AWQ, GPTQ, GGUF, NF4, or CUDA-compatible quant. Use the supplied custom runtime. The original pinned Qwen checkpoint is still required by the loader.Experimental behavior: Sharded normalization changes numerical results relative to the earlier interleaved-norm configuration. Repeated long-prompt requests produced different completions even at temperature zero. Deterministic output and quality equivalence are not established. A verified speed measurement is not a correctness or quality certification.
| Artifact | Contents |
|---|---|
quantized/ | 460 runtime-used TTNN tensor files, 9,699,607,184 bytes (9.70 GB decimal) |
runtime/ | 52 changed/new runtime source files, licenses, provenance, and a Dockerfile pinned to a public base-image digest |
model-spec.json | Tested P150 configuration: MTP-1, concurrency 1, maximum context 8,192 tokens |
prepare.py | Downloads the pinned upstream checkpoint, verifies published tensor checksums, and installs the TT caches |
serve.py | Docker-based OpenAI-compatible API launcher |
benchmark.py | Sequential streaming speed benchmark with timing, output hashes, and speculation counters |
manifest.json | File hashes, dependencies, configuration, limitations, and reproduction metadata |
benchmarks/ | Clean-download measurements and verification evidence |
| Stored dtype | Files | Serialized bytes |
|---|---|---|
TTNN BFLOAT4_B | 298 | 7,597,040,400 |
BFLOAT16 | 162 | 2,102,566,784 |
| Total | 460 | 9,699,607,184 |
Weights are converted with TTNN and model-specific packed worker-bank layouts. The cache contains mixed precisions and multiple runtime representations for operations such as prefill and decode. Its size is not a uniform four-bit parameter count, and BFP4 should not be interpreted as another framework's four-bit format.
Some tensors are reconstructed from the original checkpoint or derived at initialization, including GDN convolution/frontend tensors and derived projection/state/position structures. Uploading these caches therefore does not eliminate the upstream checkpoint download or its host-memory requirements.
/dev/tenstorrent.huggingface_hub./dev/hugepages-1G and /dev/hugepages; configure these for your host before launch.Only text generation on a single P150 was tested. Vision, other accelerators, multi-device operation, and higher-concurrency serving are not validated by this release.
These commands download the revision used for the clean-download benchmark. Later documentation and benchmark-result commits do not change those tested tensors or runtime sources.
python3 -m pip install huggingface_hub
hf download Lottolabs/Qwen3.5-9B-TT-BFP4-P150 \
--revision 57a271fb1073166cb8746ba684c3aba5fc81ca3c \
--local-dir ./qwen-tt
# Choose a disk-backed directory with sufficient free space.
CACHE_ROOT="$HOME/qwen-tt-cache"
python3 qwen-tt/prepare.py --cache-root "$CACHE_ROOT"
docker build --platform linux/amd64 \
--build-arg BUILD_JOBS=16 \
-t qwen35-tt-bfp4:hf \
-f qwen-tt/runtime/Dockerfile qwen-tt/runtime
python3 qwen-tt/serve.py --cache-root "$CACHE_ROOT" --port 8000
The served API model name remains Qwen/Qwen3.5-9B:
curl http://127.0.0.1:8000/v1/completions \
-H 'Content-Type: application/json' \
-d '{"model":"Qwen/Qwen3.5-9B","prompt":"The capital of France is","max_tokens":128,"temperature":0}'
Network security: The supplied launcher uses host networking and --no-auth. Do not expose it directly to an untrusted network; use network restrictions or an authenticated proxy.
Cold startup includes model loading and device-kernel compilation. Wait until the API is ready before benchmarking.
All results below use one P150, the custom vLLM / TT-Metal runtime, MTP-1, and one active request. They measure the complete configured system, not the isolated benefit of quantization. Acceptance rate, prompt distribution, output length, and host/runtime conditions affect throughput.
| Metric | Result |
|---|---|
| Canonical prompt | reasoning-v1 |
| Prompt tokens | 254 |
| Output tokens | 512 |
| Decode throughput | 76.15 tok/s |
| Time to first token | 209.07 ms |
| Draft tokens proposed / accepted | 279 / 232 |
| MTP acceptance rate | 83.15% |
Protocol: temperature zero, plain /v1/completions streaming, two warmups and five measured requests, with prefix caching disabled. The median-throughput iteration was submitted with its own matching timing and acceptance evidence, rather than the fastest sample. The Verified badge concerns the site's speed-test evidence checks; it does not establish model quality or output determinism.
| Workload | Prompt tokens | Median decode | Median TTFT | Distinct completions across five repeats |
|---|---|---|---|---|
| Short | 5 | 71.43 tok/s | 188.73 ms | 1 |
| Code | 21 | 71.25 tok/s | 178.43 ms | 1 |
| Longer prompt | 481 | 70.57 tok/s | 910.72 ms | 3 |
Protocol: one warmup per workload, five measured sequential requests per workload, temperature zero, and 512 generated tokens in every measured request. Decode throughput is (completion_tokens - 1) / (last_text_time - first_text_time), excluding TTFT.
These workloads differ from the LocalMaxxing canonical prompt; their throughput figures are not interchangeable.
Run the included benchmark against a ready server:
python3 qwen-tt/benchmark.py \
--url http://127.0.0.1:8000 \
--output speed.json
Evidence: raw speed measurements and verification details.
57a271fb1073166cb8746ba684c3aba5fc81ca3c.Upstream checkpoint revision:
Qwen/Qwen3.5-9B
c202236235762e1c871ad0ccb60c8ee5ba337b9a
The Dockerfile pins its public base by digest. See runtime provenance, source manifest, and the release manifest for exact identities and checksums.
Intended for experimentation, reproduction, and kernel/runtime performance research on the supported P150 configuration. It is not presented as a production-quality, hardware-independent quantized checkpoint.
Derived from Qwen/Qwen3.5-9B. The upstream model license is Apache-2.0; see LICENSE. Runtime sources retain their upstream copyright notices and bundled licenses. This is a community experimental release under Lottolabs, not an official Qwen or Tenstorrent release.