Model reference · open weights

Sa2VA

LLMs ByteDance Vision + text 1 build Open weights 6k dl/mo

Sa2VA is an open-weight language model from ByteDance. Sa2VA-8B (FP32) weighs 16.3 GB; the smallest configuration that runs it is 2× RTX 3060 12 GB.

For self-hosting, compare this build's requirements below with the GPU you plan to rent.

  • Sa2VA is an 8.3B parameter multimodal large language model developed by ByteDance for image-text-to-text tasks.
  • It supports question answering, visual prompt understanding, and dense object segmentation for both images and videos.
  • The model is multilingual and released under the Apache 2.0 license.

Summary of the ByteDance/Sa2VA-8B model card, 2026-10-01

What it is

Released byByteDance
Released2025-01-07
Parameters8.3B
VRAM16.3 GB for the weights

What it runs on

Memory and cards for Sa2VA-8B (FP32)

16.3 GBweights, file size
131 MBcache per 1K tokens
2.0 GBruntime overhead, at least
32,768 tokenscontext max
CardRequests at onceContext maxMemory
8K each32K each
RTX 3060 12 GB … RTX 4060 Ti 16 GB
2 smaller cards
RTX 3090 24 GB41all 32K23.4 GB
RTX 4090 24 GB41all 32K23.4 GB
RTX 5090 32 GB112all 32K31.0 GB
L40S 48 GB235all 32K44.0 GB
A100 80 GB5513all 32K78.2 GB
H100 80 GB5213all 32K78.1 GB
RTX PRO 6000 Blackwell 96 GB6616all 32K93.8 GB
DGX Spark (GB10) 128 GB unified7919all 32K107 GB
H200 141 GB10726all 32K138 GB
B200 180 GB14235all 32K176 GB
2× RTX 3060 12 GB
tensor parallel
221K11.6 GB a card
2× RTX 4060 Ti 16 GB
tensor parallel
92all 32K15.4 GB a card
2× RTX 4090 24 GB
tensor parallel
246all 32K23.4 GB a card
2× RTX 3090 24 GB
tensor parallel
246all 32K23.4 GB a card
Memory needed at each load
Requests at once8K tokens each32K tokens each
119.4 GB22.6 GB
523.7 GB39.8 GB
826.9 GB52.7 GB
1635.5 GB87.0 GB
3252.7 GB156 GB
6487.0 GB293 GB

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

From the model card

What ByteDance says about Sa2VA

Read the model card

[📂 GitHub] [📜 Sa2VA paper] [🚀 Quick Start]

Introduction

Sa2VA is an MLLM capable of question answering, visual prompt understanding, and dense object segmentation at both image and video levels. It achieves comparable performance to SOTA MLLMs Qwen2-VL and InternVL2.5 on question-answering benchmarks. Additionally, Sa2VA possesses the visual prompt understanding and dense object segmentation capabilities that SOTA MLLMs Qwen2-VL and InternVL2.5 lack. Sa2VA achieves SOTA performance on both image and video grounding and segmentation benchmarks.

Sa2VA Family

We built the Sa2VA series based on Qwen2-VL and InternVL2/2.5. In the following table, we provide some Sa2VA models built on InternVL2.5. Other Sa2VA models will be open-sourced soon.

Model NameBase MLLMLanguage PartHF Link
Sa2VA-1BInternVL2.5-1BQwen2.5-0.5B-Instruct🤗 link
Sa2VA-4BInternVL2.5-4BQwen2.5-3B-Instruct🤗 link
Sa2VA-8BInternVL2.5-8Binternlm2_5-7b-chat🤗 link
Sa2VA-26BInternVL2.5-26Binternlm2_5-20b-chat🤗 link

Sa2VA Performance

Model NameMMEMMBenchRefCOCORefCOCO+RefCOCOgMeVIS (val_u)DAVIS
Sa2VA-1B1504/43471.979.673.677.753.469.5
Sa2VA-4B1691/61081.882.477.679.755.973.7
Sa2VA-8B1690/61084.482.678.080.358.975.9
Sa2VA-26B1698/65385.882.979.381.261.878.6

Quick Start

We provide an example code to run Sa2VA using transformers.

import torch
from transformers import AutoTokenizer, AutoModel
from PIL import Image
import numpy as np
import os

# load the model and tokenizer
path = "ByteDance/Sa2VA-8B"
model = AutoModel.from_pretrained(
    path,
    torch_dtype=torch.bfloat16,
    low_cpu_mem_usage=True,
    use_flash_attn=True,
    trust_remote_code=True).eval().cuda()
tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True, use_fast=False)

# for image chat
image_path = "/PATH/TO/IMAGE"
text_prompts = "Please describe the image."
image = Image.open(image_path).convert('RGB')
input_dict = {
    'image': image,
    'text': text_prompts,
    'past_text': '',
    'mask_prompts': None,
    'tokenizer': tokenizer,
    }
return_dict = model.predict_forward(**input_dict)
answer = return_dict["prediction"] # the text format answer

# for image chat with segmentation output
image_path = "/PATH/TO/IMAGE"
text_prompts = "Could you please give me a brief description of the image? Please respond with interleaved segmentation masks for the corresponding parts of the answer."
image = Image.open(image_path).convert('RGB')
input_dict = {
    'image': image,
    'text': text_prompts,
    'past_text': '',
    'mask_prompts': None,
    'tokenizer': tokenizer,
    }
return_dict = model.predict_forward(**input_dict)
answer = return_dict["prediction"] # the text format answer
masks = return_dict['prediction_masks']  # segmentation masks, list(np.array(1, h, w), ...)

# for chat with visual prompt (mask format) input
mask_prompts = np.load('/PATH/TO/pred_masks.npy') # np.array(n_prompts, h, w)
image_path = "/PATH/TO/IMAGE"
text_prompts = "Can you provide me with a detailed description of the region in the picture marked by region1."
image = Image.open(image_path).convert('RGB')
input_dict = {
    'image': image,
    'text': text_prompts,
    'past_text': '',
    'mask_prompts': mask_prompts,
    'tokenizer': tokenizer,
    }
return_dict = model.predict_forward(**input_dict)
answer = return_dict["prediction"] # the text format answer

# for video chat
video_folder = "/PATH/TO/VIDEO_FOLDER"
images_paths = os.listdir(video_folder)
images_paths = [os.path.join(video_folder, image_path) for image_name in images_paths]
if len(images_paths) > 5:  # uniformly sample 5 frames
    step = (len(images_paths) - 1) // (5 - 1)
    images_paths = [images_paths[0]] + images_paths[1:-1][::step][1:] + [images_paths[-1]]
text_prompts = "Please describe the video."
input_dict = {
    'video': images_paths,
    'text': text_prompts,
    'past_text': '',
    'mask_prompts': None,
    'tokenizer': tokenizer,
}
return_dict = model.predict_forward(**input_dict)
answer = return_dict["prediction"] # the text format answer

# for video chat with segmentation mask output
video_folder = "/PATH/TO/VIDEO_FOLDER"
images_paths = os.listdir(video_folder)
images_paths = [os.path.join(video_folder, image_path) for image_name in images_paths]
text_prompts = "Please segment the person."
input_dict = {
    'video': images_paths,
    'text': text_prompts,
    'past_text': '',
    'mask_prompts': None,
    'tokenizer': tokenizer,
}
return_dict = model.predict_forward(**input_dict)
answer = return_dict["

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