SAVRN
Search Contact SAVRN

Open-weight model · Text generation

granite-4.0-h-small-w4a16-llmcompressor

by AMD amd/granite-4.0-h-small-w4a16-llmcompressor

ZenDNN v6.1.0 - ZenTorch v2.13.0.0 - PyTorch v2.13.0.0 - LLM Compressor v0.13.0 - vLLM v0.29.0 This is a quantized version of granite-4.0-h-small created by AMD using LLM Compressor (compressed-tensors) for ZenDNN-optimized CPU inference.

Parameters32.2B
Context131,072
Weights17.2 GB
Licenseapache-2.0
AccessOpen weights
Monthly Downloads

Runs On

What it takes to serve granite-4.0-h-small-w4a16-llmcompressor (32.2B parameters): the memory its weights need at each precision, and the cheapest way to rent enough data-center GPUs to hold them.

PrecisionWeightsMemory neededCheapest setupPer hourAlso fits
16-bit 64.4 GB 77.3 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
8-bit 32.2 GB 38.6 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
4-bit 16.1 GB 19.3 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00

Memory is the weights at that precision plus 20% for the runtime and a short context; a long context needs more. Prices are the lowest on-demand hourly rates in the SAVRN Index, read Sep 18, 2026.

Model Card

By AMD, published under apache-2.0, revision f851ae5c363b.

ZenDNN v6.1.0 - ZenTorch v2.13.0.0 - PyTorch v2.13.0.0 - LLM Compressor v0.13.0 - vLLM v0.29.0 This is a quantized version of granite-4.0-h-small created by AMD using LLM Compressor (compressed-tensors) for ZenDNN-optimized CPU inference. The model was quantized from granite-4.0-h-small using LLM Compressor with the GPTQ algorithm. This reduces the model weights from 60.0 GiB to 16.1 GiB on disk (~73% reduction). granite-4.0-h-small is a hybrid Mamba-MoE model: of its 40 layers, 4 are full-attention blocks and the other 36 are Mamba (linear-attention) blocks, and every layer carries a 72-expert MoE block (top-10 routing) alongside a shared MLP. Two details make this work. The model is…

Read AMD's full model card

Model Overview

  • Model Architecture: GraniteMoeHybridForCausalLM
  • Input: Text
  • Output: Text
  • Source Model: granite-4.0-h-small
  • Supported Hardware: AMD EPYC (CPU inference)
  • Preferred Operating System: Linux
  • Inference Engine: vLLM v0.29.0
  • Quantization Framework: LLM Compressor v0.13.0
  • Quantization Method: 4-bit Weight-Only Quantization (W4A16)
  • Compatible Stack:
  • ZenDNN v6.1.0
  • ZenTorch v2.13.0.0
  • PyTorch v2.13.0.0
  • LLM Compressor v0.13.0
  • vLLM v0.29.0
  • Published with: LLM Compressor v0.13.0

This is a quantized version of granite-4.0-h-small created by AMD using LLM Compressor (compressed-tensors) for ZenDNN-optimized CPU inference.

Quantization

The model was quantized from granite-4.0-h-small using LLM Compressor with the GPTQ algorithm. This reduces the model weights from 60.0 GiB to 16.1 GiB on disk (~73% reduction).

  • Method: 4-bit Weight-Only Quantization (W4A16)
  • Config: compressed-tensors, num_bits=4, type=int, symmetric=true, group_size=128, actorder=static
  • Weights: INT4 (4-bit integer, symmetric, group-wise), stored in pack-quantized format
  • Activations: BF16 (unquantized)
  • Group Size: 128
  • Calibration: 128 samples from HuggingFaceH4/ultrachat_200k, sequence length 2048

granite-4.0-h-small is a hybrid Mamba-MoE model: of its 40 layers, 4 are full-attention blocks and the other 36 are Mamba (linear-attention) blocks, and every layer carries a 72-expert MoE block (top-10 routing) alongside a shared MLP.

  • Quantized: all 72 routed experts in every layer (block_sparse_moe.experts.*.{gate,up,down}_proj), the shared MLP (shared_mlp.{input,output}_linear), the Mamba projections (mamba.{in,out}_proj), and self_attn.{q,k,v,o}_proj in the 4 full-attention layers.
  • Kept in BF16: the MoE routers (block_sparse_moe.router), the Mamba state-space internals that are not Linear layers (conv1d, A_log, D, dt_bias, and the gated mamba.norm), lm_head, embed_tokens, and the layer norms.

