The first cyberprev quant served pure gibberish despite passing every structural check. Root cause: the hotdogs/Qwen3.8-27B-abliterated-cyber-preview checkpoint ships broken -- 850 of 1199 tensors (the whole transformer body) carry a TRIPLED `language_model.` prefix, confirmed present in the upstream HF index (an unsloth export bug, not our download). transformers silently loaded the unmapped tensors as random-init, the pipeline quantized noise, and structural verification passed because it inspects the output config, never that input names mapped. A plain greedy coherence smoke caught it; nothing structural could. Fix: rewrite tensor names against a known-good reference of the same architecture (qwen38-27b-uncensored-bf16), verified the repaired name-set == reference name-set exactly (1199 tensors, 0 collisions), and re-quantized from the corrected source (cyberprev-bf16-fixed). v2 is coherence-verified (spec off AND live with dflash): Paris/Berlin/Rome, correct arithmetic precedence, primes, clean cyber-domain chat with a proper thinking split. dflash k=7 measured at 2.77 mean acceptance length. Seat serves cyberprev-27b / cyberprev-27b-thinking on :8025/GPU0 with dflash k=7, displacing the retired sentinel-r3. Gateway: removed the retired sentinel-r3 / sentinel-r3-reasoning aliases and added cyberprev-27b / cyberprev-reasoning -- NOT repointed, since serving cyberprev weights under sentinel's name is silent substitution. Verified end-to-end through the gateway; sentinel-r3 now 400s. Playbook gains a superseded-claims row: structural verification does not imply a good quant; a coherence smoke is the load-bearing gate, and third-party sources must have their tensor names diffed against a reference before quantizing. Broken v1 quant dir removed.
59 lines
3.7 KiB
Bash
59 lines
3.7 KiB
Bash
# cyberprev-seat — hotdogs/Qwen3.8-27B-abliterated-cyber-preview, fv-ml1 GPU 0, :8025.
|
|
# Copy to .env on the host at /opt/docker/compose/cyberprev-seat/.env.
|
|
|
|
# ── Image ───────────────────────────────────────────────────────────────────
|
|
# Same pinned nightly mog-sec and sentinel-r3 run. Not :latest — pin it, so a seat
|
|
# restart cannot silently change the engine under a measured configuration.
|
|
CYBER_IMAGE=vllm/vllm-openai:nightly-e9d1398d9edfd90fcc1cf783805240e3effec013
|
|
API_KEY=replace-me
|
|
|
|
# ── Placement ───────────────────────────────────────────────────────────────
|
|
# GPU 0, co-resident with mog-sec. Took over :8025 from the retired sentinel-r3 seat.
|
|
CYBER_GPU_ID=0
|
|
CYBER_PORT=8025
|
|
CYBER_CONTAINER_NAME=vllm-cyberprev
|
|
|
|
# ── Model ───────────────────────────────────────────────────────────────────
|
|
# In-house mixed quant, compressed-tensors (NOT modelopt_fp4).
|
|
# ⚠ Quantized from /tank/aimodels/cyberprev-bf16-FIXED, not the raw download. The raw
|
|
# hotdogs export ships 850/1199 body tensors with a TRIPLED `language_model.` prefix
|
|
# (upstream bug) -> quant of the raw source is gibberish that passes every structural
|
|
# check. cyberprev-bf16-fixed is the name-repaired source (verified tensor-for-tensor
|
|
# against qwen38-27b-uncensored-bf16). See docs/pfi/model-quantization-playbook.md.
|
|
CYBER_MODEL=/tank/aimodels/cyberprev-nvfp4-mixed-v2
|
|
CYBER_QUANT=compressed-tensors
|
|
# ⚠ Its OWN name. Do not reuse `sentinel-r3` — that seat is retired and its gateway
|
|
# aliases are deliberately left to 404 rather than repointed at different weights.
|
|
CYBER_SERVED_NAME=cyberprev-27b
|
|
CYBER_SERVED_NAME_THINK=cyberprev-27b-thinking
|
|
|
|
# ── Memory ──────────────────────────────────────────────────────────────────
|
|
# 0.40 of the card, sharing GPU 0 with mog-sec. KV pinned in bytes (8 GiB) so the
|
|
# figure is reproducible regardless of what else is resident at start time.
|
|
CYBER_GPU_MEM_UTIL=0.40
|
|
CYBER_KV_CACHE_MEMORY=8589934592
|
|
|
|
# ⚠ 163840, NOT native 262144. Inherited from mog-sec, which crashed five times
|
|
# learning that the KV pool's capacity and the card's processing depth are different
|
|
# numbers. Raising this requires a deep-prefill probe with a NON-REPEATING prompt on
|
|
# THIS checkpoint — a repeated prompt hashes to cached blocks and never prefills deep.
|
|
CYBER_MAX_MODEL_LEN=163840
|
|
CYBER_MAX_NUM_SEQS=16
|
|
CYBER_MAX_NUM_BATCHED_TOKENS=4096
|
|
CYBER_KV_CACHE_DTYPE=fp8
|
|
|
|
# ── Speculative decoding ────────────────────────────────────────────────────
|
|
# One var, whole JSON — the two shapes are not interchangeable (dflash needs a
|
|
# "model", MTP must not have one).
|
|
# DFlash2 : {"method": "dflash", "model": "/drafter", "num_speculative_tokens": 7}
|
|
# MTP : {"method": "qwen3_5_mtp", "num_speculative_tokens": 3}
|
|
# dflash k=7 is the default, carried from the sentinel measurement (2.40 vs 2.18).
|
|
# ⚠ Re-measure on THIS body before trusting it: cyberprev is ABLITERATED, and
|
|
# abliteration is precisely what can desync an MTP head. Gate MTP on a measured
|
|
# acceptance of >=~40%, never on an assumption.
|
|
CYBER_SPEC_CONFIG={"method": "dflash", "model": "/drafter", "num_speculative_tokens": 7}
|
|
|
|
CYBER_REASONING_PARSER=qwen3
|
|
CYBER_REASONING_EFFORT=medium
|
|
CYBER_ALLOC_CONF=
|