SAVRN
Search Contact SAVRN

Open-weight model · Visual question answering

InternVl2-8B-fire

by Gaoqie gaoqie/InternVl2-8B-fire

InternVl2-8B-fire is an open-weight model for visual question answering from Gaoqie, released under Apache License 2.0. It has 8.1B parameters and a 32,768-token context. At 16-bit it needs about 19.4 GB of GPU memory, which fits on 1x MI300X from $1.85 an hour, at the lowest prices in the SAVRN Index. It draws 78 downloads a month.

https://doi.org/10.1007/s10694-026-02000-3 Existing vision-based methods suffer from high false alarm rates in urban flame detection.

Parameters8.1B
Context32,768
Weights16.2 GB
Licenseapache-2.0
AccessOpen weights
Monthly Downloads78

Runs On

What it takes to serve InternVl2-8B-fire (8.1B parameters): the memory its weights need at each precision, and the cheapest way to rent enough data-center GPUs to hold them.

PrecisionWeightsMemory neededCheapest setupPer hourAlso fits
16-bit 16.2 GB 19.4 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
8-bit 8.1 GB 9.7 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
4-bit 4.0 GB 4.8 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00

Memory is the weights at that precision plus 20% for the runtime and a short context; a long context needs more. Prices are the lowest on-demand hourly rates in the SAVRN Index, read Sep 21, 2026.

InternVl2-8B-fire on every accelerator the SAVRN Index prices, at every precision

Model Card

By Gaoqie, published under apache-2.0, revision d279849aaffc.

https://doi.org/10.1007/s10694-026-02000-3 Existing vision-based methods suffer from high false alarm rates in urban flame detection. Applying Multimodal Large Language Models (MLLMs) for secondary filtering shows great potential in reducing false alarms, yet they have high inference latency and are prone to reasoning collapse on negative samples without explicit Chain-of-Thought (CoT) guidance. To overcome these challenges, this study proposed Flash-Cascade, the first sub-second MLLM-based firewall to leverage CoT to efficiently filter false alarms. We deconstructed the flame detection process into four logical stages (planning, observation, analysis, and judgment), which informed the…

Read Gaoqie's full model card

Using Multimodal Large Language Models for False Alarm Reduction in Image-based Fire Detection

https://doi.org/10.1007/s10694-026-02000-3

Existing vision-based methods suffer from high false alarm rates in urban flame detection. Applying Multimodal Large Language Models (MLLMs) for secondary filtering shows great potential in reducing false alarms, yet they have high inference latency and are prone to reasoning collapse on negative samples without explicit Chain-of-Thought (CoT) guidance. To overcome these challenges, this study proposed Flash-Cascade, the first sub-second MLLM-based firewall to leverage CoT to efficiently filter false alarms. We deconstructed the flame detection process into four logical stages (planning, observation, analysis, and judgment), which informed the design of three switchable reasoning modes (Detailed, Quick, and Rapid) to achieve inference acceleration via CoT compression. We fine-tuned Qwen2-VL-7B-Instruct on a multi-grained instruction dataset via Low-Rank Adaptation. This process internalizes explicit reasoning logic into implicit parameter representations, enabling the model to maintain robust reasoning capability even without explicit CoT guidance. On our newly constructed benchmark incorporating real-world hard negatives, Flash-Cascade achieves an accuracy of 97.79% and an F1-score of 0.9767 in Rapid mode, outperforming the baseline by 61.63 percentage points (pp) and 0.5152, respectively. Furthermore, it outperforms the state-of-the-art object detector DEIMv2 by 14.64 pp in accuracy. The method exhibits exceptional sample efficiency, converging with only 600 samples and 2 epochs, and improves inference speed by 810% over standard CoT. This study will open a door for robust and efficient flame detection in high-interference scenarios.

1. Quick Start

  • Installation

    For installation instructions, please refer to OpenGVLab/InternVL2-8B.

  • Simple Inference Example

import numpy as np
import torch
import torchvision.transforms as T
from decord import VideoReader, cpu
from PIL import Image
from torchvision.transforms.functional import InterpolationMode
from transformers import AutoModel, AutoTokenizer

