--- tags: - fp8 - vllm - llm-compressor - compressed-tensors library_name: transformers license: apache-2.0 license_link: https://ai.google.dev/gemma/docs/gemma_4_license pipeline_tag: image-text-to-text base_model: google/gemma-4-31B-it provider: Google name: RedHatAI/gemma-4-31B-it-FP8-dynamic description: FP8-dynamic variant of gemma-4-31B-it. readme: https://huggingface.co/RedHatAI/gemma-4-31B-it-FP8-dynamic/blob/main/README.md tool_calling_supported: true required_cli_args: ['--reasoning-parser gemma4', '--enable-prefix-caching'] default-chat-template-kwargs: '{"enable_thinking": true}' chat_template_file_name: None chat_template_path: None tool_call_parser: gemma4 validated_tasks: - tool-calling tasks: - text-to-text - text-generation - tool-calling validated_on: - RHOAI 3.5 - RHAIIS 3.5 - vLLM 0.24.0 ---

gemma-4-31B-it-FP8-dynamic Model Icon

## Model Overview - **Model Architecture:** Gemma4ForConditionalGeneration - **Input:** Text / Image - **Output:** Text - **Model Optimizations:** - **Weight quantization:** FP8 - **Activation quantization:** FP8 - **Release Date:** 2026-04-04 - **Version:** 1.0 - **Model Developers:** RedHatAI This model is a quantized version of [google/gemma-4-31B-it](https://huggingface.co/google/gemma-4-31B-it). It was evaluated on several tasks to assess its quality in comparison to the unquantized model. ### Model Optimizations This model was obtained by quantizing the weights and activations of [google/gemma-4-31B-it](https://huggingface.co/google/gemma-4-31B-it) to FP8 data type using dynamic per-token quantization, ready for inference with vLLM. This optimization reduces the number of bits per parameter from 16 to 8, reducing the disk size and GPU memory requirements by approximately 50%. Weights are quantized statically using per-channel FP8 scaling, and activations are quantized dynamically at inference time using per-token scaling. Only the weights and activations of the linear operators within transformer blocks are quantized using [LLM Compressor](https://github.com/vllm-project/llm-compressor). Vision tower, embedding, and output head layers are kept in their original precision. ## Deployment ### Use with vLLM This model can be deployed using [vLLM](https://docs.vllm.ai/en/latest/). For detailed instructions including multi-GPU deployment, multimodal inference, thinking mode, function calling, and benchmarking, see the [Gemma 4 vLLM usage guide](https://recipes.vllm.ai/Google/gemma-4-31B-it). 1. Start the vLLM server: ``` vllm serve RedHatAI/gemma-4-31B-it-FP8-dynamic \ --max-model-len 32768 \ --gpu-memory-utilization 0.90 \ --enable-auto-tool-choice \ --reasoning-parser gemma4 \ --tool-call-parser gemma4 \ --chat-template examples/tool_chat_template_gemma4.jinja \ --limit-mm-per-prompt '{"image": 4, "audio": 1}' ``` > **Tip:** For text-only workloads, pass `--limit-mm-per-prompt '{"image": 0, "audio": 0}'` to skip vision encoder memory allocation and free up GPU memory for a longer context window. 2. Send requests to the server: ```python from openai import OpenAI openai_api_key = "EMPTY" openai_api_base = "http://:8000/v1" client = OpenAI( api_key=openai_api_key, base_url=openai_api_base, ) model = "RedHatAI/gemma-4-31B-it-FP8-dynamic" messages = [ {"role": "user", "content": "Explain quantum mechanics clearly and concisely."}, ] outputs = client.chat.completions.create( model=model, messages=messages, extra_body={"chat_template_kwargs": {"enable_thinking": True}}, ) generated_text = outputs.choices[0].message.content print(generated_text) ``` ## Creation This model was created by applying data-free FP8 dynamic quantization with [LLM Compressor](https://github.com/vllm-project/llm-compressor), as presented in the code snippet below.
```python from llmcompressor import model_free_ptq MODEL_ID = "google/gemma-4-31B-it" SAVE_DIR = MODEL_ID.split("/")[1] + "-FP8-dynamic" model_free_ptq( model_stub=MODEL_ID, save_directory=SAVE_DIR, scheme="FP8_DYNAMIC", ignore=["re:.*vision.*", "lm_head", "re:.*embed_tokens.*"], ) ```
## Evaluation This model was evaluated on GSM8K Platinum, MMLU-Pro, IFEval, MATH-500, AIME 2025, GPQA Diamond, LiveCodeBench v6, and [BFCLv4](https://gorilla.cs.berkeley.edu/leaderboard.html) (function calling) using [lm-evaluation-harness](https://github.com/neuralmagic/lm-evaluation-harness), [lighteval](https://github.com/neuralmagic/lighteval), and BFCL — all served with [vLLM](https://docs.vllm.ai/en/latest/) (OpenAI-compatible API). Accuracy results are reported both without and with thinking enabled; BFCLv4 was evaluated with thinking enabled. ### Accuracy #### Without thinking
Category Benchmark google/gemma-4-31B-it RedHatAI/gemma-4-31B-it-FP8-dynamic Recovery
Instruction Following IFEval (0-shot, prompt-level strict) 90.70 91.07 100.4%
IFEval (0-shot, inst-level strict) 93.45 93.76 100.3%
Reasoning GSM8K Platinum (0-shot, strict-match) 95.78 95.83 100.1%
MMLU-Pro (0-shot, custom-extract) 85.41 85.32 99.9%
MATH-500 (0-shot, pass@1) 89.40 90.27 101.0%
AIME 2025 (0-shot, pass@1) 65.83 66.25 100.6%
GPQA Diamond (0-shot, pass@1) 77.44 78.11 100.9%
Coding LiveCodeBench v6 (0-shot, pass@1) 71.43 70.67 98.9%
#### With thinking
Category Benchmark google/gemma-4-31B-it RedHatAI/gemma-4-31B-it-FP8-dynamic Recovery
Instruction Following IFEval (0-shot, prompt-level strict) 94.58 94.89 100.3%
IFEval (0-shot, inst-level strict) 96.44 96.60 100.2%
Reasoning GSM8K Platinum (0-shot, strict-match) 96.11 96.22 100.1%
MMLU-Pro (0-shot, custom-extract) 87.05 87.07 100.0%
MATH-500 (0-shot, pass@1) 87.93 89.47 101.7%
AIME 2025 (0-shot, pass@1) 87.08 90.00 103.4%
GPQA Diamond (0-shot, pass@1) 86.36 86.03 99.6%
Coding LiveCodeBench v6 (0-shot, pass@1) 74.29 79.24 106.7%
Tool Calling BFCLv4 Overall 70.77% 69.64% 98.4%
BFCLv4 Single Turn 84.99% 85.15% 100.2%
BFCLv4 Multi-Turn 66.25% 66.38% 100.2%
BFCLv4 Agentic 65.82% 62.50% 95.0%
### Reproduction The results were obtained using the following commands:
Each benchmark was run 3 times with different random seeds (1234, 2345, 3456) and the scores were averaged; AIME 2025 used 8 seeds. **vLLM server:** ``` vllm serve RedHatAI/gemma-4-31B-it-FP8-dynamic \ --served-model-name gemma-4-31b-it-FP8-dynamic \ --max-model-len 32768 \ --gpu-memory-utilization 0.90 \ --language-model-only \ --enable-auto-tool-choice \ --reasoning-parser gemma4 \ --tool-call-parser gemma4 \ --chat-template examples/tool_chat_template_gemma4.jinja \ --async-scheduling \ --default-chat-template-kwargs '{"enable_thinking": true}' ``` > **Note:** To reproduce the results without thinking, remove `--default-chat-template-kwargs '{"enable_thinking": true}'`. To run without tool calling, remove `--enable-auto-tool-choice`, `--tool-call-parser gemma4`, and `--reasoning-parser gemma4`. #### GSM8K Platinum (lm-eval, 0-shot, 3 repetitions) ``` lm_eval --model local-chat-completions \ --tasks gsm8k_platinum_cot_llama \ --model_args "model=gemma-4-31b-it-FP8-dynamic,max_length=32768,base_url=http://0.0.0.0:8000/v1/chat/completions,num_concurrent=32,max_retries=3,tokenized_requests=False,tokenizer_backend=None,timeout=1200" \ --num_fewshot 0 \ --apply_chat_template \ --output_path results_gsm8k_platinum.json \ --seed 1234 \ --gen_kwargs "do_sample=True,temperature=1.0,top_p=0.95,top_k=64,max_gen_toks=32000,seed=1234" ``` #### MMLU-Pro (lm-eval, 0-shot, 3 repetitions) ``` lm_eval --model local-chat-completions \ --tasks mmlu_pro_chat \ --model_args "model=gemma-4-31b-it-FP8-dynamic,max_length=32768,base_url=http://0.0.0.0:8000/v1/chat/completions,num_concurrent=32,max_retries=3,tokenized_requests=False,tokenizer_backend=None,timeout=1200" \ --num_fewshot 0 \ --apply_chat_template \ --output_path results_mmlu_pro.json \ --seed 1234 \ --gen_kwargs "do_sample=True,temperature=1.0,top_p=0.95,top_k=64,max_gen_toks=32000,seed=1234" ``` #### IFEval (lm-eval, 0-shot, 3 repetitions) ``` lm_eval --model local-chat-completions \ --tasks ifeval \ --model_args "model=gemma-4-31b-it-FP8-dynamic,max_length=32768,base_url=http://0.0.0.0:8000/v1/chat/completions,num_concurrent=32,max_retries=3,tokenized_requests=False,tokenizer_backend=None,timeout=1200" \ --num_fewshot 0 \ --apply_chat_template \ --output_path results_ifeval.json \ --seed 1234 \ --gen_kwargs "do_sample=True,temperature=1.0,top_p=0.95,top_k=64,max_gen_toks=32000,seed=1234" ``` #### MATH-500, AIME 2025, GPQA Diamond, LiveCodeBench v6 (lighteval, 3 repetitions; 8 for AIME 2025) **litellm_config.yaml:** ```yaml model_parameters: provider: hosted_vllm model_name: hosted_vllm/gemma-4-31b-it-FP8-dynamic base_url: http://0.0.0.0:8000/v1 api_key: '' timeout: 3600 concurrent_requests: 32 generation_parameters: temperature: 1.0 max_new_tokens: 65536 top_p: 0.95 top_k: 64 seed: 1234 ``` Run once per seed (changing `seed` in the config each time): ``` lighteval endpoint litellm litellm_config.yaml 'math_500|0' \ --output-dir results/ --save-details lighteval endpoint litellm litellm_config.yaml 'aime25|0' \ --output-dir results/ --save-details lighteval endpoint litellm litellm_config.yaml 'gpqa:diamond|0' \ --output-dir results/ --save-details lighteval endpoint litellm litellm_config.yaml 'lcb:codegeneration_v6|0' \ --output-dir results/ --save-details ``` #### BFCLv4 BFCL requires the model to be registered in the leaderboard codebase before running evaluation. **Step 1 — Register the model in `bfcl_eval/constants/model_config.py`** Add the following entry to `api_inference_model_map`: ```python "gemma-4-31b-it-FP8-dynamic": ModelConfig( model_name="gemma-4-31b-it-FP8-dynamic", display_name="Gemma-4-31b-it-FP8-dynamic (FC)", url="https://huggingface.co/RedHatAI/gemma-4-31B-it-FP8-dynamic", org="Google", license="Apache 2.0", model_handler=OpenAICompletionsHandler, input_price=None, output_price=None, is_fc_model=True, underscore_to_dot=True, ), ``` **Step 2 — Add the key to `bfcl_eval/constants/supported_models.py`** Add `"gemma-4-31b-it-FP8-dynamic"` to the `SUPPORTED_MODELS` list. **Step 3 — Start the vLLM server** (use the command at the top of this section; the `--served-model-name` flag ensures BFCL can find the model by its registered slug). **Step 4 — Generate responses and evaluate** ``` bfcl generate --model gemma-4-31b-it-FP8-dynamic --test-category all bfcl evaluate --model gemma-4-31b-it-FP8-dynamic --test-category all ```