Two details make this work. The model is loaded inside load_context(), which is the LLM Compressor v0.13 MoE linearization path: it exposes the fused expert tensors as individual Linear submodules so GPTQ can build a Hessian per expert, with no manual module swap. And the router is skipped because it is a tiny Linear whose logits decide expert assignment, where 4-bit rounding error can flip the top-k selection and change which experts run.

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from datasets import load_dataset

from llmcompressor import oneshot
from llmcompressor.modifiers.quantization.gptq import GPTQModifier
from llmcompressor.utils import load_context

model_id = "ibm-granite/granite-4.0-h-small"
output_dir = "./granite-4.0-h-small-w4a16-llmcompressor"
CALIB_SIZE = 128
MAX_SEQ_LENGTH = 2048

# Step 1: Load the BF16 model inside load_context(), which linearizes the MoE
# experts so GPTQ can target them as ordinary Linear modules.
with load_context(AutoModelForCausalLM):
    model = AutoModelForCausalLM.from_pretrained(
        model_id,
        torch_dtype=torch.bfloat16,
        device_map="cpu",
        trust_remote_code=True,
    )
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)

# Step 2: Build the GPTQ calibration set.
ds = load_dataset("HuggingFaceH4/ultrachat_200k", split=f"train_sft[:{CALIB_SIZE}]")
ds = ds.map(
    lambda ex: {"text": "\n".join(m["content"] for m in ex["messages"] if m.get("content"))},
    remove_columns=ds.column_names,
)
if not getattr(tokenizer, "pad_token", None):
    tokenizer.pad_token = tokenizer.eos_token
calib_ds = ds.map(
    lambda ex: tokenizer(
        ex["text"], truncation=True, max_length=MAX_SEQ_LENGTH, add_special_tokens=False
    ),
    remove_columns=["text"],
)

# Step 3: Define the W4A16 GPTQ recipe. Experts, shared MLP, Mamba projections
# and attention are all quantized; only lm_head and the MoE router are skipped.
recipe = GPTQModifier(
    scheme="W4A16",
    targets=["Linear"],
    ignore=["lm_head", "re:.*block_sparse_moe.router"],
)

# Step 4: One-shot quantize with calibration data and save in
# compressed-tensors format.
oneshot(
    model=model,
    dataset=calib_ds,
    recipe=recipe,
    max_seq_length=MAX_SEQ_LENGTH,
    tokenizer=tokenizer,
    output_dir=output_dir,
    trust_remote_code_model=True,
)

# Smoke test
inputs = tokenizer("What are we having for dinner?", return_tensors="pt")
with torch.no_grad():
    output = model.generate(**inputs, max_new_tokens=30)
print(tokenizer.decode(output[0], skip_special_tokens=True))

Quick Start

Use with vLLM

from vllm import LLM, SamplingParams

model = LLM(
    model="amd/granite-4.0-h-small-w4a16-llmcompressor",
    dtype="bfloat16",
    trust_remote_code=True,
)

sampling_params = SamplingParams(temperature=0.7, max_tokens=256)
outputs = model.generate(["Hello, how are you?"], sampling_params)
print(outputs[0].outputs[0].text)

Requirements

torch==2.13.0.0
zentorch==2.13.0.0
vllm==0.29.0
llmcompressor==0.13.0

OpenMP Setup

For optimal performance, set LD_PRELOAD with libomp.so (LLVM OpenMP) or libiomp5.so (Intel OpenMP):

# Using LLVM OpenMP (llvmopenmp)
export LD_PRELOAD=$(find /path/to/env -name "libomp.so" | head -1)

# Or using Intel OpenMP (libiomp)
export LD_PRELOAD=$(find /path/to/env -name "libiomp5.so" | head -1)

Note: Set LD_PRELOAD before launching vLLM or any inference script.

Evaluation

The model was evaluated against the BF16 (unquantized) baseline on standard benchmarks using lm-evaluation-harness with the vLLM engine.

Benchmark BF16 Baseline W4A16 (this model) Recovery
GSM8K (5-shot) 0.8643 0.8658 100.17%

Evaluation Command

