agentleFS
NVIDIAKnown publisherNVIDIA/Model-Optimizer/skills/modelopt-ptq/SKILL.md

modelopt-ptq

Skill5.6k starsChanged 3 days agoApache-2.0View on GitHub

Use when the user asks to "quantize a model", "run PTQ", "post-training quantization", "NVFP4 quantization", "FP8 quantization", "INT8 quantization", "INT4 AWQ", "quantize LLM", "quantize MoE", "quantize VLM", or needs to produce a quantized HuggingFace checkpoint from a pretrained model using ModelOpt. Do NOT use for multi-candidate recipe exploration or optimization (use modelopt-quant-recipe-search).

  • Installs packages

Trending

More talk lately.about the whole repository

Dec 2025: 0 mentionsJan 2026: 2 mentionsFeb 2026: 1 mentionMar 2026: 0 mentionsApr 2026: 2 mentionsMay 2026: 1 mentionJun 2026: 0 mentionsJul 2026: 0 mentionsAug 2026: 2 mentionsSep 2026: 20 mentionsOct 2026: 15 mentionsNov 2026: 11 mentions
Dec 2025Jun 2026Nov 2026
Mentions a month of the NVIDIA/Model-Optimizer repository that our weekly crawl found. There is no adoption data for this file yet.

Who's talking about NVIDIA/Model-Optimizer

The biggest 5 of 54 mentions linking to the repository that our crawl found. Each line is their own headline.

See all 54

Talked about on GitHub and Bluesky (54 times).

On GitHub · 50

45 more on GitHub

The file

Show its rules and text

We split this skill into the rules it gives an agent

