Model reference · open weights

Mini-InternVL-5

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

Mini-InternVL-5 is an open-weight language model from OpenGVLab. Mini-InternVL-Chat-2B-V1-5 (BF16) weighs 4.4 GB; the smallest configuration that runs it is RTX 3060 12 GB.

  • Mini-InternVL-5 is a 2.2B parameter multimodal large language model developed by OpenGVLab for image-text-to-text tasks.
  • It combines the InternViT-300M vision encoder with the InternLM2-Chat-1.8B language model and supports multilingual input.
  • The model uses a dynamic resolution approach for images and is released under the MIT license.

Summary of the OpenGVLab/Mini-InternVL-Chat-2B-V1-5 model card, 2026-10-01

What it is

Released byOpenGVLab
Released2024-05-13
Parameters2.2B
VRAM4.4 GB for the weights

What it runs on

Memory and cards for Mini-InternVL-Chat-2B-V1-5 (BF16)

4.4 GBweights, file size
98 MBcache per 1K tokens
1.9 GBruntime overhead, at least
32,768 tokenscontext max
CardRequests at onceContext maxMemory
8K each32K each
RTX 3060 12 GB61all 32K11.6 GB
RTX 4060 Ti 16 GB112all 32K15.4 GB
RTX 3090 24 GB215all 32K23.4 GB
RTX 4090 24 GB215all 32K23.4 GB
RTX 5090 32 GB307all 32K31.0 GB
L40S 48 GB4611all 32K44.0 GB
A100 80 GB8922all 32K78.2 GB
H100 80 GB8421all 32K78.1 GB
RTX PRO 6000 Blackwell 96 GB10426all 32K93.8 GB
DGX Spark (GB10) 128 GB unified12130all 32K107 GB
H200 141 GB15939all 32K138 GB
B200 180 GB20651all 32K176 GB
2× RTX 3060 12 GB
tensor parallel
184all 32K11.6 GB a card
Memory needed at each load
Requests at once8K tokens each32K tokens each
17.1 GB9.5 GB
510.4 GB22.4 GB
812.8 GB32.1 GB
1619.2 GB57.9 GB
3232.1 GB109 GB
6457.9 GB212 GB

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

From the model card

What OpenGVLab says about Mini-InternVL-5

Read the model card

[📂 GitHub] [📜 InternVL 1.0] [📜 InternVL 1.5] [📜 Mini-InternVL] [📜 InternVL 2.5]

[🆕 Blog] [🗨️ Chat Demo] [🤗 HF Demo] [🚀 Quick Start] [📖 Documents]

Introduction

You can run multimodal large models using a 1080Ti now.

We are delighted to introduce the Mini-InternVL-Chat series. In the era of large language models, many researchers have started to focus on smaller language models, such as Gemma-2B, Qwen-1.8B, and InternLM2-1.8B. Inspired by their efforts, we have distilled our vision foundation model InternViT-6B-448px-V1-5 down to 300M and used InternLM2-Chat-1.8B or Phi-3-mini-128k-instruct as our language model. This resulted in a small multimodal model with excellent performance.

As shown in the figure below, we adopted the same model architecture as InternVL 1.5. We simply replaced the original InternViT-6B with InternViT-300M and InternLM2-Chat-20B with InternLM2-Chat-1.8B / Phi-3-mini-128k-instruct. For training, we used the same data as InternVL 1.5 to train this smaller model. Additionally, due to the lower training costs of smaller models, we used a context length of 8K during training.

Model Details

  • Model Type: multimodal large language model (MLLM)

  • Model Stats:

  • Training Strategy:

    • Learnable component in the pre-training stage: ViT + MLP
    • Learnable component in the fine-tuning stage: ViT + MLP + LLM
    • For more details on training hyperparameters, please see our blog.

Performance

  • We simultaneously use InternVL and VLMEvalKit repositories for model evaluation. Specifically, the results reported for DocVQA, ChartQA, InfoVQA, TextVQA, MME, AI2D, MMBench, CCBench, MMVet, and SEED-Image were tested using the InternVL repository. OCRBench, RealWorldQA, HallBench, and MathVista were evaluated using the VLMEvalKit.

Limitations: Although we have made efforts to ensure the safety of the model during the training process and to encourage the model to generate text that complies with ethical and legal requirements, the model may still produce unexpected outputs due to its size and probabilistic generation paradigm. For example, the generated responses may contain biases, discrimination, or other harmful content. Please do not propagate such content. We are not responsible for any consequences resulting from the dissemination of harmful information.

Quick Start

We provide an example code to run Mini-InternVL-Chat-2B-V1-5 using transformers.

Please use transformers>=4.37.2 to ensure the model works normally.

Model Loading

16-bit (bf16 / fp16)
import torch
from transformers import AutoTokenizer, AutoModel
path = "OpenGVLab/Mini-InternVL-Chat-2B-V1-5"
model = AutoModel.from_pretrained(
    path,
    torch_dtype=torch.bfloat16,
    low_cpu_mem_usage=True,
    use_flash_attn=True,
    trust_remote_code=True).eval().cuda()
BNB 8-bit Quantization
import torch
from transformers import AutoTokenizer, AutoModel
path = "OpenGVLab/Mini-InternVL-Chat-2B-V1-5"
model = AutoModel.from_pretrained(
    path,
    torch_dtype=torch.bfloat16,
    load_in_8bit=True,
    low_cpu_mem_usage=True,
    use_flash_attn=True,
    trust_remote_code=True).eval()
BNB 4-bit Quantization
import torch
from transformers import AutoTokenizer, AutoModel
path = "OpenGVLab/Mini-InternVL-Chat-2B-V1-5"
model = AutoModel.from_pretrained(
    path,
    torch_dtype=torch.bfloat16,
    load_in_4bit=True,
    low_cpu_mem_usage=True,
    use_flash_attn=True,
    trust_remote_code=True).eval()
Multiple GPUs

The reason for writing the code this way is to avoid errors that occur during multi-GPU inference due to tensors not being on the same device. By ensuring that the first and last layers of the large language model (LLM) are on the same device, we prevent such errors.

import math
import torch
from transformers import AutoTokenizer, AutoModel

def split_model(model_name):
    device_map = {}
    world_size = torch.cuda.device_count()
    num_layers = {'Mini-InternVL-2B-V1-5': 24, 'Mini-InternVL-4B-V1-5': 32, 'InternVL-Chat-V1-5': 48}[model_name]
    # Since the first GPU will be used for ViT, treat it as half a GPU.
    num_layers_per_gpu = math.ceil(num_layers / (world_size - 0.5))
    num_layers_per_gpu = [num_layers_per_gpu] * world_size
    num_layers_per_gpu[0] = math.ceil(num_layers_per_gpu[0] * 0.5)
    layer_cnt = 0
    for i, num_layer in enumerate(num_layers_per_gpu):
        for j in range(num_layer):
            device_map[f'language_model.model.layers.{layer_cnt}'] = i
            layer_cnt += 1
    device_map['vision_model'] = 0
    device_map['mlp1'] = 0
    device_map['language_model.model.tok_embeddings'] = 0
    device_map['language_model.model.embed_tokens'] = 0
    device_map['language_model.output'] = 0
    device_map['language_model.model.norm'] = 0
    device_map['language_model.model.rotary_emb'] = 0
    device_map['language_model.lm_head'] = 0
    device_map[f'langu

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