Model reference · open weights
UniAR-SFT is an open-weight language model from ShareLab-SII. UniAR-SFT (BF16) weighs 19.3 GB; the smallest configuration that runs it is RTX 4090 24 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the ShareLab-SII/UniAR-SFT model card, 2026-10-01
What it is
| Released by | ShareLab-SII |
|---|---|
| Released | 2026-06-16 |
| Parameters | 9.6B |
| VRAM | 19.3 GB for the weights |
What it runs on
| Card | Requests at once | Context max | Memory | |
|---|---|---|---|---|
| 8K each | 32K each | |||
| RTX 3060 12 GB … RTX 4060 Ti 16 GB 2 smaller cards | ||||
| RTX 3090 24 GB | 1 | 13K | 23.4 GB | |
| RTX 4090 24 GB | 1 | 13K | 23.4 GB | |
| RTX 5090 32 GB | 8 | 2 | all 32K | 31.0 GB |
| L40S 48 GB | 18 | 4 | all 32K | 44.0 GB |
| A100 80 GB | 47 | 11 | all 32K | 78.2 GB |
| H100 80 GB | 43 | 10 | all 32K | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | 56 | 14 | all 32K | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | 67 | 16 | all 32K | 107 GB |
| H200 141 GB | 93 | 23 | all 32K | 138 GB |
| B200 180 GB | 124 | 31 | all 32K | 176 GB |
| 2× RTX 4060 Ti 16 GB tensor parallel | 6 | 1 | all 32K | 15.4 GB a card |
| 2× RTX 4090 24 GB tensor parallel | 19 | 4 | all 32K | 23.4 GB a card |
| 2× RTX 3090 24 GB tensor parallel | 19 | 4 | all 32K | 23.4 GB a card |
| Requests at once | 8K tokens each | 32K tokens each |
|---|---|---|
| 1 | 22.5 GB | 26.1 GB |
| 5 | 27.3 GB | 45.5 GB |
| 8 | 31.0 GB | 60.0 GB |
| 16 | 40.6 GB | 98.6 GB |
| 32 | 60.0 GB | 176 GB |
| 64 | 98.6 GB | 331 GB |
One card, with vLLM's small-card settings.
From the model card
UniAR is a unified autoregressive multimodal model for image understanding, image generation, and image editing in a single Transformer. UniAR-SFT is the supervised fine-tuned checkpoint (before RL).
UniAR uses a single discrete visual tokenizer (BSQ) as the key bridge between understanding and generation, enabling a shared context where the model can directly interpret its own generated visual tokens. Key components:
This checkpoint (UniAR-SFT) is the supervised fine-tuned model before RL. It provides a good starting point for custom RL training.
This is a self-contained checkpoint with all components needed for both understanding and generation:
| Component | Path | Description |
|---|---|---|
| AR model | *.safetensors | Unified autoregressive model weights |
| BSQ encoder | bsq_encoder/ | BSQ quantized image tokenizer |
| SD3 transformer | sd3_transformer/ | SD3 transformer with visual feature injection |
| SD3 pipeline | sd3_pipeline/ | SD3 VAE + text encoders |
conda create -n uniar python=3.12 -y
conda activate uniar
git clone https://github.com/ShareLab-SII/UniAR.git
cd UniAR
pip install -e . # inference dependencies
import torch
from transformers import AutoProcessor
from uniar import UniARForConditionalGeneration
model_path = "ShareLab-SII/UniAR-SFT"
model = UniARForConditionalGeneration.from_pretrained(
model_path,
torch_dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
).cuda().eval()
processor = AutoProcessor.from_pretrained(model_path)
messages = [{"role": "user", "content": [
{"type": "image", "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg"},
{"type": "text", "text": "Describe this image in detail."},
]}]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
return_dict=True,
return_tensors="pt",
).to(model.device)
inputs.pop("mm_token_type_ids", None)
with torch.no_grad(), torch.autocast("cuda", dtype=torch.bfloat16):
output_ids = model.generate(**inputs, max_new_tokens=1024, do_sample=False)
output_ids = [o[len(i):] for i, o in zip(inputs.input_ids, output_ids)]
print(processor.batch_decode(output_ids, skip_special_tokens=True)[0])
import torch
from transformers import AutoProcessor
from uniar import UniARForConditionalGeneration, UniARVisualDecoder
from inference.visual_inputs import prepare_visual_inputs
model_path = "ShareLab-SII/UniAR-SFT"
device = torch.device("cuda")
ar_model = UniARForConditionalGeneration.from_pretrained(
model_path,
torch_dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
).to(device).eval()
processor = AutoProcessor.from_pretrained(model_path, padding_side="left")
visual_decoder = UniARVisualDecoder.from_pretrained(model_path, device=device)
# prepare inputs
visual_inputs = prepare_visual_inputs(
["A cute anime girl."],
ar_model,
processor,
ar_height=960,
ar_width=960,
)
# autogressively generate visual indices
indices = ar_model.generate_visual(
**visual_inputs,
temperature=1.0,
cfg=1.5,
show_progress=True,
)
# decode visual indices into image
images = visual_decoder.decode(
indices,
ar_height=960,
ar_width=960,
upsampling_ratio=1.067,
)
images[0].save("output.png")
@article{peng2026unified,
title={Unified Multimodal Autoregressive Modeling with Shared Context-Visual Tokenizer is Key to Unification},
author={Peng, Wujian and Meng, Lingchen and Cai, Yuxuan and Zhuang, Xianwei and Yang, Yuhuan and Fang, Rongyao and Wu, Chenfei and Lin, Junyang and Wu, Zuxuan and Bai, Shuai},
journal={arXiv preprint arXiv:2606.18249},
year={2026}
}
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.