18 rules. About 0 are common, 5 are distinctive, and 13 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 13

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Use modelopt-quant-recipe-search for multi-candidate recipe exploration or optimization.

    line 16
  2. Very specific:

    Use the common skill's environment-setup.md and workspace-management.md.

    line 21
  3. Distinctive:

    After completing them you should know:

    line 22
  4. Very specific:

    Check the support table in examples/hf_ptq/README.md for verified HF models.

    line 32
  5. Very specific:

    If the model uses trust_remote_code (check config.json for auto_map), inspect its custom Python files for imports not present in the …

    line 39
  6. Distinctive:

    If extra deps are needed:

    line 51
  7. Very specific:

    If a model-specific recipe exists, prefer --recipe <path> — but inspect its include/exclude patterns rather than assuming (e.g.

    line 64
  8. Very specific:

    Use --qformat <name> (e.g., --qformat nvfp4).

    line 71
  9. Very specific:

    Text-only LLM PTQ: Prefer the representative nemotron-post-training-v3 blend.

    line 90
  10. Very specific:

    Run --help for all options.

    line 130
  11. Very specific:

    Write a YAML config using common/hf/ptq.sh.

    line 137
  12. Very specific:

    Follow references/unsupported-models.md.

    line 151
  13. Distinctive:

    After job submission, register the job and set up monitoring per the modelopt-monitor skill.

    line 158
  14. Very specific:

    Read references/checkpoint-validation.md and perform all four validation groups on the exact checkpoint path that will be …

    line 173
  15. Distinctive:

    Check output size and estimated bits per weight against the baseline/source checkpoint.

    line 175
  16. Very specific:

    Check quantized-weight coverage against the requested qformat/recipe/config.

    line 176
  17. Distinctive:

    Check metadata consistency against the baseline/source model.

    line 177
  18. Very specific:

    Call mto.enable_huggingface_checkpointing() before quantization

    line 185

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

ModelOpt Post-Training Quantization

Produce a quantized checkpoint from a pretrained model. Read examples/hf_ptq/README.md first — it has the support matrix, CLI flags, and accuracy guidance.

Use modelopt-quant-recipe-search for multi-candidate recipe exploration or optimization. Use this skill for each selected recipe's PTQ run.

Step 1 — Environment

Use the common skill's environment-setup.md and workspace-management.md. After completing them you should know:

  • ModelOpt source is available
  • Local or remote (+ cluster config if remote)
  • SLURM / Docker+GPU / bare GPU
  • Launcher available?
  • Which workspace to use

Step 2 — Is the model supported?

Check the support table in examples/hf_ptq/README.md for verified HF models.

  • Listed → supported, use hf_ptq.py (step 4A/4B)
  • Not listed → read references/unsupported-models.md to determine if hf_ptq.py can still work or if a custom script is needed (step 4C)

Step 2.5 — Check for model-specific dependencies

If the model uses trust_remote_code (check config.json for auto_map), inspect its custom Python files for imports not present in the container:

grep -h "^from \|^import " <model_path>/modeling_*.py | sort -u

Known dependency patterns:

Import foundPackages to install
from mamba_ssm / from causal_conv1dmamba-ssm causal-conv1d (Mamba/hybrid models: NemotronH, Jamba)

If extra deps are needed:

  • Launcher (4B): set EXTRA_PIP_DEPS in the task's environment section — ptq.sh installs them automatically
  • Manual (4A): unset PIP_CONSTRAINT && pip install <deps> before running hf_ptq.py

Step 3 — Choose quantization format

First, check for a model-specific recipe:

ls modelopt_recipes/models/ 2>/dev/null
ls modelopt_recipes/model_type/<model_type>/ptq/ 2>/dev/null  # per-arch; <model_type> from local config.json (Hub ID: AutoConfig.from_pretrained)

If a model-specific recipe exists, prefer --recipe <path> — but inspect its include/exclude patterns rather than assuming (e.g. for VLMs, confirm the vision tower is actually excluded).

If no model-specific recipe, choose a format based on GPU (details in examples/hf_ptq/README.md):

  • Blackwell (B100/B200/GB200): nvfp4 variants
  • Hopper (H100/H200) or older: fp8 or int4_awq

Use --qformat <name> (e.g., --qformat nvfp4). Format definitions: modelopt/torch/quantization/config.py. General PTQ recipes in modelopt_recipes/general/ptq/ correspond to the same formats — --qformat is the simpler way to use them.

Before running PTQ, sanity-check the selected qformat/recipe against the model structure. Inspect the recipe's include/exclude patterns and summarize which layer groups will be quantized and approximately how many modules/layers match (attention projections, MLP projections, experts, etc.). If the match count is 0, or far smaller than expected for the model, stop and fix the recipe or ask the user before launching calibration.

VLMs: generic *mlp*/*experts* recipes also match the vision tower (model.visual.*); quantizing the ViT silently breaks image benchmarks. Use the model_type/<model_type>/ptq/ recipe or add *visual*/*vision_tower* excludes, then verify in Step 5 — see references/checkpoint-validation.md.

If the source checkpoint is already quantized and the requested recipe/config reduces quantization coverage, confirm that intent with the user before running. For example, if an FP8 checkpoint is used as input and the recipe excludes some layers so they would fall back to BF16 instead of staying quantized, call out the affected layer groups and ask whether that FP8-to-BF16 fallback is intended.

NVFP4 can be calibrated on Hopper but requires Blackwell for inference.

Step 4 — Run PTQ

Goal: checkpoint on disk (.safetensors + config.json).

For listed models (4A/4B): run full calibration directly (--calib_size 512). For unlisted models (4C): run a smoke test first (--calib_size 4), wait for success, then full calibration.

Recommended calibration datasets

  • Text-only LLM PTQ: Prefer the representative nemotron-post-training-v3 blend. modelopt/torch/utils/dataset_utils.py expands it to seven registered Nemotron SFT domains. Configure Hugging Face credentials where required.

    python examples/hf_ptq/hf_ptq.py ... \
        --dataset nemotron-post-training-v3
  • VLM PTQ: Include image-text calibration with --calib_with_images. This path uses nemotron_vlm_dataset_v2 with the current default subsets sparsetables, plotqa_cot, and wiki_en; examples/hf_ptq/hf_ptq.py and modelopt/torch/utils/vlm_dataset_utils.py are the source of truth.

    python examples/hf_ptq/hf_ptq.py ... \
        --calib_with_images

--dataset selects text-only calibration and cannot substitute for multimodal examples. Use --dataset cnn_dailymail only as a fallback when representative data is unavailable, such as without gated-data access or with only a local public cache.

Which path?

In README table? ─→ YES ──→ SLURM (local or remote)? ──→ LAUNCHER (4B)
                  │          Local Docker + GPU? ────────→ LAUNCHER (4B)
                  │          Remote Docker (no SLURM)? ──→ MANUAL (4A)
                  │          Bare GPU (local or remote)? → MANUAL (4A)
                  │
                  └→ NOT LISTED ──→ UNLISTED MODEL (4C)

4A — Direct: supported model, manual execution

pip install --no-build-isolation "nvidia-modelopt[hf]"
pip install -r examples/hf_ptq/requirements.txt

python examples/hf_ptq/hf_ptq.py \
    --pyt_ckpt_path <model> \
    --qformat <format> \
    --calib_size 512 \
    --export_path <output>

Run --help for all options.

For remote, use remote_run from the common skill's remote_exec.sh; see its remote-execution.md.

4B — Launcher: supported model on SLURM or local Docker

Write a YAML config using common/hf/ptq.sh. See references/launcher-guide.md for the full template.

cd tools/launcher
# SLURM (remote or local):
SLURM_HOST=<host> SLURM_ACCOUNT=<acct> uv run launch.py --yaml <config.yaml> user=<ssh_user> identity=<ssh_key> --yes
# Local Docker:
uv run launch.py --yaml <config.yaml> hf_local=<hf_cache> --yes

The launcher blocks and tails logs until the job completes. If the launcher fails (missing deps, config errors), fall back to path 4A (manual execution).

4C — Unlisted model

Follow references/unsupported-models.md. It walks through investigating the model, patching ModelOpt if needed, and running hf_ptq.py. Run manually (like 4A) for easier monitoring and debugging.

For SLURM, see the common skill's slurm-setup.md and this skill's references/slurm-setup-ptq.md.

Monitoring

After job submission, register the job and set up monitoring per the modelopt-monitor skill.

Step 5 — Verify output

ls -lh <output_path>/
# Expect: config.json, tokenizer files, model-*.safetensors

Report the path and size to the user.

Post-quantization validation

This is a required gate before any deployment or evaluation submission. Do not submit an eval, start a production serving job, or hand off the checkpoint as ready until the gate, including its serving canary, has passed.

Read references/checkpoint-validation.md and perform all four validation groups on the exact checkpoint path that will be deployed/evaluated:

  1. Check output size and estimated bits per weight against the baseline/source checkpoint.
  2. Check quantized-weight coverage against the requested qformat/recipe/config.
  3. Check metadata consistency against the baseline/source model.
  4. Complete the required downstream handoff and serving-readiness validation.

Report the gate result before moving on. Follow the canonical report format and all blocking conditions in references/checkpoint-validation.md; do not hand off a checkpoint unless every required check passes.

Key API Rules

  • mtq.register() classes must define _setup() and call it from __init__
  • Call mto.enable_huggingface_checkpointing() before quantization
  • Wildcard *gate* matches too broadly — use *mlp.gate* or *router*
  • VLMs: hf_ptq.py auto-extracts the language model via extract_and_prepare_language_model_from_vl() — no manual VLM handling needed in most cases
  • FP8 checkpoints: prefer _QuantFP8Linear (lazy dequant) over FineGrainedFP8Config(dequantize=True) which wastes ~2x memory. See references/unsupported-models.md for details
  • Custom quantizer names must end with _input_quantizer or _weight_quantizer

Common Pitfalls

  • Model-specific dependencies: Models with trust_remote_code may import packages not in the container (e.g., mamba-ssm for hybrid Mamba models). See Step 2.5. Use EXTRA_PIP_DEPS env var with the launcher, or install manually before running hf_ptq.py
  • Linear-attention models (Qwen3-Next/3.5/3.8, GLM-5.x Flash, Kimi Linear, OLMo Hybrid) fall back to slow, memory-hungry PyTorch kernels without pip install "fla-core>=0.5.2"; install it before calibrating on GPU (it breaks CPU runs of these models)
  • Transformers version: New models may need a newer version of transformers than what's installed. Check config.json for transformers_version. In containers, beware of PIP_CONSTRAINT blocking upgrades — see references/slurm-setup-ptq.md for workarounds
  • Gated datasets: Some calibration datasets require HF authentication. Set HF_TOKEN in the job environment. Use --dataset cnn_dailymail only as the constrained-environment fallback described in Step 4, not as the preferred calibration set
  • NFS root_squash + Docker: See the common skill's slurm-setup.md section 5

References

ReferenceWhen to read
common skill: environment-setup.mdStep 1: always
common skill: workspace-management.mdStep 1: always
references/launcher-guide.mdStep 4B only (launcher path)
tools/launcher/CLAUDE.mdStep 4B only, if you need more launcher detail
references/unsupported-models.mdStep 4C only (unlisted model)
references/checkpoint-validation.mdStep 5: mandatory post-PTQ gate before deployment/evaluation
common skill: remote-execution.mdStep 4A/4C only, if target is remote
common skill: slurm-setup.mdStep 4A/4C only, if using SLURM manually (not launcher)
references/slurm-setup-ptq.mdStep 4A/4C only, PTQ-specific SLURM (container, GPU sizing, FSDP2)
examples/hf_ptq/README.mdStep 3: support matrix, CLI flags, accuracy
modelopt/torch/quantization/config.pyStep 3: format definitions
modelopt/torch/export/model_utils.pyStep 4C: TRT-LLM export type mapping
modelopt_recipes/Step 3: pre-built recipes

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.