Instructions to use dmis-lab/InternVL3-8B-Instruct-MRPO with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use dmis-lab/InternVL3-8B-Instruct-MRPO with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="dmis-lab/InternVL3-8B-Instruct-MRPO", trust_remote_code=True) messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("dmis-lab/InternVL3-8B-Instruct-MRPO", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use dmis-lab/InternVL3-8B-Instruct-MRPO with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "dmis-lab/InternVL3-8B-Instruct-MRPO" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "dmis-lab/InternVL3-8B-Instruct-MRPO", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/dmis-lab/InternVL3-8B-Instruct-MRPO
- SGLang
How to use dmis-lab/InternVL3-8B-Instruct-MRPO with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "dmis-lab/InternVL3-8B-Instruct-MRPO" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "dmis-lab/InternVL3-8B-Instruct-MRPO", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "dmis-lab/InternVL3-8B-Instruct-MRPO" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "dmis-lab/InternVL3-8B-Instruct-MRPO", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use dmis-lab/InternVL3-8B-Instruct-MRPO with Docker Model Runner:
docker model run hf.co/dmis-lab/InternVL3-8B-Instruct-MRPO
InternVL3-8B-Instruct-MRPO
MRPO is a novel reinforcement learning framework that improves medical multimodal reasoning by directly addressing failures in the reasoning process. It reshapes GRPO-style advantages using both answer-level and step-wise process rewards, assigning exponentially larger penalties to earlier invalid steps when the final answer is incorrect, thereby correcting early-stage failures before they cascade while preserving successful trajectories. By redistributing the learning signal according to where reasoning first fails, MRPO induces transferable reasoning that improves both reasoning quality and final answer accuracy across diverse medical VQA benchmarks.
Code: github
Project Page: page
Paper: Breaking Failure Cascades: Step-Aware Reinforcement Learning for Medical Multimodal Reasoning
Quick Start
import torch
import torchvision.transforms as T
from PIL import Image
from torchvision.transforms.functional import InterpolationMode
from transformers import AutoModel, AutoTokenizer
# Load the model (MRPO InternVL3 checkpoint; or a local trained checkpoint path)
model_path = "dmis-lab/InternVL3-8B-Instruct-MRPO"
model = AutoModel.from_pretrained(
model_path,
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True,
).eval()
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
# InternVL3 image preprocessing: dynamic 448x448 tiling (up to 12 tiles + thumbnail)
def load_image(image_path, input_size=448, max_num=12):
image = Image.open(image_path).convert("RGB")
w, h = image.size
ratios = sorted(
{(i, j) for n in range(1, max_num + 1) for i in range(1, n + 1) for j in range(1, n + 1) if i * j <= max_num},
key=lambda r: r[0] * r[1],
)
best, best_diff = (1, 1), float("inf")
for r in ratios:
diff = abs(w / h - r[0] / r[1])
if diff < best_diff or (diff == best_diff and w * h > 0.5 * input_size * input_size * r[0] * r[1]):
best, best_diff = r, diff
tw, th = input_size * best[0], input_size * best[1]
resized = image.resize((tw, th))
tiles = [
resized.crop((x * input_size, y * input_size, (x + 1) * input_size, (y + 1) * input_size))
for y in range(best[1]) for x in range(best[0])
]
if len(tiles) > 1:
tiles.append(image.resize((input_size, input_size)))
transform = T.Compose([
T.Resize((input_size, input_size), interpolation=InterpolationMode.BICUBIC),
T.ToTensor(),
T.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
])
return torch.stack([transform(t) for t in tiles])
# Example usage (InternVL3 default system prompt is applied inside model.chat)
image_path = "path/to/medical/image.jpg"
question = "What can you see in this medical image?"
question_text = (
f"<image>\n{question} Think step-by-step and enclose your reasoning in "
"<think>...</think> tags. Then provide your answer in <answer>...</answer> tags."
)
pixel_values = load_image(image_path).to(torch.bfloat16).to(model.device)
# Inference (greedy decoding, matching inference.py)
output_text = model.chat(tokenizer, pixel_values, question_text, dict(max_new_tokens=512, do_sample=False))
print(output_text)
Citation
@misc{jung2026breakingfailurecascadesstepaware,
title={Breaking Failure Cascades: Step-Aware Reinforcement Learning for Medical Multimodal Reasoning},
author={Junha Jung and Minbyul Jeong and Suhyeon Lim and Sungwook Jung and Jaehoon Yun and Taeyun Roh and Mujeen Sung and Jaewoo Kang},
year={2026},
eprint={2606.31825},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2606.31825},
}
License
This model is released under the Apache 2.0 license.
- Downloads last month
- 1
Model tree for dmis-lab/InternVL3-8B-Instruct-MRPO
Base model
OpenGVLab/InternVL3-8B-Pretrained