Downloads · 30 days
301
27% of all-time downloads
Oxmiq/Hy4-preview-NVFP4-W4A16
Hy4-preview-NVFP4-W4A16 is a text generation model from Oxmiq. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as apache-2.0.
Independent NVFP4 quantization of tencent/Hy4-preview (780B MoE + MTP) by Oxmiq Labs, for single-node 8× ~96 GB Blackwell (SM120) serving via the official vllm/vllm-openai:hy4-preview image.
Downloads · 30 days
301
27% of all-time downloads
All-time downloads
1.1K
Public
Parameters
780B
490 GB on disk
Likes
2
Public
Click a slice to open those files.
.safetensors490 GB · 100%
How the weights are stored.
U8744B · 95%
From the Hugging Face model README
Independent NVFP4 quantization of tencent/Hy4-preview (780B MoE + MTP) by Oxmiq Labs, for single-node 8× ~96 GB Blackwell (SM120) serving via the official vllm/vllm-openai:hy4-preview image.
Not affiliated with, or endorsed by, Tencent. Produced independently from the publicly released base model under its Apache-2.0 license.
Only the routed experts (744.10B params, ~95.4% of the 780B total) are quantized to NVFP4. Layer 0 (the dense FFN), router gates, DSA indexer, MLA attention, shared experts, embeddings, fp32 lm_head, iHC parameters, and the MTP head stay in their original precision.
On the "8-bit precision" badge: Hugging Face infers precision from the safetensors dtype. compressed-tensors packs two 4-bit NVFP4 values into each
uint8byte, so the sidebar showsU8/ "8-bit precision". The actual weight format is 4-bite2m1, with onee4m3scale per 16-element group and onefp32global scale per tensor — about 4.5 bits per weight including scales.
| BF16 (official) | FP8 (official) | This checkpoint | |
|---|---|---|---|
| Disk size | ~1.56 TB | ~814 GB | ~490 GB (457 GiB, 130 shards) |
| Fits 8× 96 GB (768 GB) | no | no | yes (~215 GB left for KV cache and activations at --gpu-memory-utilization 0.92) |
Reference target for the recipe below:
| Requirement | Notes |
|---|---|
| GPUs | 8× NVIDIA Blackwell SM120 (compute capability 12.0) with ~96 GB each, e.g. RTX PRO 6000 Blackwell Server Edition. |
| Interconnect | PCIe only. NVLink and GPU peer-to-peer are not required. |
| Host RAM | ~1 TB recommended; our reference host has 1.5 TB. |
| Disk | 1 TB+ local NVMe: ~490 GB checkpoint, plus the serve image and optional FlashInfer JIT cache. |
| Software | Official image vllm/vllm-openai:hy4-preview (hy_v4 support via vLLM #54160) |
This build runs as W4A16 via Marlin: 4-bit weights are unpacked to 16-bit inside the matmul kernel, and all math runs at 16-bit. It doesn't use SM120's native FP4 tensor cores, so it doesn't depend on FP4-activation kernel support. Other GPU counts or memory sizes need a different parallelism and --max-model-len plan; the flags below are the 8×96 GB configuration we run, not the only possible one.
Weights-only RTN NVFP4 (fp4 e2m1 + e4m3 group scales per 16 elements + fp32 global scale), produced with llmcompressor model_free_ptq directly on safetensors shards (no transformers model class; experts are fused nn.Parameter tensors).
nvfp4-pack-quantized / W4A16).model-00001-of-00131.safetensors … model-00131-of-00131.safetensors — 130 weight shards. There is no model-00042-of-00131.safetensors; that number is skipped, so the highest index is 00131 while the file count is 130. Nothing is missing: model.safetensors.index.json maps every tensor across exactly those 130 files.
model.safetensors.index.json — weight index.
hy4-manifest-20260910.md5 — md5 checksums covering all 130 shards. Verify a download with:
md5sum -c --ignore-missing hy4-manifest-20260910.md5
--ignore-missing is required. The manifest was generated against a tree that also held upstream files not shipped here (finetune/, assets/, README_CN.md), and without the flag those 30 entries report as failures on an otherwise intact download. Files added after the manifest — this README, benchmarks/, the serve scripts — are not covered by it.
serve_entrypoint.sh — applies both required SM120 hot-patches (#54563 inline, #54568 via patch_54568.py), then execs the validated serve argv.
patch_54568.py — the #54568 attention-sinks patch, invoked by serve_entrypoint.sh.
benchmarks/ — raw result JSON for the published throughput tables, with field notes.
Tokenizer / chat template / config.json / generation_config.json / LICENSE (Apache-2.0)
vllm/vllm-openai:hy4-preview (after required SM120 patches — see Serving)Measured on the NVFP4 serve path used during validation. Not a claim of parity with official BF16/FP8 leaderboards. Protocols matter; each row states its own.
| Benchmark | This checkpoint | Notes |
|---|---|---|
| WikiText-2 PPL | 3.0577 | 295,944 tokens (NVFP4 arm) |
| NIAH 8k / 32k / 128k | 3/3 HIT | Long-context sanity, not full RULER |
| GSM8K-full | 96.29% (1270/1319) | 8-shot CoT |
| MATH-500 | 94.2% (471/500) | step-by-step + \boxed{}, math-verify |
Pending: CoT/think-mode MMLU-Pro. Optional follow-ups not claimed here: full RULER, IFEval, HumanEval, GPQA.
No same-harness BF16/FP8 baseline is reported yet, so the figures above are absolute scores on this serve path rather than measured deltas against the unquantized model.
hy4-preview-nvfp4, API)Measured 2026-09-24 against a live hy4-preview-nvfp4 OpenAI-compatible endpoint (same served-model name as this card’s entrypoint). Workload 1024 in / 1024 out, 100 prompts at each concurrency. Not a same-box claim for every 8× host; use as a reference point next to the Quick start recipe.
Measured with OxCapsule's benchmarking feature (cap benchmark), built on the open-source InferenceMAX framework and vLLM's benchmark_serving client (Apache-2.0).
Measurement path: these figures were taken through an OpenAI-compatible gateway sitting in front of the engine, not against a bare vllm serve as set up by the Quick start recipe below. The same workload measured directly against the engine, with the same flags, returns throughput within 2% and identical per-token latency, so the recipe reproduces this table. The one column the gateway moves is TTFT, and it moves it upward: 376 ms direct against 436 ms here at concurrency 16. A bare deployment should be slightly faster to first token, not slower.
| Concurrency | TTFT p50 | TPOT p50 | Decode / stream | Output tok/s (total) | Total tok/s | Completed |
|---|---|---|---|---|---|---|
| 1 | 0.95 s | 34 ms | ≈29 tok/s | 20.7 | 44.4 | 99/100 |
| 4 | 0.28 s | 40 ms | ≈25 tok/s | 97.7 | 206.1 | 100/100 |
| 8 | 0.33 s | 45 ms | ≈22 tok/s | 171.0 | 366.1 | 100/100 |
| 16 | 0.44 s | 52 ms | ≈19 tok/s | 280.2 | 604.4 | 100/100 |
Aggregate output throughput scales monotonically with concurrency. Per-stream decode falls from ≈29 to ≈19 tok/s as batching increases, which is the expected trade.
The Completed column counts every request that finished, so it accounts for incomplete and timed-out requests as well as hard failures.
Raw result JSON for each run above is in benchmarks/, with field notes and caveats in benchmarks/README.md.
vllm bench serveThe table above is measured with OxCapsule. As an independent check, the same endpoint and workload were measured with vLLM's own vllm bench serve at concurrency 16.
| Metric | OxCapsule | vllm bench serve |
|---|---|---|
| Median inter-token latency | 51.4 ms | 51.2 ms |
| Median end-to-end latency | 53,683 ms | 53,714 ms |
| Median TTFT | 436 ms | 762 ms |
Same OpenAI-compatible endpoint, 1024 in / 1024 out, 100 prompts, concurrency 16, greedy sampling, 3 warmup requests. Both tools measured through the same gateway endpoint, not against the engine directly, so these figures are comparable to each other and to the table above rather than to a bare vllm serve deployment. Raw output in benchmarks/vllm_bench_serve_gateway_c16.json.
Inter-token latency and end-to-end latency agree to within 0.3% and 0.1%. TTFT differs by 75% between the two tools on this path. Note that TTFT is highly sensitive to warmup: the same tool against the same endpoint returned 6,752 ms with no warmup requests and 376 ms with three, so any TTFT figure should state its warmup count.
Throughput is deliberately not compared. When measured through a proxy that returns a non-empty choices array in the same chunk as usage, vllm bench serve skips its usage branch and falls back to tokenizing the assistant content it accumulated. Because this model is served with --reasoning-parser hy_v4, the reasoning tokens sit in a separate field and go uncounted: it recorded 28.9 output tokens per request for requests that each ran about 54 seconds at roughly 51 ms per token. Measured against the engine directly the same tool counts correctly. Its latency measurements are unaffected on either path.
Stack: vllm/vllm-openai:hy4-preview · --quantization compressed-tensors · TP=8, PP=1 · Marlin W4A16 (activations stay 16-bit).
These do not always fail loudly — wrong values produce hangs, OOMs, extreme slowdowns, or degenerate / looping output:
| Flag / env | Why it is locked |
|---|---|
--tensor-parallel-size 8 + --pipeline-parallel-size 1 | Only shape verified coherent on SM120 for this stack. PP × sparse-MLA produced degenerate output even with KV-scale patches. |
| no expert parallelism | EP measured ~1.4–2.6 tok/s on this GPU class. |
--kv-cache-dtype fp8_ds_mla | Mandatory for hy_v4 sparse MLA (bf16 KV rejected). |
--attention-backend FLASHINFER_MLA_SPARSE_SM120 | Only sparse backend selectable for hy_v4 on SM120. |
--hf-overrides '{"num_nextn_predict_layers":0}' | MTP off. Leaving MTP constructed causes hard single-token loops on this W4A16 path. Do not use --speculative-config {} as an off switch (pydantic fail before GPU work). |
--max-model-len 262144 | Pin context. The model advertises 1M; defaulting to that is ~94 GB/seq and OOMs the 8×96 GB config this card is written for. Raise only if your VRAM truly allows. |
--distributed-executor-backend mp | Part of the launch we run. |
--max-num-seqs 16 | Safe at 256k context on this memory budget. |
--gpu-memory-utilization 0.92 | ~490 GB weights / 8 ranks ≈ 61 GB/GPU; leaves KV/activation headroom. |
NCCL_P2P_DISABLE=1 (+ NCCL_CUMEM_ENABLE=0) | Required on no-P2P PCIe boxes; omit and the engine can hang. |
VLLM_USE_FLASHINFER_SAMPLER=0 | ~8.6× sampler regression measured on SM120 when left on. |
Until upstream merges land in the image you pull, the stock hy4-preview image still needs:
Without both, the engine can look healthy and still emit garbage. This repo ships serve_entrypoint.sh (applies #54563 + runs patch_54568.py) so you do not have to invent the patch steps.
Assumes Docker with NVIDIA Container Toolkit and an 8× ~96 GB SM120 host (see Hardware requirements). The Hub repo is public — hf download works without a token. Optional: set HF_TOKEN or run hf auth login for higher rate limits.
huggingface-cli / hf-cli are deprecated — use hf:curl -LsSf https://hf.co/cli/install.sh | bash
hf download Oxmiq/Hy4-preview-NVFP4-W4A16 \
--local-dir ./Hy4-preview-NVFP4-W4A16
# optional: --token "$HF_TOKEN"
chmod +x ./Hy4-preview-NVFP4-W4A16/serve_entrypoint.sh
docker pull vllm/vllm-openai:hy4-preview@sha256:dc3f5fbe373b74141605a1e7843ae305faa648e584cac73a201395cc259522f6
Pinned to the image digest this card was validated against; the floating hy4-preview tag can move.
docker run --gpus all --ipc=host -p 8000:8000 \
-e NCCL_P2P_DISABLE=1 \
-e NCCL_CUMEM_ENABLE=0 \
-e VLLM_WORKER_MULTIPROC_METHOD=spawn \
-e TORCH_CUDA_ARCH_LIST=12.0 \
-e VLLM_ENABLE_HPC_OPS=1 \
-e VLLM_MARLIN_USE_ATOMIC_ADD=1 \
-e VLLM_USE_FLASHINFER_SAMPLER=0 \
-v "$PWD/Hy4-preview-NVFP4-W4A16:/model" \
-v "$PWD/Hy4-preview-NVFP4-W4A16:/work" \
--entrypoint bash \
vllm/vllm-openai:hy4-preview@sha256:dc3f5fbe373b74141605a1e7843ae305faa648e584cac73a201395cc259522f6 \
/work/serve_entrypoint.sh
Cold first launch may spend about 15 minutes in FlashInfer JIT; a persistent FLASHINFER_WORKSPACE_BASE cache avoids repeating that. Single-stream decode is in the about 30 tok/s class on the measured hy4-preview-nvfp4 path (see Serve throughput); workload-dependent.
curl -s http://127.0.0.1:8000/v1/models | head
curl -s http://127.0.0.1:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "hy4-preview-nvfp4",
"messages": [{"role":"user","content":"Say hello in one short sentence."}],
"max_tokens": 200,
"temperature": 0
}'
Pass if HTTP 200, the reply is coherent (reasoning then answer is fine), and there are no single-token / phrase loops. Failures that usually mean a bad launch: OOM, NCCL hang, or looping garbage (missing patches, MTP left on, or wrong GPU shape).
serve_entrypoint.sh applies the patches, then runs:
vllm serve /model
--served-model-name hy4-preview-nvfp4
--quantization compressed-tensors
--tensor-parallel-size 8
--pipeline-parallel-size 1
--distributed-executor-backend mp
--hf-overrides '{"num_nextn_predict_layers":0}'
--kv-cache-dtype fp8_ds_mla
--gpu-memory-utilization 0.92
--max-num-seqs 16
--max-num-batched-tokens 8192
--enable-chunked-prefill
--enable-prefix-caching
--tool-call-parser hy_v4
--reasoning-parser hy_v4
--enable-auto-tool-choice
--trust-remote-code
--port 8000
--attention-backend FLASHINFER_MLA_SPARSE_SM120
--max-model-len 262144
docker run (same flags; still need patches)Prefer Quick start above. Only use this if you apply #54563/#54568 inside the container yourself before vllm serve (same flags as the entrypoint; skipping patches can look healthy and still emit garbage):
docker run --gpus all --ipc=host -p 8000:8000 \
-e NCCL_P2P_DISABLE=1 \
-e NCCL_CUMEM_ENABLE=0 \
-e VLLM_WORKER_MULTIPROC_METHOD=spawn \
-e TORCH_CUDA_ARCH_LIST=12.0 \
-e VLLM_ENABLE_HPC_OPS=1 \
-e VLLM_MARLIN_USE_ATOMIC_ADD=1 \
-e VLLM_USE_FLASHINFER_SAMPLER=0 \
-v /path/to/Hy4-preview-NVFP4-W4A16:/model \
vllm/vllm-openai:hy4-preview@sha256:dc3f5fbe373b74141605a1e7843ae305faa648e584cac73a201395cc259522f6 \
/model \
--served-model-name hy4-preview-nvfp4 \
--quantization compressed-tensors \
--tensor-parallel-size 8 \
--pipeline-parallel-size 1 \
--distributed-executor-backend mp \
--hf-overrides '{"num_nextn_predict_layers":0}' \
--kv-cache-dtype fp8_ds_mla \
--gpu-memory-utilization 0.92 \
--max-num-seqs 16 \
--max-num-batched-tokens 8192 \
--enable-chunked-prefill \
--enable-prefix-caching \
--tool-call-parser hy_v4 \
--reasoning-parser hy_v4 \
--enable-auto-tool-choice \
--trust-remote-code \
--attention-backend FLASHINFER_MLA_SPARSE_SM120 \
--max-model-len 262144
hy4-preview image (hy_v4 via vLLM #54160+)Several Hy4 low-bit builds exist, targeting different runtimes and hardware:
0xTank/Hy4-preview-NVFP4-W4A16-MTP — NVFP4 via ModelOpt, custom Spark runtimemlx-community/Hy4-preview-4bit — MLX / Apple Silicon, ~433 GBinferencerlabs/Hy4-preview-MLX-Q4i — MLX / Inferencer app, Apple Silicon, ~456 GBAngelSlim/Hy4-preview-GGUF — GGUF / llama.cppqtum/Hy4-preview-GGUF — GGUF / llama.cppThis checkpoint is the compressed-tensors NVFP4 W4A16 build aimed at 8× ~96 GB Blackwell (SM120) with the official vllm/vllm-openai:hy4-preview image (~490 GB / ~457 GiB on disk).
Size differences between these builds largely reflect how much of the model each one converts. Here the conversion is limited to the routed experts; attention, shared experts, router gates, layer 0 (dense FFN), the MTP head and an fp32 lm_head stay at source precision, which accounts for most of the difference against the MLX builds.
Apache-2.0, same as tencent/Hy4-preview. LICENSE is included. Significant changes: routed-expert weights → NVFP4; re-shard; MTP experts re-fused to source layout. Not affiliated with or endorsed by Tencent (see the note at the top of this card).
--hf-overrides '{"num_nextn_predict_layers":0}'. Speculative decoding via MTP is therefore not available with this checkpoint as published; acceptance on W4A16 has not been measured.--max-model-len 262144of-00131 with unused index 42 (cosmetic; not present in the upstream BF16 shard layout — no tensors point at that shard)