Model reference · open weights

Molmo2

LLMs allenai Vision + text 2 builds Open weights 121k dl/mo

Molmo2 is an open-weight language model from allenai. Molmo2-4B (FP32) weighs 9.7 GB; the smallest configuration that runs it is RTX 3060 12 GB.

  • Molmo2-8B is an open vision-language model developed by the Allen Institute for AI that supports image, video, and multi-image understanding and grounding.
  • The model has 8.7B parameters, is based on Qwen3-8B with a SigLIP 2 vision backbone, and operates in English.
  • It is released under the Apache-2.0 license.

Summary of the allenai/Molmo2-8B model card, 2026-10-01. The estimate below is for another build of the family.

What it is

Released byallenai
Released2025-12-14
Parameters8.7B
VRAM9.7 GB for the weights

What it runs on

Memory and cards for Molmo2-4B (FP32)

9.7 GBweights, file size
147 MBcache per 1K tokens
707 MBruntime overhead, at least
36,864 tokenscontext max
CardRequests at onceContext maxMemory
8K each32K each
RTX 3060 12 GB1—8K11.6 GB
RTX 4060 Ti 16 GB4133K15.4 GB
RTX 3090 24 GB102all 36K23.4 GB
RTX 4090 24 GB102all 36K23.4 GB
RTX 5090 32 GB174all 36K31.0 GB
L40S 48 GB276all 36K44.0 GB
A100 80 GB5614all 36K78.2 GB
H100 80 GB5213all 36K78.1 GB
RTX PRO 6000 Blackwell 96 GB6516all 36K93.8 GB
DGX Spark (GB10) 128 GB unified7619all 36K107 GB
H200 141 GB10225all 36K138 GB
B200 180 GB13333all 36K176 GB
2× RTX 3060 12 GB
tensor parallel
102all 36K11.6 GB a card
2× RTX 4060 Ti 16 GB
tensor parallel
164all 36K15.4 GB a card
Memory needed at each load
Requests at once8K tokens each32K tokens each
111.6 GB15.2 GB
516.4 GB34.6 GB
820.1 GB49.1 GB
1629.7 GB87.7 GB
3249.1 GB165 GB
6487.7 GB320 GB

One card, with vLLM's small-card settings.

Builds

Sizes, precisions & builds

BuildParamsPrecisionWeightsSmallest setup
Molmo2-8B ↗ 8.7BFP32 17.3 GB2× RTX 3060 12 GB
Molmo2-4B (above) ↗ 4.9BFP32 9.7 GBRTX 3060 12 GB

From the model card

What allenai says about Molmo2

Read the model card

Molmo2 is a family of open vision-language models developed by the Allen Institute for AI (Ai2) that support image, video and multi-image understanding and grounding. Molmo2 models are trained on publicly available third party datasets as referenced in our technical report and Molmo2 data, a collection of datasets with highly-curated image-text and video-text pairs. It has state-of-the-art performance among multimodal models with a similar size. You can find all models in the Molmo2 family here.

Learn more about the Molmo2 family in our announcement blog post.

Molmo2-8B is based on Qwen3-8B and uses SigLIP 2 as vision backbone. It outperforms others in the class of open weight and data models on short videos, counting, and captioning, and is competitive on long-videos.

Ai2 is commited to open science. The Molmo2 datasets are available here. All other artifacts used in creating Molmo2 (training code, evaluations, intermediate checkpoints) will be made available at a later date, furthering our commitment to open-source AI development and reproducibility.

Quick links:

Quick Start

Setup Conda Environment

conda create --name transformers4571 python=3.11
conda activate transformers4571
pip install transformers==4.57.1
pip install torch pillow einops torchvision accelerate decord2 molmo_utils

General Video QA

from transformers import AutoProcessor, AutoModelForImageTextToText
import torch

model_id="allenai/Molmo2-8B"

# load the processor
processor = AutoProcessor.from_pretrained(
    model_id,
    trust_remote_code=True,
    dtype="auto",
    device_map="auto"
)

# load the model
model = AutoModelForImageTextToText.from_pretrained(
     model_id,
     trust_remote_code=True,
     dtype="auto",
     device_map="auto"
)

# process the video and text
messages = [
    {
        "role": "user",
        "content": [
            dict(type="text", text="Which animal appears in the video?"),
            dict(type="video", video="https://storage.googleapis.com/oe-training-public/demo_videos/many_penguins.mp4"),
        ],
    }
]

inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    return_tensors="pt",
    return_dict=True,
)

inputs = {k: v.to(model.device) for k, v in inputs.items()}

# generate output
with torch.inference_mode():
    generated_ids = model.generate(**inputs, max_new_tokens=2048)

# only get generated tokens; decode them to text
generated_tokens = generated_ids[0, inputs['input_ids'].size(1):]
generated_text = processor.tokenizer.decode(generated_tokens, skip_special_tokens=True)

# print the generated text
print(generated_text)

# >>>  Penguins appear in the video.

Pointing Video QA

from transformers import AutoProcessor, AutoModelForImageTextToText
import torch
from molmo_utils import process_vision_info
import re

model_id="allenai/Molmo2-8B"

# load the processor
processor = AutoProcessor.from_pretrained(
    model_id,
    trust_remote_code=True,
    dtype="auto",
    device_map="auto"
)

# load the model
model = AutoModelForImageTextToText.from_pretrained(
    model_id,
    trust_remote_code=True,
    dtype="auto",
    device_map="auto"
)

COORD_REGEX = re.compile(rf"")
FRAME_REGEX = re.compile(rf"(?:^|\t|:|,|;)([0-9\.]+) ([0-9\. ]+)")
POINTS_REGEX = re.compile(r"([0-9]+) ([0-9]{3,4}) ([0-9]{3,4})")

def _points_from_num_str(text, image_w, image_h, extract_ids=False):
    all_points = []
    for points in POINTS_REGEX.finditer(text):
        ix, x, y = points.group(1), points.group(2), points.group(3)
        # our points format assume coordinates are scaled by 1000
        x, y = float(x)/1000*image_w, float(y)/1000*image_h
        if 0 <= x <= image_w and 0 <= y <= image_h:
            yield ix, x, y

def extract_video_points(text, image_w, image_h, extract_ids=False):
    """Extract video pointing coordinates as a flattened list of (t, x, y) triplets from model output text."""
    all_points = []
    for coord in COORD_REGEX.finditer(text):
        for point_grp in FRAME_REGEX.finditer(coord.group(1)):
            frame_id = float(point_grp.group(1))
            w, h = (image_w, image_h)
            for idx, x, y in _points_from_num_str(point_grp.group(2), w, h):
                if extract_ids:
                    all_points.append((frame_id, idx, x, y))
                else:
                    all_points.append((frame_id, x, y))
    return all_points

messages = [
    {
        "role": "user",
        "content": [
            dict(type="text", text="Point to the penguins."),
            dict(type="video", video="https://storage.googleapis.com/oe-training-public/demo_videos/many_penguins.mp4"),
        ],
    }
]

# process the video using `molmo_utils.process_vision_info`
_, videos, video_kwargs = process_vision_info(messages)
videos, video_metadatas = zip(*videos)
videos, video_metadatas = list(videos), list(video_metadatas)

# apply the chat template to the input messages
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)

# process the video and text
inputs = processor(
    videos=videos,
    video_metadata=video_metadatas,
    text=text,
    padding=True,
    return_tensors="pt",
    **video_kwargs,
)

inputs = {k: v.to(model.device) for k, v in inputs.items()}

# generate output
with torch.inference_mode():
    generated_ids = model.generate(**inputs, max_new_tokens=

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms