Instructions to use tiny-random/unlimited-ocr-2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use tiny-random/unlimited-ocr-2 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="tiny-random/unlimited-ocr-2", trust_remote_code=True)# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("tiny-random/unlimited-ocr-2", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use tiny-random/unlimited-ocr-2 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "tiny-random/unlimited-ocr-2" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "tiny-random/unlimited-ocr-2", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/tiny-random/unlimited-ocr-2
- SGLang
How to use tiny-random/unlimited-ocr-2 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 "tiny-random/unlimited-ocr-2" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "tiny-random/unlimited-ocr-2", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'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 "tiny-random/unlimited-ocr-2" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "tiny-random/unlimited-ocr-2", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use tiny-random/unlimited-ocr-2 with Docker Model Runner:
docker model run hf.co/tiny-random/unlimited-ocr-2
|
Download README.md from tiny-random/unlimited-ocr-2: direct link, hf CLI and curl.
- Browser
- Download file 5.43 kB
-
https://huggingface.co/tiny-random/unlimited-ocr-2/resolve/main/README.md
- Command line
-
hf download hf://tiny-random/unlimited-ocr-2/README.md
-
curl -L -o README.md https://huggingface.co/tiny-random/unlimited-ocr-2/resolve/main/README.md
5.43 kB
| library_name: transformers | |
| pipeline_tag: image-text-to-text | |
| base_model: | |
| - baidu/Unlimited-OCR-2 | |
| This is a randomly initialized tiny model based on [baidu/Unlimited-OCR-2](https://huggingface.co/baidu/Unlimited-OCR-2) for testing and debugging. | |
| | Feature | Source | This repo | | |
| |---|---|---| | |
| | Checkpoint tensor elements | 3.34B BF16, 257 I64 | 9.04M BF16, 257 I64 | | |
| | Safetensors weight files | 6.69 GB (2 files) | 18.12 MB (model.safetensors) | | |
| | Decoder layers / hidden width / dense MLP | 12 / 1,280 / 6,848 | 4 / 32 / 256 | | |
| | Q / KV heads / head dimension | 10 / 10 / 128 | 4 / 4 / 32 | | |
| | Routed experts / top-k / shared experts | 64 / 6 / 2 | 16 / 6 / 2 | | |
| | Expert intermediate width / initial dense layers | 896 / 1 | 64 / 1 | | |
| | DASH index width / sparse block size | 128 / 32 | 32 / 32 | | |
| | Page and token RoPE / sparse layer coverage | page2d / all layers | Same | | |
| | SAM layers / width / global attention layers | 12 / 768 / 2,5,8,11 | 6 / 32 / 2,5 | | |
| | CLIP layers / width | 24 / 1,024 | 4 / 32 | | |
| | SAM neck / downsampling channels | 256 / 512,1,024 | 8 / 16,32 | | |
| | Vision projector input / output | 2,048 / 1,280 | 64 / 32 | | |
| | Global / crop image size / page visual tokens | 1,024 / 640 / 273 | Same | | |
| | Vocabulary rows / tied embeddings | 129,280 / no | Same | | |
| | Serialized precision | BF16 weights + I64 position IDs | Same | | |
| Residual width 32 is independent of the four 32-dimensional attention heads: Q/K/V project to 128 channels and the output projection returns to the residual width. The included runtime exposes these config dimensions while preserving the upstream attention kernels. | |
| | File path | Size | | |
| |------|------| | |
| | model.safetensors | 18.1MB | | |
| ### Example usage | |
| #### Transformers (✅ verified) | |
| Install Transformers 4.52.1, `torchvision`, `Pillow`, `addict`, `easydict` and `einops` and load the included upstream remote code. The source registers only `mha_eager`; its OCR API runs DASH Triton sparse prefill, the reference masked sparse decode, and SDPA in SAM/CLIP. | |
| ```python | |
| def run_transformers(model_id: str): | |
| import torch | |
| from PIL import Image, ImageDraw | |
| from transformers import AutoModel, AutoTokenizer | |
| tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True) | |
| model = AutoModel.from_pretrained(model_id, trust_remote_code=True, torch_dtype=torch.bfloat16).eval().cuda() | |
| page = Image.new("RGB", (800, 1000), "white") | |
| ImageDraw.Draw(page).text((50, 50), "Hello OCR. Page one.", fill="black") | |
| text = model.infer(tokenizer, prompt="Read this document.", image_file=page, max_new_tokens=10) | |
| print(text) | |
| text, tokens = model.infer_multi(tokenizer, image_files=[page, page.copy()], max_new_tokens=10) | |
| print(text, tokens) | |
| if __name__ == "__main__": | |
| run_transformers(model_id="tiny-random/unlimited-ocr-2") | |
| ``` | |
| #### SGLang (✅ verified) | |
| Install Baidu's pinned `sglang-0.5.20.dev13+g75b9b06b02` wheel from the [source repo](https://huggingface.co/baidu/Unlimited-OCR-2/tree/c14071b549f4fcab10909f3c4acc6a2edb366947/wheel). The included external-model package reads the reduced vision config, separates residual width from attention head dimension, and gathers the TP-sharded DASH index projections before normalization. The upstream attention and routing kernels are retained. | |
| ```bash | |
| hf download tiny-random/unlimited-ocr-2 --local-dir ./unlimited-ocr-2 | |
| pip install --no-deps ./unlimited-ocr-2 | |
| export SGLANG_EXTERNAL_MODEL_PACKAGE=unlimited_ocr_runtime | |
| export SGLANG_UOCR_EANABLE_DOC_LIMIT=0 | |
| python -m sglang.launch_server \ | |
| --model-path ./unlimited-ocr-2 \ | |
| --tp-size 4 \ | |
| --trust-remote-code \ | |
| --chat-template unlimited-ocr \ | |
| --context-length 4096 \ | |
| --max-total-tokens 8192 \ | |
| --max-running-requests 4 \ | |
| --cuda-graph-backend-decode full \ | |
| --cuda-graph-max-bs-decode 4 \ | |
| --cuda-graph-backend-prefill full \ | |
| --cuda-graph-max-bs-prefill 2048 \ | |
| --cuda-graph-bs-prefill 2048 \ | |
| --max-prefill-tokens 2048 \ | |
| --chunked-prefill-size 2048 \ | |
| --cuda-graph-config '{"prefill": {"backend": "full", "full_prefill_max_req": 4}}' \ | |
| --mem-fraction-static 0.3 \ | |
| --host 0.0.0.0 --port 8000 | |
| ``` | |
| ```python | |
| import base64 | |
| from io import BytesIO | |
| import requests | |
| from PIL import Image, ImageDraw | |
| page = Image.new("RGB", (800, 1000), "white") | |
| ImageDraw.Draw(page).text((50, 50), "Hello OCR", fill="black") | |
| buffer = BytesIO() | |
| page.save(buffer, format="PNG") | |
| image = "data:image/png;base64," + base64.b64encode(buffer.getvalue()).decode() | |
| session = requests.Session() | |
| session.trust_env = False | |
| response = session.post("http://127.0.0.1:8000/v1/chat/completions", json={ | |
| "model": "./unlimited-ocr-2", | |
| "messages": [{"role": "user", "content": [ | |
| {"type": "image_url", "image_url": {"url": image}}, | |
| {"type": "text", "text": "<PAGE><image>Read this document."}, | |
| ]}], | |
| "max_tokens": 10, "temperature": 0, | |
| }, timeout=120) | |
| response.raise_for_status() | |
| print(response.json()["choices"][0]["message"]["content"]) | |
| ``` | |
| ### Creating this repo | |
| - Code: [.meta/create_model.py](.meta/create_model.py) | |
| - Model structure: [.meta/model.log](.meta/model.log) | |
| - Environment: [.meta/env.json](.meta/env.json) | |
| ### Change log | |
| - 2026-10-31: Initial tiny Unlimited-OCR 2 checkpoint with the upstream SR-SWA runtime. | |
| - 2026-11-01: Separate residual width from the 32-dimensional attention heads to reduce checkpoint size. | |
| *This repo is generated by GPT-6.1-Sol.* |