Model reference · open weights
InternVL-5 is an open-weight language model from OpenGVLab. InternVL-Chat-V1-5 (BF16) weighs 51.0 GB; the smallest configuration that runs it is H100 80 GB.
Summary of the OpenGVLab/InternVL-Chat-V1-5 model card, 2026-10-01
What it is
| Released by | OpenGVLab |
|---|---|
| Released | 2024-04-18 |
| Parameters | 25.5B |
| VRAM | 51.0 GB for the weights |
What it runs on
| Card | Requests at once | Context max | Memory | |
|---|---|---|---|---|
| 8K each | 32K each | |||
| RTX 3060 12 GB … L40S 48 GB 6 smaller cards | — | — | — | |
| A100 80 GB | 15 | 3 | all 32K | 78.2 GB |
| H100 80 GB | 13 | 3 | all 32K | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | 22 | 5 | all 32K | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | 31 | 7 | all 32K | 107 GB |
| H200 141 GB | 50 | 12 | all 32K | 138 GB |
| B200 180 GB | 73 | 18 | all 32K | 176 GB |
| 2× L40S 48 GB tensor parallel | 20 | 5 | all 32K | 44.0 GB a card |
| 4× RTX 4090 24 GB tensor parallel | 21 | 5 | all 32K | 23.4 GB a card |
| 4× RTX 3090 24 GB tensor parallel | 21 | 5 | all 32K | 23.4 GB a card |
| 4× RTX 5090 32 GB tensor parallel | 40 | 10 | all 32K | 31.0 GB a card |
| Requests at once | 8K tokens each | 32K tokens each |
|---|---|---|
| 1 | 54.7 GB | 59.5 GB |
| 5 | 61.1 GB | 85.3 GB |
| 8 | 66.0 GB | 105 GB |
| 16 | 78.8 GB | 156 GB |
| 32 | 105 GB | 259 GB |
| 64 | 156 GB | 465 GB |
One card, with vLLM's small-card settings.
Builds
| Build | Params | Precision | Weights | Smallest setup |
|---|---|---|---|---|
| InternVL-Chat-V1-5 (above) ↗ | 25.5B | BF16 | 51.0 GB | H100 80 GB |
| InternVL-Chat-V1-5-AWQ ↗ | 9.3B | AWQ | 23.3 GB | 2× RTX 4060 Ti 16 GB |
From the model card
[📂 GitHub] [📜 InternVL 1.0] [📜 InternVL 1.5] [📜 Mini-InternVL] [📜 InternVL 2.5]
[🆕 Blog] [🗨️ Chat Demo] [🤗 HF Demo] [🚀 Quick Start] [📖 Documents]
Two interns holding hands, symbolizing the integration of InternViT and InternLM.
We introduce InternVL 1.5, an open-source multimodal large language model (MLLM) to bridge the capability gap between open-source and proprietary commercial models in multimodal understanding.
We introduce three simple designs:
Model Type: multimodal large language model (MLLM)
Model Stats:
Training Strategy:
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.
We provide an example code to run InternVL-Chat-V1-5 using transformers.
Please use transformers>=4.37.2 to ensure the model works normally.
import torch
from transformers import AutoTokenizer, AutoModel
path = "OpenGVLab/InternVL-Chat-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()
import torch
from transformers import AutoTokenizer, AutoModel
path = "OpenGVLab/InternVL-Chat-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()
⚠️ Warning: Due to significant quantization errors with BNB 4-bit quantization on InternViT-6B, the model may produce nonsensical outputs and fail to understand images. Therefore, please avoid using BNB 4-bit quantization.
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'language_model.model.layers.{num_layers - 1}'] = 0
return device_map
path = "OpenGVLab/InternVL-Chat-V1-5"
device_map = split_model('InternVQuoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.