NVIDIA Nemotron-3-Nano uses one of the most sophisticated architectures available:
-
23 Mamba-2 Layers: State Space Models with selective state spaces
- Linear time complexity O(n) vs O(n²) for attention
- Excellent for long-range dependencies
- Large intermediate tensors (memory intensive)
-
23 MoE Layers: Mixture-of-Experts
- 128 routed experts per layer (2,944 total expert modules!)
- 1 shared expert per layer (always active)
- Top-6 routing: 6 experts activated per token
- Massive capacity with sparse activation
-
6 GQA Attention Layers: Grouped Query Attention
- 32 attention heads, 2 key-value heads
- Strategic placement for quality
1import gptqmodel.models.loader as gptq_loader
2
3# Bypass version check for NemotronH (required for transformers > 4.48)
4_original_check_versions = gptq_loader.check_versions
5def patched_check_versions(model_class, require_pkgs_version):
6 if 'NemotronH' in str(model_class):
7 return
8 return _original_check_versions(model_class, require_pkgs_version)
9gptq_loader.check_versions = patched_check_versions
10
11from gptqmodel import GPTQModel
12from transformers import AutoTokenizer
13
14model = GPTQModel.load(
15 "TevunahAi/Nemotron-3-Nano-30B-A3B-GPTQ",
16 trust_remote_code=True
17)
18tokenizer = AutoTokenizer.from_pretrained(
19 "TevunahAi/Nemotron-3-Nano-30B-A3B-GPTQ",
20 trust_remote_code=True
21)
22
23# Generate
24prompt = "The capital of France is"
25output = model.generate(
26 **tokenizer(prompt, return_tensors='pt').to('cuda'),
27 max_new_tokens=100
28)
29print(tokenizer.decode(output[0]))
1messages = [{"role": "user", "content": "Solve: What is 23 * 47?"}]
2
3tokenized = tokenizer.apply_chat_template(
4 messages,
5 tokenize=True,
6 add_generation_prompt=True,
7 return_tensors="pt"
8).to('cuda')
9
10outputs = model.generate(
11 tokenized,
12 max_new_tokens=1024,
13 temperature=1.0, # Recommended for reasoning
14 top_p=1.0
15)
16print(tokenizer.decode(outputs[0], skip_special_tokens=True))
1tokenized = tokenizer.apply_chat_template(
2 messages,
3 tokenize=True,
4 enable_thinking=False, # Disable reasoning traces
5 add_generation_prompt=True,
6 return_tensors="pt"
7).to('cuda')
8
9outputs = model.generate(
10 tokenized,
11 max_new_tokens=32,
12 do_sample=False, # Greedy for non-reasoning
13 num_beams=1
14)
1pip install -U "vllm>=0.12.0"
2
3vllm serve TevunahAi/Nemotron-3-Nano-30B-A3B-GPTQ \
4 --max-num-seqs 8 \
5 --tensor-parallel-size 1 \
6 --max-model-len 32768 \
7 --trust-remote-code
1@software{nemotron_nano_gptq_2024,
2 title = {NVIDIA Nemotron-3-Nano-30B-A3B - TevunahAi Ultra-Hybrid GPTQ},
3 author = {TevunahAi},
4 year = {2024},
5 note = {First GPTQ quantization of hybrid Mamba-2 + MoE + GQA architecture},
6 url = {https://huggingface.co/TevunahAi/Nemotron-3-Nano-30B-A3B-GPTQ}
7}
8
9@misc{nvidia_nemotron_nano_v3_2025,
10 title = {Nemotron 3 Nano: Open, Efficient MoE Hybrid Mamba-Transformer},
11 author = {NVIDIA},
12 year = {2025},
13 url = {https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf}
14}
This quantization required patching GPTQModel's NemotronH model definition to properly handle:
Special thanks to the GPTQModel team for their excellent quantization framework.