Views
No views yet
UniAR-SFT) is the supervised fine-tuned model before RL. It provides a good starting point for custom RL training.| 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 |
1conda create -n uniar python=3.12 -y
2conda activate uniar
3
4git clone https://github.com/ShareLab-SII/UniAR.git
5cd UniAR
6pip install -e . # inference dependencies1import torch
2from transformers import AutoProcessor
3from uniar import UniARForConditionalGeneration
4
5model_path = "ShareLab-SII/UniAR-SFT"
6model = UniARForConditionalGeneration.from_pretrained(
7 model_path,
8 torch_dtype=torch.bfloat16,
9 attn_implementation="flash_attention_2",
10).cuda().eval()
11processor = AutoProcessor.from_pretrained(model_path)
12
13messages = [{"role": "user", "content": [
14 {"type": "image", "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg"},
15 {"type": "text", "text": "Describe this image in detail."},
16]}]
17
18inputs = processor.apply_chat_template(
19 messages,
20 tokenize=True,
21 add_generation_prompt=True,
22 return_dict=True,
23 return_tensors="pt",
24).to(model.device)
25inputs.pop("mm_token_type_ids", None)
26
27with torch.no_grad(), torch.autocast("cuda", dtype=torch.bfloat16):
28 output_ids = model.generate(**inputs, max_new_tokens=1024, do_sample=False)
29output_ids = [o[len(i):] for i, o in zip(inputs.input_ids, output_ids)]
30
31print(processor.batch_decode(output_ids, skip_special_tokens=True)[0])1import torch
2from transformers import AutoProcessor
3from uniar import UniARForConditionalGeneration, UniARVisualDecoder
4from inference.visual_inputs import prepare_visual_inputs
5
6model_path = "ShareLab-SII/UniAR-SFT"
7device = torch.device("cuda")
8
9ar_model = UniARForConditionalGeneration.from_pretrained(
10 model_path,
11 torch_dtype=torch.bfloat16,
12 attn_implementation="flash_attention_2",
13).to(device).eval()
14processor = AutoProcessor.from_pretrained(model_path, padding_side="left")
15visual_decoder = UniARVisualDecoder.from_pretrained(model_path, device=device)
16
17# prepare inputs
18visual_inputs = prepare_visual_inputs(
19 ["A cute anime girl."],
20 ar_model,
21 processor,
22 ar_height=960,
23 ar_width=960,
24)
25
26# autogressively generate visual indices
27indices = ar_model.generate_visual(
28 **visual_inputs,
29 temperature=1.0,
30 cfg=1.5,
31 show_progress=True,
32)
33
34# decode visual indices into image
35images = visual_decoder.decode(
36 indices,
37 ar_height=960,
38 ar_width=960,
39 upsampling_ratio=1.067,
40)
41
42images[0].save("output.png")1@article{peng2026unified,
2 title={Unified Multimodal Autoregressive Modeling with Shared Context-Visual Tokenizer is Key to Unification},
3 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},
4 journal={arXiv preprint arXiv:2606.18249},
5 year={2026}
6}