Instructions to use VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT") 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)# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT") model = AutoModelForMultimodalLM.from_pretrained("VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT", 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=256) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT", "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/VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT
- SGLang
How to use VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT 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 "VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT" \ --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": "VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT", "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 "VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT" \ --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": "VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT", "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 VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT with Docker Model Runner:
docker model run hf.co/VLR-CVC/CVC-Qwen3.5-35B-A3B-SFT
CVC-Qwen3.5-35B-A3B-Instruct
Vision-language instruct model finetuned from Qwen/Qwen3.5-35B-A3B-Base.
Mixture of experts: 35B total parameters, ~3B active per token (256 experts, top-8), 40 decoder layers, plus a 27-layer vision encoder. Weights are bf16.
Training
Two supervised finetuning stages, both at sequence length 16384 on 64 nodes of JUPITER (4x GH200 per node):
- Instruct SFT — one pass over the LLaVA-OneVision-1.5-Instruct + Nemotron-VLM-V2 (197 sources), 2274 steps, 16.7B tokens
- Decay anneal — a further 326 steps over the same sources reweighted towards document and OCR data, with the learning rate decayed to zero. ~2B tokens.
Benchmark Results
Evaluated with lmms-eval + vLLM on JUPITER (8 nodes, 32x GH200).
| Benchmark | CVC-35B-A3B-Instruct | Qwen3.5-35B-A3B-Base | Qwen3.5-35B-A3B |
|---|---|---|---|
| MMU_val (acc) | 0.6833 | 0.6056 | 0.6267 |
| MME (perception) | 1769.7 | 1666.4 | 1560.8 |
| MME (cognition) | 762.9 | 740.4 | 751.8 |
| AI2D (exact_match) | 0.8598 | 0.0929 | 0.6758 |
| OCRBench (accuracy) | 0.8760 | 0.8920 | 0.9120 |
| MMStar (average) | 0.7373 | 0.7381 | 0.7289 |
| ChartQA (relaxed_overall) | 0.7720 | 0.2620 | 0.7572 |
| MMLongBenchDoc (acc) | 0.1790 | 0.2000 | 0.1980 |
| MMLongBenchDoc (f1) | 0.0360 | 0.0110 | 0.0060 |
| DocVQA_val (anls) | 0.9130 | 0.6515 | 0.9539 |
| TextVQA_val (exact_match) | 0.6573 | 0.2669 | 0.7665 |
| InfoVQA_val (anls) | 0.8570 | 0.3412 | 0.8622 |
| SeedBench (seed_all) | 0.7429 | 0.7479 | 0.7152 |
| RealWorldQA (exact_match) | 0.7438 | 0.6288 | 0.7739 |
Training data mixture
Both stages draw from the same 197-source LLaVA-OneVision-1.5-Instruct with Nemotron-VLM-Dataset-V2. The two stages differ only in how that blend is sampled. The exact list of subsets can be found on DATA_MIX.md.
Stable (instruct SFT) blend_epochized, every sample seen once
(one deterministic full pass, ~16.7B tokens total). Composition follows each
source's natural size:
| Category | Share of stable-phase tokens | Example subsets |
|---|---|---|
| OCR / scene-text (core) | 1.34% | textvqa, st_vqa, textocr_gpt4v, ocrvqa, llavar, textcaps, sroie_data |
| Document VQA (core) | 0.31% | docvqa_train, infographic_vqa |
| Chart / plot (core) | 8.89% | chartqa, FigureQA, dvqa, chart2text, tqa, plotqa_* |
| Spatial / real-world (core) | 1.90% | gqa, aokvqa, visual7w, vsr, CLEVR, CLEVR-Math, vg |
| Text-only reasoning/math/code | 30.18% | orca_agentinstruct, openmathinstruct, magpie_ultra, magpie_pro, open_orca |
| General captioning/instruct | 21.82% | llava_instruct, sharegpt4o, sharegpt4v, allava, cambrian, Docmatix, svit, wit |
| Nemotron-v2 text | 17.72% | wiki_*x10, sparsetables, nights_cot |
| Document/OCR-adjacent (not core) | 14.70% | ureader_*, allenai_pixmo_docs, tinychart_train, robut_wikisql/wtq/sqa, mapqa, vistext |
| Agentic/web | 1.60% | VisualWebInstruct, alfworld, rootsautomation, sherlock |
| Science/diagram reasoning | 1.00% | ai2d, geo170k_*, Geometry3K, scienceqa, PMC-VQA |
| Spatial/counting extras (not core) | 0.53% | tallyqa, raven, Super-CLEVR, IconQA, VizWiz |
| Video (tiny, line-count fallback) | ~0.00% | perception_test_1/2/cot, breakfast_actions, ego_exo_learn |
Decay (anneal) switched to a weighted blend (continuous sampling,
~2B-token budget) with four target categories deliberately upweighted:
| Category | Share of decay-phase tokens |
|---|---|
| OCR / scene-text (core, upweighted) | 25% |
| Document VQA (core, upweighted) | 15% |
| Spatial / real-world (core, upweighted) | 12% |
| Chart / plot (core, upweighted) | 8% |
| Text-only reasoning/math/code (replay) | 13.79% |
| General captioning/instruct (replay) | 9.97% |
| Nemotron-v2 text (replay) | 8.10% |
| Document/OCR-adjacent, not core (replay) | 6.72% |
| Agentic/web (replay) | 0.73% |
| Science/diagram reasoning (replay) | 0.46% |
| Spatial/counting extras, not core (replay) | 0.24% |
| Video, tiny fallback (replay) | ~0.00% |
Notes
- Uses the Qwen3.5 chat template. Unlike the upstream instruct template, this
one renders
<think>blocks on every assistant turn rather than only the last, matching how the model was trained. eos_tokenis<|im_end|>, andgeneration_config.jsonstops on both<|im_end|>(248046) and<|endoftext|>(248044).
- Downloads last month
- 1