lm_eval \
    --model vllm \
    --model_args pretrained=amd/granite-4.0-h-small-w4a16-llmcompressor,dtype=bfloat16 \
    --tasks gsm8k \
    --batch_size auto \
    --trust_remote_code \
    --num_fewshot 5 \
    --apply_chat_template \
    --log_samples \
    --gen_kwargs "max_gen_toks=2048" \
    --output_path .

Limitations

  • Version Lock: This model is compatible with ZenDNN v6.1.0 / ZenTorch v2.13.0.0 / PyTorch v2.13.0.0. It may not load correctly on other versions.
  • CPU Only: This model is optimized for AMD EPYC CPU inference via ZenDNN. It is not intended for GPU inference.
  • Hybrid Architecture: The Mamba state-space internals (conv1d, A_log, D, dt_bias, gated norms) are not Linear layers and stay in BF16, so the INT4 saving applies to the projections, experts and attention rather than to the full recurrent path.

License

This model is distributed under the same license as the source model. See the LICENSE file for details.

Modifications copyright (c) 2026 Advanced Micro Devices, Inc. All rights reserved.

Configuration

Architecture
GraniteMoeHybridForCausalLM
Context length (tokens)
131,072
Layers
40
Hidden size
4,096
Feed-forward size
768
Attention heads
32
Key/value heads
8
Vocabulary size
100,352
Experts
72
Experts active per token
10
Model type
granitemoehybrid
Quantization
compressed-tensors

Identity and Version

Repository
amd/granite-4.0-h-small-w4a16-llmcompressor
Publisher
AMD
Task
Text generation
Modality
Text
Library
transformers
Parameters
32.2B parameters
Languages
en
Revision
f851ae5c363bfff5590d0466d4d104e766881843
First published
2026-09-18
Last updated
2026-09-18

Files and Weights

10 files, 17.2 GB in total. The weights are 1 file totalling 17.2 GB in safetensors.

Weights1 file · 17.2 GB
Configuration3 files · 7.0 KB
Tokenizer2 files · 7.2 MB
Documentation2 files · 17.9 KB
Other1 file · 6.4 KB
Repository1 file · 1.5 KB
Every file
FileTypeSizeSHA-256
model.safetensorsWeights17.2 GB 04bd9876e4be
config.jsonConfiguration6.6 KB
generation_config.jsonConfiguration147 B
recipe.yamlConfiguration334 B
LICENSEDocumentation10.2 KB
README.mdDocumentation7.7 KB
chat_template.jinjaOther6.4 KB
.gitattributesRepository1.5 KB
tokenizer.jsonTokenizer7.2 MB
tokenizer_config.jsonTokenizer393 B

License and Download

License
apache-2.0
Access
Open weights, no gate
Download size
17.2 GB
Download from AMD

Released by AMD through its official repository on Hugging Face. Read the license.

Built From

  • Derived from ibm-granite/granite-4.0-h-small
  • Quantized from ibm-granite/granite-4.0-h-small

Memory Requirements

PrecisionWeights in memory
As published17.2 GB
16-bit64.4 GB
8-bit32.2 GB
4-bit16.1 GB

Weights only, from the published parameter count; the key-value cache and runtime add to this.

Questions About granite-4.0-h-small-w4a16-llmcompressor

How much GPU memory does granite-4.0-h-small-w4a16-llmcompressor need?

About 77.3 GB at 16-bit and 19.3 GB at 4-bit: the weights (32.2B parameters) plus a working margin. A long context needs more.

What is the cheapest GPU to run granite-4.0-h-small-w4a16-llmcompressor on?

At 16-bit, 1x MI300X from $1.85 an hour; at 4-bit, 1x MI300X from $1.85 an hour, at the lowest on-demand prices the SAVRN Index lists.

Can I use granite-4.0-h-small-w4a16-llmcompressor commercially?

Yes. granite-4.0-h-small-w4a16-llmcompressor is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.

What is granite-4.0-h-small-w4a16-llmcompressor's context length?

131,072 tokens, from the maximum position embeddings in its published configuration.

Similar Models

Model · Text generation

granite-4.0-h-small-w8a8-llmcompressor

AMD

