Harrier OSS v1 0.6B — Community FP8
Unofficial community quantization — not a microsoft release.
FP8 (W8A8, FP8_DYNAMIC) quantization of
microsoft/harrier-oss-v1-0.6b (revision
f9b9dc8),
a 0.6B multilingual Qwen3Model embedding model using last-token pooling + L2 normalization
(the same pooling/prompting family as the 270M sibling in this collection). All credit for the
model belongs to Microsoft; this repo only changes the numeric precision of the transformer's
Linear projection weights and activations. 1.19 GB BF16 → 0.70 GB FP8, and fixture cosine
parity vs the BF16 golden is 0.9985 mean / 0.9957 min (see Benchmarks below) with MTEB deltas
under 0.002 absolute on every task measured.
Pick this variant for the best fidelity/size tradeoff on a GPU that supports FP8 (Ada/Hopper/ Blackwell). The companion NVFP4 variant trades additional fidelity for a further ~2x size reduction on Blackwell-class GPUs — see its own README for the pass/fail verdict.
What is quantized / Quantization details
- Method:
FP8_DYNAMIC(compressed-tensors preset) via llm-compressor 0.13.0 — static per-channel FP8 E4M3 weight scales computed directly from the weights, dynamic per-token FP8 E4M3 activation quantization at inference. - Scope: all 196
nn.Linearprojections inside the 28 Qwen3Model decoder layers (self_attn.{q,k,v,o}_proj,mlp.{gate,up,down}_proj). Left at full precision: the embedding table (embed_tokens, tied tolm_head), every RMSNorm module,lm_head, and the sentence-transformers last-token pooling + L2-normalize heads (outside the transformer module tree, always full precision). - Calibration: 448-sample pinned manifest (
calibration/manifest.json, seed 20260818973, own pool — disjoint from the 270m sibling's calibration set), bucketed by (input_type, token-length) — passages sampled frommteb/sts17-crosslingual-sts(disjoint from this collection's own eval fixture set), queries authored across the model's three documented instruct-prefix types (web_search_query/sts_query/bitext_query, confirmed byte-identical to the 270m sibling's prompts). Not strictly required forFP8_DYNAMIC's data-free weight scales, but run for parity with the NVFP4 export path. - Full module inventory / provenance file:
QUANT_PROVENANCE.json. - Quantize/eval scripts ship under
quantization/,eval/,calibration/; raw eval JSON undereval/evidence/.
Benchmarks / Validation
Two complementary evals, both against this collection's own BF16 golden baseline computed on the
same hardware (arcade, RTX 5070 Ti) with the same fixture/prompt pinning (see
eval/README.md for the full protocol — own 190-fixture set, seed 20260818602, not reused from
the 270m sibling): (1) fixture cosine parity via vLLM llm.embed(), gated by
fixtures/tolerances.json (schema v1, parity_harness.py); (2) MTEB on the same 4-task subset
used for the 270m sibling, run via a thin vLLM-backed MTEB encoder wrapper
(eval/run_mteb_vllm.py) — required for this variant, since a compressed-tensors FP8
checkpoint cannot execute a raw transformers/sentence-transformers forward pass.
| eval | metric | BF16 (vLLM) | FP8 | delta | gate | verdict |
|---|---|---|---|---|---|---|
| fixture parity (190 cases, non-stress) | cosine, p5 aggregate | 1.0 (self) | 0.9985 | — | ≥ 0.995 | PASS |
| fixture parity (190 cases, non-stress) | cosine, per-case floor | 1.0 (self) | ≥ 0.9957 | — | ≥ 0.99 | PASS |
| MTEB STSBenchmark | main score | 0.82529 | 0.82532 | +0.00003 | ≤ 0.01 | PASS |
| MTEB STS17 (mean/11 subsets) | main score | 0.81352 | 0.81317 | -0.00035 | ≤ 0.01 | PASS |
| MTEB SciFact | NDCG@10 | 0.72841 | 0.73009 | +0.00168 | ≤ 0.01 | PASS |
| MTEB NFCorpus | NDCG@10 | 0.32494 | 0.32504 | +0.00010 | ≤ 0.01 | PASS |
| MTEB macro delta (4 tasks) | mean absolute delta | — | — | 0.00054 | ≤ 0.005 | PASS |
All gates pass with wide margin — comfortably ahead of both the FP8 fixture-parity and MTEB
gates, and materially better than the 270m sibling's own (also-passing) FP8 numbers, consistent
with a larger model having more redundancy to absorb 8-bit quantization noise. No case (incl. the
long-input stress fixture) fell below its gate. Raw result JSON:
eval/evidence/fp8_fixture_parity_report.json, eval/evidence/fp8_mteb.json,
eval/evidence/golden_bf16_mteb_vllm.json.
Protocol deviations from the paper / base card
- MTEB numbers for this variant use a custom vLLM-backed MTEB encoder wrapper
(
eval/run_mteb_vllm.py), not the base card's documentedsentence-transformersload path — required because compressed-tensors FP8 checkpoints only run through vLLM's fused kernels. The BF16-vs-FP8 deltas above compare BF16-via-vLLM vs FP8-via-vLLM (both ineval/evidence/) for an apples-to-apples backend comparison; the sentence-transformers BF16 numbers (also ineval/evidence/golden_bf16_mteb.json) differ only slightly (max 0.0013 per task) from the vLLM-served path, confirming vLLM serving reproduces the base card's documented behavior. - STS17/NFCorpus/SciFact dataset revisions above are the
mteb-library-pinned snapshot hashes as resolved at eval time (2026-08-18).
Serving / Usage
from vllm import LLM
llm = LLM(
model="shadowrock-io/Harrier-OSS-v1-0.6B-Community-FP8",
runner="pooling", # task=embed
trust_remote_code=True,
max_model_len=8192, # base model supports up to 32768; raise if you need longer inputs
gpu_memory_utilization=0.85, # lower if sharing the GPU with other processes
dtype="bfloat16", # activation/compute dtype; FP8 weights dequant/fuse automatically
)
# Documents: no prefix needed.
doc_emb = llm.embed(["Paris is the capital and largest city of France."])
# Queries: apply the base model's documented instruct prefix (three task-specific variants exist
# in the base repo's config_sentence_transformers.json `prompts` map — this is the general one).
query = "Instruct: Given a web search query, retrieve relevant passages that answer the query\\nQuery: what is the capital of France"
query_emb = llm.embed([query])
No PoolerConfig override is needed: vLLM auto-resolves pooling_type=LAST and L2-normalization
directly from this repo's 1_Pooling/config.json + config_sentence_transformers.json (carried
over unchanged from the BF16 base repo) — same as the BF16 model and the 270m sibling. FP8
requires no special vLLM flags beyond loading this repo; vLLM detects the compressed-tensors
FP8 config in config.json automatically and uses fused FP8 kernels on GPUs that support them
(Ada/Hopper/Blackwell — tested on an RTX 5070 Ti, Blackwell sm_120).
Notes that matter for correct embedding output:
- Pooling is last-token, not mean/CLS — confirmed via
pooling_mode_lasttoken: truein this repo's1_Pooling/config.jsonand empirically (all fixture embeddings are unit-norm to within 6e-8). - The query instruct-prefix meaningfully changes the embedding vs. the same text posed as a bare passage (asymmetric by design) — apply it only on the query side, never on documents.
Measured on: arcade (RTX 5070 Ti, 16 GB, Blackwell sm_120), vLLM 0.26.0, llm-compressor 0.13.0,
compressed-tensors 0.18.0, torch 2.11.0+cu130, mteb (pinned per eval/evidence/*.json).
Caveats
- The 448-sample calibration set skews toward short-to-medium sentence-length inputs (STS-style sentences + short authored queries); very long documents were exercised only by this collection's single adversarial stress fixture, which showed no measurable fidelity drop beyond the general FP8 noise floor.
- MTEB coverage is 4 small tasks (STSBenchmark, STS17, SciFact, NFCorpus); the base model claims broad multilingual and MTEB task-type coverage not evaluated here — only STS/retrieval-style tasks and 11 STS17 language pairs were measured.
Intended use & limitations
Intended uses are the base model's: general-purpose multilingual text embeddings for retrieval, clustering, semantic similarity, classification, bitext mining, and reranking. The base card's intended-use, safety, and coverage statements — microsoft/harrier-oss-v1-0.6b — carry over unchanged; quantization alters none of the model's behavior boundaries, only its numeric precision. Our evaluation establishes parity on the benchmarks listed above and nothing beyond them: other languages, MTEB task types, and document-length regimes inherit the base model's behavior with FP8 quantization noise that we have not measured there.
Attribution & citation
Quantization, validation harness, and card by Matt Busi (@mattbusi on Hugging Face) at ShadowRock. If you use this build, cite the microsoft base model — the underlying model architecture and training are theirs:
@misc{harrier-oss-v1-0.6b,
title = {Harrier OSS v1 0.6B},
author = {Microsoft},
year = {2026},
url = {https://huggingface.co/microsoft/harrier-oss-v1-0.6b}
}
License
MIT, inherited unchanged from the base model (see LICENSE; the base repo declares
license: mit in its card metadata but ships no LICENSE file, so the canonical MIT text is
reproduced here). Community build by ShadowRock; no Microsoft
affiliation or endorsement.
About ShadowRock
ShadowRock is an AI-specialized systems integrator and Zendesk Premier Partner. We help businesses get real value from their go-to-market technology, from CRM and support platforms to applied AI like the models in this collection. Find us at shadowrock.io or on LinkedIn.
- Downloads last month
- -
Model tree for shadowrock-io/Harrier-OSS-v1-0.6B-Community-FP8
Base model
microsoft/harrier-oss-v1-0.6bEvaluation results
- STSBenchmark main score (vLLM-served FP8) on MTEB STSBenchmarktest set ShadowRock eval (raw JSON)0.825
- STS17 mean main score (vLLM-served FP8) on MTEB STS17 (multilingual, 11 language-pair subsets, mean)test set ShadowRock eval (raw JSON)0.813
- SciFact NDCG@10 (vLLM-served FP8) on MTEB SciFacttest set ShadowRock eval (raw JSON)0.730
- NFCorpus NDCG@10 (vLLM-served FP8) on MTEB NFCorpustest set ShadowRock eval (raw JSON)0.325