Model reference · open weights
PowerMoE is an open-weight language model from IBM. PowerMoE-3b (FP32) weighs 6.7 GB; the smallest configuration that runs it is RTX 3060 12 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the ibm-research/PowerMoE-3b model card, 2026-10-01
What it is
| Released by | IBM |
|---|---|
| Released | 2024-08-14 |
| Parameters | 3.4B |
| VRAM | 6.7 GB for the weights |
What it runs on
| Card | Requests at once | Context max | Memory |
|---|---|---|---|
| 4K each | |||
| RTX 3060 12 GB | 16 | all 4K | 11.6 GB |
| RTX 4060 Ti 16 GB | 30 | all 4K | 15.4 GB |
| RTX 3090 24 GB | 60 | all 4K | 23.4 GB |
| RTX 4090 24 GB | 59 | all 4K | 23.4 GB |
| RTX 5090 32 GB | 88 | all 4K | 31.0 GB |
| L40S 48 GB | 136 | all 4K | 44.0 GB |
| A100 80 GB | 264 | all 4K | 78.2 GB |
| H100 80 GB | 253 | all 4K | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | 312 | all 4K | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | 362 | all 4K | 107 GB |
| H200 141 GB | 476 | all 4K | 138 GB |
| B200 180 GB | 618 | all 4K | 176 GB |
| Requests at once | 4K tokens each |
|---|---|
| 1 | 7.5 GB |
| 5 | 8.6 GB |
| 8 | 9.4 GB |
| 16 | 11.6 GB |
| 32 | 15.8 GB |
| 64 | 24.4 GB |
One card, with vLLM's small-card settings.
From the model card
PowerMoE-3B is a 3B sparse Mixture-of-Experts (sMoE) language model trained with the Power learning rate scheduler. It sparsely activates 800M parameters for each token. It is trained on a mix of open-source and proprietary datasets. PowerMoE-3B has shown promising results compared to other dense models with 2x activate parameters across various benchmarks, including natural language multi-choices, code generation, and math reasoning. Paper: https://arxiv.org/abs/2408.13359
Note: Requires installing HF transformers from source.
This is a simple example of how to use PowerMoE-3b model.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # or "cpu"
model_path = "ibm/PowerMoE-3b"
tokenizer = AutoTokenizer.from_pretrained(model_path)
# drop device_map if running on CPU
model = AutoModelForCausalLM.from_pretrained(model_path, device_map=device)
model.eval()
# change input text as desired
prompt = "Write a code to find the maximum value in a list of numbers."
# tokenize the text
input_tokens = tokenizer(prompt, return_tensors="pt")
# transfer tokenized inputs to the device
for i in input_tokens:
input_tokens[i] = input_tokens[i].to(device)
# generate output tokens
output = model.generate(**input_tokens, max_new_tokens=100)
# decode output tokens into text
output = tokenizer.batch_decode(output)
# loop over the batch to print, in this example the batch size is 1
for i in output:
print(i)
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.
Benchmarks
As published on the model card: the maker's own numbers, not measured by AxForge.
| Task | Dataset | Metric | Score |
|---|---|---|---|
| text-generation | ARC | accuracy-norm | 58.100 |
| text-generation | BoolQ | accuracy | 65 |
| text-generation | Hellaswag | accuracy-norm | 71.500 |
| text-generation | OpenBookQA | accuracy-norm | 41 |
| text-generation | PIQA | accuracy-norm | 79.100 |
| text-generation | Winogrande | accuracy-norm | 65 |
| text-generation | MMLU (5 shot) | accuracy | 42.800 |
| text-generation | GSM8k (5 shot) | accuracy | 25.900 |
| text-generation | math (4 shot) | accuracy | 14.800 |
| text-generation | humaneval | pass@1 | 20.100 |
| text-generation | MBPP | pass@1 | 32.400 |