Ling-3.1-flash NVFP4 Abliterated + MTP (RTX PRO 6000 TP=4)
inclusionAI/Ling-3.1-flash の公式FP8を出発点に、SGLang専用のNVFP4保存版を作り、そこへweights-only abliteration (T24) を焼き込み、さらにNEXTN 3-stepのMTP draftを同梱した保存版です。
通常のHugging Face量子化モデルではありません。vLLM/Transformers/GGUFでそのまま動く形式でもありません。 固定SGLang image・TP4/EP4・同梱patch・記載のGPU世代を維持した場合のみ再現できます。
1. 収録物
| パス | 内容 |
|---|---|
model-rank-{0..3}-part-*.safetensors |
本体 412 shard / 328,007,557,600 bytes。SGLang sharded_state 形式 (TP4/EP4) |
config.json / configuration_bailing_moe_v3.py / modeling_bailing_moe_v3.py |
本体configとremote code |
chat_template.jinja / tokenizer*.json / special_tokens_map.json |
tokenizer一式 |
draft/ |
MTP draft。model.layers.72.* のみ 1555 tensor / 65 shard / 16,348,395,520 bytes (BF16) |
draft/ は本体の model.word_embeddings / lm_head を共有する前提で、model.layers.72.* だけを持ちます。量子化configは取り除いてあります(unquant として読ませるため)。
このリポジトリは public です。 設定・patch・実測・検証JSONは private GitHub repo (hikarioyama/ling-3.1-flash-nvfp4-ablitrated-mtp-rtx-pro-6000-tp4) に置いています。
2. 重みの内訳(何を量子化し、何をしていないか)
- routed MoE expert: NVFP4(group size 16、E4M3 block scale、MSE 4over6)。packed U8 で保持。
- shared expert: 公式FP8のブロックスケールを正しく適用して BF16へ復元。学習元BF16を回復したものではありません。
- それ以外の層: 元のFP8/BF16/F32をほぼ維持。
- KV cache:
fp8_e4m3、scaleは未校正の既定1.0。主にMLA 9層が対象で、KDA 63層の固定状態をFP8化したものではありません。 - 校正データによるGPTQ/AWQ等は未実施。ビット一致は固定GPU・固定runtime・抽出36行列での実測であり、異なる世代・丸め方式でのビット一致は保証しません。
3. Abliteration (T24) の開示
lm_head は未編集、LoRA・追加tensor・SFT・推論時hookなし。重みだけに変更を焼き込んでいます(213 = 212本のblock writer + token embedding、protect50 は射影除去率 λ=0.5 の意味で、50本の保護軸ではありません)。
元Stock8K・主要指標Thinking offの同一条件での最終比較:
| 指標 | 基準 → T24 |
|---|---|
| 固定主要拒否 | 2/100(回答95・回避3・soft拒否2) |
| fit重複を除いた主要拒否 | 1/93 |
| holdout拒否 | 5/104 = 4.81% |
| Thinking on 拒否 | 2/100 |
| MMLU | 817 → 804 /1000(−1.3pp、95%CI[−3.6,+1.0]pp) |
| GSM8K | 194 → 194 /200 |
| HumanEval | 159 → 156 /164 |
| 真のdoc平均NLL | 1.865669 → 1.869620 |
| QA1000 正答/誤答/棄権 | 133/120/747 → 145/119/736 |
一般無検閲・品質非劣化・幻覚非増加を証明したものではありません。 拒否率の低下は回答の正確性・完全性・実用上の効力を保証しません。
4. MTP(投機的デコード)
| 項目 | 設定 |
|---|---|
| algorithm | NEXTN(SGLang内部で予約alias → EAGLE) |
| draft path | リポジトリの draft/(コンテナ内は /draft) |
| draft load format | safetensors |
| draft quantization | unquant(targetの量子化を継承させない) |
| num steps / topk / draft tokens | 3 / 1 / 4 |
| 予測範囲 | 1個のMTP層を3段再利用して3トークン先まで提案。検証枠4は追加tokenを含み、常に3個採用される意味ではない |
eagle_topk == 1 のとき num_draft_tokens == num_steps + 1 がSGLang側の要求です。
5. 起動
固定image: lmsysorg/sglang@sha256:975b6ab11f93c9ab315502cbd3862ce4891db97056adcadcdefb290c97621ad7(runtime 0.0.0.dev1+g8600be9ce / torch 2.14.1+cu130 / flashinfer 0.7.1)。
# このrepoをローカルへ取得し、<REPO>/ と <REPO>/draft を mount する
docker run --rm --gpus "device=<4つのGPU UUID>" \
--memory=72g --memory-swap=72g --shm-size=2g --user=1000:1000 --network=host \
--ulimit=memlock=-1 \
--env CUDA_VISIBLE_DEVICES=0,1,2,3 --env NCCL_SOCKET_IFNAME=lo \
--volume <REPO>:/model:ro --volume <REPO>/draft:/draft:ro \
--volume <THIS_REPO>/runtime_patches/combined-v5/bailing_moe_nextn.py:/sgl-workspace/sglang/python/sglang/srt/models/bailing_moe_nextn.py:ro \
--volume <THIS_REPO>/runtime_patches/combined-v5/flashinfer_mla_backend.py:/sgl-workspace/sglang/python/sglang/srt/layers/attention/flashinfer_mla_backend.py:ro \
--volume <THIS_REPO>/runtime_patches/combined-v5/triton_backend.py:/sgl-workspace/sglang/python/sglang/srt/layers/attention/triton_backend.py:ro \
--entrypoint python3 \
lmsysorg/sglang@sha256:975b6ab11f93c9ab315502cbd3862ce4891db97056adcadcdefb290c97621ad7 \
-m sglang.launch_server \
--model-path /model --served-model-name Ling-3.1-flash-NVFP4 \
--dtype bfloat16 --load-format sharded_state --quantization modelopt_fp4 \
--tp 4 --ep 4 --kv-cache-dtype fp8_e4m3 \
--moe-runner-backend flashinfer_cutlass --fp8-gemm-backend cutlass --fp4-gemm-backend flashinfer_cutlass \
--attention-backend triton --sampling-backend pytorch --disable-shared-experts-fusion \
--disable-custom-all-reduce --disable-overlap-schedule \
--context-length 524288 --max-total-tokens 1200000 --max-running-requests 4 \
--chunked-prefill-size 4096 --max-prefill-tokens 4096 --mem-fraction-static 0.985 \
--max-mamba-cache-size 32 --cuda-graph-bs-decode 1 2 4 --watchdog-timeout 1800 \
--prefill-attention-backend flashinfer --decode-attention-backend triton \
--json-model-override-args '{"max_position_embeddings":524288}' \
--reasoning-parser ling3 --tool-call-parser ling3 --enable-strict-thinking \
--speculative-algorithm NEXTN --speculative-draft-model-path /draft \
--speculative-draft-load-format safetensors --speculative-draft-model-quantization unquant \
--speculative-num-steps 3 --speculative-eagle-topk 1 --speculative-num-draft-tokens 4 \
--host 127.0.0.1 --port 30000
- patch群と固定imageは必須です。patchなしの素のsglangでの動作は確認していません。
- CPU側
MemoryMax=72GiB、swapなしで常駐させていました。 --max-total-tokens(共有KV pool)は、起動時予約・要求長に応じた動的割当で、4等分固定ではありません。MTP導入時に250万→120万へ減量しています(MTP層のKVとKDA verify用scratchが加算されるため)。
6. 実測(条件付き)
すべて同一短入力・256 token生成・temperature 0・ignore_eos・cold cache・warmup除外・各3回のHTTP E2E中央値です。純粋なdecodeカーネル時間ではありません。
| 比較 | 結果 |
|---|---|
| MTPなし → MTP 3-step | 77.843 → 149.427 token/s(+91.96%) |
| 投機の実効性 | spec_accept_length 2.943–3.048、spec_verify_ct 84–87(設定だけ有効な非投機状態ではない) |
| 並列4 | 各256 tokenが完了、native running=4を観測 |
| 32K容量 | 32768入力+16生成が正常。MTP 5.811s / 基準 5.867s |
| 512K境界 | 524240入力+16生成が正常(logprob全finite、verify 6回、平均採用長2.667)。MTP 464.4s / 基準 425.0s(このprefill主体条件では約9.3%遅い) |
出力token IDはMTP/baselineで一致していません。bit一致や能力非劣化を主張しません。 短文3件の内容一致は限られた確認です。
7. 制限
sharded_stateはSGLang専用です。TP/EP・runtime・GPU世代を変えるとそのまま使える保証はありません。- 512Kは元config
max_position_embeddings=262144を超えた位置範囲延長です。RoPE周波数・スケーリング・重みは変えていません。長文品質・native 512K学習長の保証ではありません。 - 品質評価は主に8K profileの測定です。長文品質の評価は未実施です。
- KV scale未校正1.0、routed expertのみNVFP4、共有KV120万により以前より複数長文の合計収容能力は小さい。
- 全カーネルの包括的なarch認証はしていません(生成されたKDA recurrent / speculative commitの2 cubinを
sm_120aで確認した範囲)。
8. 出典・ライセンス
- 上流: inclusionAI/Ling-3.1-flash(revision
7b864daa2cedb1404e12bc52899def2d151a9719から派生) - MTP draftの
model.layers.72.*は同revisionから取得・BF16復元したものです。 - 上流
inclusionAI/Ling-3.1-flashのライセンス・利用条件に従ってください。 本リポジトリは派生物であり、上流が定める条件を超える権利を付与するものではありません。