ZenDNN v6.1.0 - ZenTorch v2.13.0.0 - PyTorch v2.13.0.0 - LLM Compressor v0.13.0 - vLLM v0.29.0 This is a quantized version of granite-4.0-h-small created by AMD using LLM Compressor (compressed-tensors) for ZenDNN-optimized CPU inference. The model was quantized from granite-4.0-h-small using LLM Compressor via the Round-to-Nearest (RTN) algorithm. This reduces the model weights from 60.0 GiB to 30.4 GiB on disk (~49% reduction). granite-4.0-h-small is a hybrid Mamba-MoE model: of its 40 layers, 4 are full-attention blocks and the other 36 are Mamba (linear-attention) blocks, and every layer carries a 72-expert MoE block (top-10 routing) alongside a shared MLP. The recipe only needs two…

Open weights apache-2.0 32.2B parameters 131,072 tokens transformers

Model · Text generation

Qwen3-32B

Qwen

Qwen3 is the latest generation of large language models in Qwen series, offering a comprehensive suite of dense and mixture-of-experts (MoE) models. Built upon extensive training, Qwen3 delivers groundbreaking advancements in reasoning, instruction-following, agent capabilities, and multilingual support, with the following key features: - Uniquely support of seamless switching between thinking mode (for complex logical reasoning, math, and coding) and non-thinking mode (for efficient, general-purpose dialogue) within single model, ensuring optimal performance across various scenarios. - Significantly enhancement in its reasoning capabilities, surpassing previous QwQ (in thinking mode) and…

Open weights apache-2.0 32.8B parameters 40,960 tokens transformers

Model · Text generation

Qwen3-32B-AWQ

Qwen

Qwen3 is the latest generation of large language models in Qwen series, offering a comprehensive suite of dense and mixture-of-experts (MoE) models. Built upon extensive training, Qwen3 delivers groundbreaking advancements in reasoning, instruction-following, agent capabilities, and multilingual support, with the following key features: - Uniquely support of seamless switching between thinking mode (for complex logical reasoning, math, and coding) and non-thinking mode (for efficient, general-purpose dialogue) within single model, ensuring optimal performance across various scenarios. - Significantly enhancement in its reasoning capabilities, surpassing previous QwQ (in thinking mode) and…

Open weights apache-2.0 32.8B parameters 40,960 tokens transformers

Model · Text generation

Qwen2.5-32B-Instruct

Qwen

Qwen2.5 is the latest series of Qwen large language models. For Qwen2.5, we release a number of base language models and instruction-tuned language models ranging from 0.5 to 72 billion parameters. Qwen2.5 brings the following improvements upon Qwen2: - Significantly more knowledge and has greatly improved capabilities in coding and mathematics, thanks to our specialized expert models in these domains. - Significant improvements in instruction following, generating long texts (over 8K tokens), understanding structured data (e.g, tables), and generating structured outputs especially JSON. More resilient to the diversity of system prompts, enhancing role-play implementation and…

Open weights apache-2.0 32.8B parameters 32,768 tokens transformers

Model · Text generation

Qwen2.5-Coder-32B-Instruct-AWQ

Qwen

Qwen2.5-Coder is the latest series of Code-Specific Qwen large language models (formerly known as CodeQwen). As of now, Qwen2.5-Coder has covered six mainstream model sizes, 0.5, 1.5, 3, 7, 14, 32 billion parameters, to meet the needs of different developers. Qwen2.5-Coder brings the following improvements upon CodeQwen1.5: - Significantly improvements in code generation, code reasoning and code fixing. Base on the strong Qwen2.5, we scale up the training tokens into 5.5 trillion including source code, text-code grounding, Synthetic data, etc. Qwen2.5-Coder-32B has become the current state-of-the-art open-source codeLLM, with its coding abilities matching those of GPT-4o. - A more…

Open weights apache-2.0 32.8B parameters 32,768 tokens transformers

Model · Text generation

Qwen2.5-Coder-32B-Instruct

Qwen

Qwen2.5-Coder is the latest series of Code-Specific Qwen large language models (formerly known as CodeQwen). As of now, Qwen2.5-Coder has covered six mainstream model sizes, 0.5, 1.5, 3, 7, 14, 32 billion parameters, to meet the needs of different developers. Qwen2.5-Coder brings the following improvements upon CodeQwen1.5: - Significantly improvements in code generation, code reasoning and code fixing. Base on the strong Qwen2.5, we scale up the training tokens into 5.5 trillion including source code, text-code grounding, Synthetic data, etc. Qwen2.5-Coder-32B has become the current state-of-the-art open-source codeLLM, with its coding abilities matching those of GPT-4o. - A more…

Open weights apache-2.0 32.8B parameters 32,768 tokens transformers