Yixia Li1*◊, Yaqing Shi3*, Zhiwen Ruan1, Dongdong Zhang2, Lingjie Jiang4,
Shaohan Huang2, Yun Chen3, Guanhua Chen1†, Furu Wei2
1Southern University of Science and Technology 2Microsoft Research Asia
3Shanghai University of Finance and Economics 4Peking University
*Equal contribution †Corresponding author ◊Work done during internship at Microsoft Research Asia.
VFA (Vision-Free Adaptation) is an efficient framework for enhancing the multilingual capabilities of Multimodal Large Language Models (MLLMs) without relying on scarce multilingual image-text data.
VFA decouples multilingual learning from visual alignment through a two-stage vision-free strategy:
- Stage 1: Fine-tune the base LLM on multilingual text-only data to derive a multilingual task vector
- Stage 2: Merge the multilingual task vector into the vision-aligned MLLM, preserving visual grounding while injecting multilingual competence
git clone https://github.com/sustech-nlp/VFA.git
cd VFALLaMA-Factory is included locally at src/LLaMA-Factory/. Install it into a virtual environment:
bash scripts/env_setup/uv_llamafactory.shlmms-eval (for multimodal benchmarks):
bash scripts/env_setup/uv_lmms_eval.shOpenCompass (for text-only benchmarks):
bash scripts/env_setup/uv_opencompass.shRun training (example with Qwen2.5-7B):
bash scripts/train/run_train.sh configs/finetune_llm/Qwen2.5-7B/multilingual_sft_99999.yamlsource uv_llamafactory/bin/activateTask Arithmetic:
python scripts/merge/vlm_model_merge.py \
--vlm_model_type Qwen/Qwen2.5-VL-7B-Instruct \
--llm_model_type Qwen/Qwen2.5-7B \
--vlm_model_path /path/to/Qwen2.5-VL-7B-Instruct \
--llm_model_path /path/to/finetuned-Qwen2.5-7B \
--base_model_path /path/to/Qwen2.5-7B \
--output_dir outputs/Qwen2.5-VL-7B-VFA \
--mode task_arithmetic \
--alpha 0.8Weighted Averaging:
python scripts/merge/vlm_model_merge.py \
--vlm_model_type Qwen/Qwen2.5-VL-7B-Instruct \
--llm_model_type Qwen/Qwen2.5-7B \
--vlm_model_path /path/to/Qwen2.5-VL-7B-Instruct \
--llm_model_path /path/to/finetuned-Qwen2.5-7B \
--output_dir outputs/Qwen2.5-VL-7B-VFA \
--mode weighted_average \
--alpha 0.8TIES-Merging:
python scripts/merge/vlm_model_merge.py \
--vlm_model_type HuggingFaceM4/Idefics3-8B-Llama3 \
--llm_model_type meta-llama/Llama-3.1-8B \
--vlm_model_path /path/to/Idefics3-8B-Llama3 \
--llm_model_path /path/to/finetuned-Llama-3.1-8B-Instruct \
--base_model_path /path/to/Llama-3.1-8B \
--output_dir outputs/Idefics3-8B-VFA \
--mode ties \
--alpha 0.8 \
--density 0.2Multilingual multimodal evaluation (lmms-eval):
export TASKS="maxm,xgqa,xmmmu,xm100,marvl,m3exam"
bash scripts/eval/eval_lmms.sh /path/to/merged-model outputs/eval_resultsText-only multilingual evaluation (OpenCompass):
export TASKS="tydiqa_gen,mmmlu_gen_d5017d,xnli_gen_973734,mhellaswag_gen_1a6b73,mifeval_gen_79f8fb,mlogiqa_gen_36c4f9,flores_gen_2697d7"
bash scripts/eval/eval_opencompass.sh /path/to/merged-model outputs/eval_results chat "$TASKS"General multimodal evaluation (lmms-eval):
export TASKS="ocrbench_v2,mmbench_en_dev,mmmu_val,mathvista_testmini"
bash scripts/eval/eval_lmms.sh /path/to/merged-model outputs/eval_resultsThe following trained checkpoints are available on ModelScope.
| Model | Training Type | Download |
|---|---|---|
| llama3-8b-instruct | Full SFT | ModelScope |
| llama31-8b-instruct | Full SFT | ModelScope |
| qwen25-7b-base | Full SFT | ModelScope |
| qwen25-7b-instruct | Full SFT | ModelScope |
| qwen3-4b-base | Full SFT | ModelScope |
| qwen3-8b-base | Full SFT | ModelScope |
| MLLM (VLM) | LLM Backbone | Backbone Family |
|---|---|---|
| Qwen2.5-VL-7B-Instruct | Qwen2.5-7B | Qwen |
| Idefics3-8B-Llama3 | Llama-3.1-8B / 8B-Instruct | Llama |
| llama3-llava-next-8b-hf | Meta-Llama-3-8B / 8B-Instruct | Llama |
| LLaVA-OneVision-1.5-8B-Instruct | Qwen3-8B-Base | Qwen |
| LLaVA-OneVision-1.5-4B-Instruct | Qwen3-4B-Base | Qwen |
| Qwen2-VL-7B-Instruct | Qwen2-7B | Qwen |
| Qwen3-VL-8B-Instruct | Qwen3-8B-Base | Qwen |
| Method | Formula | Description |
|---|---|---|
| Weighted Averaging | merged = alpha * VLM + (1-alpha) * LLM |
Linear interpolation between VLM and fine-tuned LLM |
| Task Arithmetic | merged = base + alpha * (TV_vlm + TV_ft) |
Adds weighted task vectors to the base model |
| TIES-Merging | merged = base + alpha * TIES(TV_vlm, TV_ft) |
Trim, Elect sign, and disjoint merge to reduce interference |
We fine-tune base LLMs on a 100K-example subset of the Multilingual-SFT dataset.
To download and preprocess the dataset (filters out multimodal samples):
python scripts/data_processing/process_multilingual_sft.py
# Output: data/multilingual_sft_99999.jsonIf you find this work useful, please cite our paper:
@inproceedings{li2026vfa,
title={VFA: Empowering Multilingual MLLMs via Vision-Free Adaptation},
author={Yixia Li and Yaqing Shi and Zhiwen Ruan and Dongdong Zhang and Lingjie Jiang and Shaohan Huang and Yun Chen and Guanhua Chen and Furu Wei},
booktitle={Proceedings of ACL},
year={2026}
}This project builds upon the following excellent open-source projects:
- LLaMA-Factory for training infrastructure
- lmms-eval and Pangea for multimodal evaluation
- OpenCompass for text evaluation