File size: 4,653 Bytes
3917c8c dd6e7f6 3917c8c dd6e7f6 3917c8c dd6e7f6 3917c8c dd6e7f6 3917c8c dd6e7f6 3917c8c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | ---
license: apache-2.0
language:
- ja
base_model: llm-jp/llm-jp-4-33b-thinking
base_model_relation: quantized
library_name: vllm
tags:
- nvfp4
- compressed-tensors
- blackwell
- japanese
- reasoning
pipeline_tag: text-generation
---
# llm-jp-4-33b-thinking-NVFP4
[llm-jp/llm-jp-4-33b-thinking](https://huggingface.co/llm-jp/llm-jp-4-33b-thinking)(国立情報学研究所 LLM勉強会による日本語特化 33B・推論モデル)の **NVFP4 (W4A4, group 16)** 量子化です。モデル本体の功績はすべて [LLM-jp](https://huggingface.co/llm-jp) にあります。本リポジトリは量子化重みのみを配布します。
**66.5 GB → 21 GB。** 16GBカード2枚から載ります。
- アーキテクチャは素直な **LlamaForCausalLM**(Dense 33B・64層・語彙196,608の日本語特化トークナイザ・64kコンテキスト)
- **SM120(Blackwell)+ 素のvLLM v0.22.0** 向け。compressed-tensors自動判定、`--quantization`フラグ不要
- 量子化除外は `lm_head` のみ(視覚塔もMoEルーターも無いため)
## 実測(TP=4・32kコンテキスト・KV fp8・RTX PRO 2000 Blackwell ×4)
| 並列数 | 合計スループット |
|---|---|
| 1 | 43.1 t/s |
| 2 | 85.1 t/s |
| 4 | **167.3 t/s** |
プリフィル単流: **3,597 tok/s**(8kプロンプト・prefix cache無効・3回平均)
## 起動方法 — ⚠️公式の推論パーサが必須です
このモデルは OpenAI Harmony 形式(analysis / final チャンネル)で応答します。**素のvLLMでは思考(analysis)が本文に混ざって返る**ため、[公式cookbook](https://github.com/llm-jp/llm-jp-4-cookbook) の専用パーサを登録してから起動してください。**本リポジトリに同梱してあります**(`llmjp4_reasoning_parser.py` / `example_cli.py`)。
```bash
# リポジトリのファイルがあるディレクトリで
python3 example_cli.py serve <このモデルのパス> \
--served-model-name llmjp4 --trust-remote-code \
--tensor-parallel-size 4 --max-model-len 32768 \
--kv-cache-dtype fp8 --enable-prefix-caching \
--reasoning-parser llmjp4
```
P2Pの無いボードでは `NCCL_P2P_DISABLE=1` と `--disable-custom-all-reduce` を追加してください。
思考の深さはリクエストごとに指定できます:
```json
"chat_template_kwargs": {"reasoning_effort": "low"} // low / medium / high
```
## 検証記録 — reasoning_effort 別の観察(小規模)
日本語の音韻課題(モーラ数え12語・俳句の音数走査3句・字余り検出)を、当環境の汎用27B(Qwen3.8-27B NVFP4)と並べて試した記録です。**モデル2体・各課題1〜2回の小規模な検証**であり、一般化はできません。判断は結果を見てご自身で。
- **effort=low**: 語のモーラ数え 10/12(汎用27Bは11/12)。俳句の音数走査は両者ともほぼ不能。ひらがな分かち書きで渡すと両者とも正解した(表記→音の変換が律速で、数える力そのものはある、と読める挙動)
- **effort=high**: 「古池や〜」を5-7-5と走査し、字余りの句を「5-7-6、字余りあり」と検出した。汎用27Bも最高effortで同じ検出に到達した
- 速度はeffortに応じて変わります(lowが最速)。どのeffortで使うかは用途に合わせて
出力例(effort=low・パーサで本文分離済み):
> 潮騒に 足あと残す 夕焼けかな
## ⚠️ 量子化時に踏んだ罠(再現する方へ)
- **カスタムトークナイザのラッパー**(`llmjp4_tokenizer.py`)は環境によって日本語を一文字ずつに分割します(「ありがとうございます」が11トークン)。**生の `tokenizer.json` は正常**(同じ語が1トークン)。キャリブレーションは生のtokenizer.jsonで行い、chat_templateだけ`tokenizer_config.json`から移植しました。壊れたトークナイザでのキャリブは日本語品質を静かに損なうので、焼く前に必ず検問を
- GPU常駐でキャリブした場合、保存時の集約でOOMすることがあります。このモデルはCPU側に重みを置く方式(llm-compressorのSequentialPipeline既定)で問題なく焼けます
## レシピ
llm-compressor NVFP4 (W4A4, group 16)、`targets: [Linear]`、`ignore: ["lm_head"]`、キャリブレーション 32サンプル × 8192トークン(`neuralmagic/calibration`)。
🙏 [LLM-jp](https://huggingface.co/llm-jp)(モデルと公式パーサ)、vLLM / llm-compressor の各チームに感謝します。
|