Image-Text-to-Text
Transformers
Safetensors
qwen3_5
vllm
video
multimodal
reinforcement-learning
temporal-grounding
object-tracking
video-segmentation
visual-question-answering
spatial-reasoning
qwen3.5
conversational
Instructions to use OraRL/Video-ORA-9B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use OraRL/Video-ORA-9B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="OraRL/Video-ORA-9B") 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 AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("OraRL/Video-ORA-9B") model = AutoModelForMultimodalLM.from_pretrained("OraRL/Video-ORA-9B", device_map="auto") 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?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use OraRL/Video-ORA-9B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "OraRL/Video-ORA-9B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "OraRL/Video-ORA-9B", "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/OraRL/Video-ORA-9B
- SGLang
How to use OraRL/Video-ORA-9B 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 "OraRL/Video-ORA-9B" \ --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": "OraRL/Video-ORA-9B", "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 "OraRL/Video-ORA-9B" \ --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": "OraRL/Video-ORA-9B", "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 OraRL/Video-ORA-9B with Docker Model Runner:
docker model run hf.co/OraRL/Video-ORA-9B
File size: 7,128 Bytes
53c10a4 d1dcd59 53c10a4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | <p align="right"><a href="README_zh.md">简体中文</a></p>
<div align="center">
# OraRL
### Annotations as Rollouts
**Efficient and scalable reinforcement learning for unified video MLLMs**
Yunheng Li · Guohong Mu · Hao Li · Shengsheng Qian · Dingwen Zhang ·
Qibin Hou · Ming-Ming Cheng
<p>
<a href="https://arxiv.org/abs/2608.20492">📄 Paper</a>
·
<a href="https://orarl.github.io/">🌐 Project Page</a>
·
<a href="#models">🤗 Models (4B / 9B)</a>
</p>
<p>
<a href="docs/environment.md">⚙️ Environment</a>
·
<a href="docs/training.md">🚀 Training</a>
·
<a href="docs/evaluation.md">📊 Evaluation</a>
·
<a href="LICENSE">⚖️ License</a>
</p>
<a href="https://orarl.github.io/assets/orarl-teaser.mp4">
<img src="assets/orarl-hero.gif"
alt="Animated OraRL method preview" width="92%">
</a>
**▶ Click the image to watch the 1:38 project overview.**
</div>
## Why OraRL
- **Annotation-as-rollout:** annotations become reliable positive rollouts while
policy samples retain an on-policy baseline.
- **Seven task families:** one update rule covers temporal and spatial grounding,
segmentation, tracking, spatial-temporal grounding, video QA, and spatial
intelligence.
- **Efficient training (4B):** sign-balanced pruning delivers **1.48× faster
updates** (**92.5 → 62.4 s/step**) while reducing peak per-GPU memory from
**62.4 to 50.9 GB**.
- **Efficient inference:** on one H20 with vLLM in BF16, weight loading occupies
**8.6 GiB (4B)** and **17.6 GiB (9B)**. On ten-minute, 2-fps videos,
answer-only decoding cuts median post-TTFT latency from **4.78 s to 130 ms**
and total latency from **29.03 to 24.30 s**.
- **Multimodal veRL infrastructure:** a unified video contract carries cached
artifacts, raw paths, or inline frame tensors through vLLM rollouts and FSDP
updates, with decode-once frame reuse, temporal metadata, task-grouped
batching, asynchronous Ray rewards, and safe hybrid-engine cache handling.
## OraRL in One Update
<p align="center">
<img src="assets/orarl-method.gif"
alt="Animated OraRL framework" width="96%">
</p>
An OraRL update separates reliable annotation guidance from on-policy
normalization:
1. **Build the group:** append one serialized annotation rollout to the policy
samples generated for the same prompt.
2. **Keep the baseline on-policy:** estimate the group baseline from policy
rewards only.
3. **Guide and select:** convert the annotation-policy reward gap into a
correction, then retain a sign-balanced subset for the update.
This design uses task-native annotations directly and requires no
chain-of-thought supervision or decoding.
## Video-ORA Results
<p align="center">
<img src="assets/paper-results.png"
alt="Video-ORA-9B results across seven task families" width="100%">
</p>
### Dataset-Level Results
<picture>
<source media="(prefers-color-scheme: dark)"
srcset="assets/video_ora_benchmark_matrix_dark.svg">
<source media="(prefers-color-scheme: light)"
srcset="assets/video_ora_benchmark_matrix_light.svg">
<img src="assets/video_ora_benchmark_matrix_light.svg"
alt="Dataset-level benchmark matrix comparing Video-ORA with multimodal baselines"
width="100%">
</picture>
Video-ORA-9B leads the matched seven-family comparison without CoT decoding.
Best and second-best values are highlighted per row; `†` denotes an
original-report value whose frame, prompt, split, or decoding settings may
differ. Averages require complete family coverage.
<!-- <details>
<summary>Benchmark sources</summary>
Unmarked values come from Tables 1–8 and Appendix Table 20 of the latest
[OraRL paper](https://arxiv.org/abs/2608.20492). External entries follow the original
[LLaVA-OneVision-2](https://arxiv.org/abs/2605.25979),
[VideoChat3](https://github.com/MCG-NJU/VideoChat3), and
[OneThinker](https://arxiv.org/abs/2512.03043) reports. OneThinker is cited only
as the source of public Qwen3-VL scores. ReVSI uses each model's reported frame
setting; the paper's three-benchmark spatial-intelligence average excludes it.
</details> -->
### Model Scaling
<p align="center">
<img src="assets/orarl-model-scaling.gif"
alt="Animated Video-ORA model scaling from 0.8B to 9B" width="100%">
</p>
### Data Scaling
<p align="center">
<img src="assets/orarl-data-scaling.gif"
alt="Animated OraRL data scaling and reward dynamics" width="100%">
</p>
## Models
| Model | Backbone | Released recipe | Weights |
| --- | --- | --- | --- |
| **Video-ORA-9B** | Qwen3.5-9B | `orarl_9b.yaml` | [Hugging Face](https://huggingface.co/OraRL/Video-ORA-9B) |
| **Video-ORA-4B** | Qwen3.5-4B | `orarl_4b.yaml` | [Hugging Face](https://huggingface.co/OraRL/Video-ORA-4B) |
### vLLM Serving
Both Video-ORA checkpoints load directly with **vLLM 0.19.1** for
OpenAI-compatible serving:
```bash
MODEL=OraRL/Video-ORA-9B
vllm serve "$MODEL" \
--served-model-name Video-ORA-9B \
--trust-remote-code \
--dtype bfloat16 \
--tensor-parallel-size 1 \
--max-model-len 131072 \
--limit-mm-per-prompt '{"image": 1, "video": 1}'
```
Set `--tensor-parallel-size` to the GPU count for multi-GPU deployment and
lower `--max-model-len` on smaller-memory devices. Use
`enable_thinking=false` in the chat template for answer-only inference.
## Use OraRL
The release is organized around three user-facing workflows:
1. **[Environment](docs/environment.md):** install the pinned CUDA stack that
covers both the bundled trainer and the evaluators.
2. **[Training](docs/training.md):** prepare licensed local training data and
launch GRPO or OraRL on one or multiple nodes.
3. **[Evaluation](docs/evaluation.md):** download Video-ORA and OraRL-Data,
then run a smoke test or the complete paper suite.
Training and evaluation are dry runs by default; inspect the resolved command
before adding `--run`. Checkpoints and evaluation media are hosted under the
[OraRL Hugging Face organization](https://huggingface.co/OraRL).
## Acknowledgements
OraRL is built on [veRL](https://github.com/volcengine/verl) — a
high-performance RL framework with HybridEngine. We thank its authors and
contributors for open-sourcing the training infrastructure.
## License
OraRL source is released under [Apache-2.0](LICENSE). Datasets, models,
benchmarks, and optional dependencies retain their original licenses; see
[NOTICE](NOTICE).
## Citation
If you find OraRL useful, please consider giving this repository a ⭐ and
citing our [paper](https://arxiv.org/abs/2608.20492).
```bibtex
@article{li2026orarl,
title = {Annotations as Rollouts: Efficient and Scalable
Reinforcement Learning for Video MLLMs},
author = {Li, Yunheng and Mu, Guohong and Li, Hao and
Qian, Shengsheng and Zhang, Dingwen and Hou, Qibin
and Cheng, Ming-Ming},
journal = {arXiv preprint arXiv:2608.20492},
year = {2026},
url = {https://arxiv.org/abs/2608.20492}
}
```
|