import torch
from PIL import Image
from transformers import (
    AutoTokenizer,
    AutoImageProcessor,
    AutoModelForCausalLM,
)
import os


# swift_common

IMAGENET_MEAN = (0.485, 0.456, 0.406)
IMAGENET_STD = (0.229, 0.224, 0.225)
generation_config = dict(max_new_tokens=1024, do_sample=True)

path = '' # gaoqie/InternVl2-8B-fire
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)



def traverse_directory(directory):
    '''
    获取指定文件夹下的所有图像路径
    '''
    filenames_list = []
    for filename in os.listdir(directory):
        file_path = os.path.join(directory, filename)
        if os.path.isfile(file_path) and file_path.endswith(('.png', '.jpg', '.jpeg')):
            filenames_list.append(file_path)
        elif os.path.isdir(file_path):
            filenames_list.extend(traverse_directory(file_path))  # 递归调用自身来处理子文件夹
    print(filenames_list,flush=True)
    return filenames_list


def build_transform(input_size):
    MEAN, STD = IMAGENET_MEAN, IMAGENET_STD
    transform = T.Compose([
        T.Lambda(lambda img: img.convert('RGB') if img.mode != 'RGB' else img),
        T.Resize((input_size, input_size), interpolation=InterpolationMode.BICUBIC),
        T.ToTensor(),
        T.Normalize(mean=MEAN, std=STD)
    ])
    return transform

def find_closest_aspect_ratio(aspect_ratio, target_ratios, width, height, image_size):
    best_ratio_diff = float('inf')
    best_ratio = (1, 1)
    area = width * height
    for ratio in target_ratios:
        target_aspect_ratio = ratio[0] / ratio[1]
        ratio_diff = abs(aspect_ratio - target_aspect_ratio)
        if ratio_diff < best_ratio_diff:
            best_ratio_diff = ratio_diff
            best_ratio = ratio
        elif ratio_diff == best_ratio_diff:
            if area > 0.5 * image_size * image_size * ratio[0] * ratio[1]:
                best_ratio = ratio
    return best_ratio

