--- 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 の使い分け(実測) 日本語の音韻課題(モーラ数え・俳句の音数走査・字余り検出)で汎用27Bと突き合わせた結果: - **effort=low**: 語のモーラ数え 10/12。俳句の音数走査はほぼ不能(これは汎用モデルも同じ。表記→音の透視がボトルネックで、ひらがな分かち書きを与えればどちらも正解できる) - **effort=high**: **一変します。**「古池や〜」を5-7-5と正しく走査し、字余りの句を「5-7-6、字余りあり」と検出できました(比較対象は汎用27B一体のみ・小規模な検証です。汎用側はeffortを上げてもここまで到達しませんでした) - 目安: **日常会話・実務は low(速い)、韻文・言葉の精査は high(-thinkingの真骨頂)** 品質の実弾例(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 の各チームに感謝します。