def dynamic_preprocess(image, min_num=1, max_num=12, image_size=448, use_thumbnail=False):
    orig_width, orig_height = image.size
    aspect_ratio = orig_width / orig_height

    # calculate the existing image aspect ratio
    target_ratios = set(
        (i, j) for n in range(min_num, max_num + 1) for i in range(1, n + 1) for j in range(1, n + 1) if
        i * j <= max_num and i * j >= min_num)
    target_ratios = sorted(target_ratios, key=lambda x: x[0] * x[1])

    # find the closest aspect ratio to the target
    target_aspect_ratio = find_closest_aspect_ratio(
        aspect_ratio, target_ratios, orig_width, orig_height, image_size)

    # calculate the target width and height
    target_width = image_size * target_aspect_ratio[0]
    target_height = image_size * target_aspect_ratio[1]
    blocks = target_aspect_ratio[0] * target_aspect_ratio[1]

    # resize the image
    resized_img = image.resize((target_width, target_height))
    processed_images = []
    for i in range(blocks):
        box = (
            (i % (target_width // image_size)) * image_size,
            (i // (target_width // image_size)) * image_size,
            ((i % (target_width // image_size)) + 1) * image_size,
            ((i // (target_width // image_size)) + 1) * image_size
        )
        # split the image
        split_img = resized_img.crop(box)
        processed_images.append(split_img)
    assert len(processed_images) == blocks
    if use_thumbnail and len(processed_images) != 1:
        thumbnail_img = image.resize((image_size, image_size))
        processed_images.append(thumbnail_img)
    return processed_images

def load_image(image_file, input_size=448, max_num=12):
    image = Image.open(image_file).convert('RGB')
    transform = build_transform(input_size=input_size)
    images = dynamic_preprocess(image, image_size=input_size, use_thumbnail=True, max_num=max_num)
    pixel_values = [transform(image) for image in images]
    pixel_values = torch.stack(pixel_values)
    return pixel_values


def infer(img_path):
    question = f'<image>\n图像中是否存在火焰?详细分析。'
    question = f'<image>\n图像中是否存在火焰?简单回答。'
    question = f'<image>\n图像中是否存在火焰?快速回答。'

    # set the max number of tiles in `max_num`
    pixel_values = load_image(img_path, max_num=12).to(torch.bfloat16).cuda()
    # single-image single-round conversation (单图单轮对话)
    output_text = model.chat(tokenizer, pixel_values, question, generation_config)
    print(f'User: {question}\nAssistant: {output_text}')


if __name__=="__main__": 
    image_path = ""
    infer(image_path)




2. License

This code repository is licensed under the Apache license 2.0.

3. Citation

Configuration

Architecture
InternVLChatModel
Context length (tokens)
32,768
Layers
32
Hidden size
4,096
Feed-forward size
14,336
Attention heads
32
Key/value heads
8
Vocabulary size
92,553
RoPE base
1,000,000
Stored precision
bfloat16
Model type
internvl_chat

Identity and Version

Repository
gaoqie/InternVl2-8B-fire
Publisher
Gaoqie
Task
Visual question answering
Modality
Other
Library
Not stated by the source
Parameters
8.1B parameters
Languages
zh
Revision
d279849aaffc03afa87994d1f00f69c377cdda82
First published
2026-02-04
Last updated
2026-09-21

Files and Weights

22 files, 16.2 GB in total. The weights are 4 files totalling 16.2 GB in safetensors.

Weights4 files · 16.2 GB
Configuration14 files · 194.4 KB
Tokenizer2 files · 1.5 MB
Documentation1 file · 7.5 KB
Repository1 file · 1.5 KB
Every file
FileTypeSizeSHA-256
model-00001-of-00004.safetensorsWeights4.9 GB 471ee9c31ffd
model-00002-of-00004.safetensorsWeights4.9 GB 0a024216006b
model-00003-of-00004.safetensorsWeights4.9 GB 9e35e0ee9b88
model-00004-of-00004.safetensorsWeights1.4 GB 260913a65c34
added_tokens.jsonConfiguration179 B
config.jsonConfiguration5.7 KB
configuration_intern_vit.pyConfiguration5.5 KB
configuration_internlm2.pyConfiguration7.0 KB
configuration_internvl_chat.pyConfiguration4.1 KB
conversation.pyConfiguration15.3 KB
generation_config.jsonConfiguration115 B
model.safetensors.index.jsonConfiguration51.2 KB
modeling_intern_vit.pyConfiguration18.1 KB
modeling_internlm2.pyConfiguration61.2 KB
modeling_internvl_chat.pyConfiguration16.0 KB
preprocessor_config.jsonConfiguration287 B
special_tokens_map.jsonConfiguration844 B
tokenization_internlm2.pyConfiguration8.8 KB
README.mdDocumentation7.5 KB
.gitattributesRepository1.5 KB
tokenizer.modelTokenizer1.5 MB f868398fc4e0
tokenizer_config.jsonTokenizer4.0 KB

License and Download

License
apache-2.0
Access
Open weights, no gate
Download size
16.2 GB
Download from Gaoqie

Released by Gaoqie through its official repository on Hugging Face. Read the license.

Built From

  • Derived from OpenGVLab/InternVL2-8B

Memory Requirements

PrecisionWeights in memory
As published16.2 GB
16-bit16.2 GB
8-bit8.1 GB
4-bit4.0 GB

Weights only, from the published parameter count; the key-value cache and runtime add to this.

Questions About InternVl2-8B-fire

How much GPU memory does InternVl2-8B-fire need?

About 19.4 GB at 16-bit and 4.8 GB at 4-bit: the weights (8.1B parameters) plus a working margin. A long context needs more.

What is the cheapest GPU to run InternVl2-8B-fire on?

At 16-bit, 1x MI300X from $1.85 an hour; at 4-bit, 1x MI300X from $1.85 an hour, at the lowest on-demand prices the SAVRN Index lists.

Can I use InternVl2-8B-fire commercially?

Yes. InternVl2-8B-fire is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.

What is InternVl2-8B-fire's context length?

32,768 tokens, from the maximum position embeddings in its published configuration.

Similar Models

Model · Visual question answering

DeepSeekVL-7B-Chat-fire

Gaoqie

https://doi.org/10.1007/s10694-026-02000-3 Existing vision-based methods suffer from high false alarm rates in urban flame detection. Applying Multimodal Large Language Models (MLLMs) for secondary filtering shows great potential in reducing false alarms, yet they have high inference latency and are prone to reasoning collapse on negative samples without explicit Chain-of-Thought (CoT) guidance. To overcome these challenges, this study proposed Flash-Cascade, the first sub-second MLLM-based firewall to leverage CoT to efficiently filter false alarms. We deconstructed the flame detection process into four logical stages (planning, observation, analysis, and judgment), which informed the…

Open weights apache-2.0 7.3B parameters 16,384 tokens

Model · Visual question answering

Qwen2.5VL-3B-Instruct-fire

Gaoqie

https://doi.org/10.1007/s10694-026-02000-3 Existing vision-based methods suffer from high false alarm rates in urban flame detection. Applying Multimodal Large Language Models (MLLMs) for secondary filtering shows great potential in reducing false alarms, yet they have high inference latency and are prone to reasoning collapse on negative samples without explicit Chain-of-Thought (CoT) guidance. To overcome these challenges, this study proposed Flash-Cascade, the first sub-second MLLM-based firewall to leverage CoT to efficiently filter false alarms. We deconstructed the flame detection process into four logical stages (planning, observation, analysis, and judgment), which informed the…

Open weights apache-2.0 3.8B parameters 128,000 tokens

Model · Visual question answering

DeepSeekVL2-Tiny-fire

Gaoqie

https://doi.org/10.1007/s10694-026-02000-3 Existing vision-based methods suffer from high false alarm rates in urban flame detection. Applying Multimodal Large Language Models (MLLMs) for secondary filtering shows great potential in reducing false alarms, yet they have high inference latency and are prone to reasoning collapse on negative samples without explicit Chain-of-Thought (CoT) guidance. To overcome these challenges, this study proposed Flash-Cascade, the first sub-second MLLM-based firewall to leverage CoT to efficiently filter false alarms. We deconstructed the flame detection process into four logical stages (planning, observation, analysis, and judgment), which informed the…

Open weights apache-2.0 3.4B parameters 4,096 tokens

Model · Visual question answering

Qwen2VL-2B-Instruct-fire

Gaoqie

https://doi.org/10.1007/s10694-026-02000-3 Existing vision-based methods suffer from high false alarm rates in urban flame detection. Applying Multimodal Large Language Models (MLLMs) for secondary filtering shows great potential in reducing false alarms, yet they have high inference latency and are prone to reasoning collapse on negative samples without explicit Chain-of-Thought (CoT) guidance. To overcome these challenges, this study proposed Flash-Cascade, the first sub-second MLLM-based firewall to leverage CoT to efficiently filter false alarms. We deconstructed the flame detection process into four logical stages (planning, observation, analysis, and judgment), which informed the…

Open weights apache-2.0 2.2B parameters 32,768 tokens

Model · Visual question answering

DeepSeekVL-1.3B-Chat-fire

Gaoqie

https://www.doi.org/10.1007/s10694-026-02000-3 Existing vision-based methods suffer from high false alarm rates in urban flame detection. Applying Multimodal Large Language Models (MLLMs) for secondary filtering shows great potential in reducing false alarms, yet they have high inference latency and are prone to reasoning collapse on negative samples without explicit Chain-of-Thought (CoT) guidance. To overcome these challenges, this study proposed Flash-Cascade, the first sub-second MLLM-based firewall to leverage CoT to efficiently filter false alarms. We deconstructed the flame detection process into four logical stages (planning, observation, analysis, and judgment), which informed the…

Open weights apache-2.0 2B parameters 16,384 tokens