A Vision-Centric Multimodal LLM System for Holistic Medical Understanding
Multimodal large language models (MLLMs) hold immense potential to revolutionize clinical practice, yet deploying them in the medical domain is fundamentally a vision-centric challenge: models must absorb knowledge from heterogeneous 2D and 3D medical images, and evaluation protocols must align with radiologists' clinical practice and provide an accurate, fine-grained and factualness-driven assessment. In this paper, we introduce ClinFusion, a vision-centric MLLM designed for holistic medical understanding that systematically addresses these limitations. We propose a compositional and cascaded vision encoder architecture featuring a Cascade Spatial-Aware Locality Fusion operator that unifies diverse 2D and native 3D medical image understanding within a fused encoder. We further introduce a vision-grounded evaluation framework, including MedIF-Bench for instruction-following assessment and a region-of-interest-grounded method for clinically aligned and factualness-driven report generation evaluation. We show that ClinFusion sets a new state-of-the-art across a comprehensive suite of 2D and 3D multimodal medical benchmarksβspanning visual question answering, report generation, and instruction followingβas well as textual medical tasks, outperforming leading open-source medical MLLMs (e.g., Hulu-Med, Lingshu) on 20 out of 24 benchmarks and demonstrating multimodal capabilities better than powerful proprietary models such as GPT-5.2 and Gemini-3-Flash on 13 out of 16 benchmarks, and can be further augmented with agentic tool use for retrieval-augmented and tool-assisted clinical workflows. A blinded evaluation by board-certified radiologists confirms that ClinFusion produces the highest-ranked reports, and validates our RoI-grounded metric as achieving the strongest correlation with expert judgment among all automatic evaluation metrics examined.
(a) Performance on multimodal medical benchmarks. Β (b) Performance on text-only medical benchmarks.
(a) Data curation, compositional vision encoder, and training recipe. Β (b) Vision-grounded evaluation framework (MedIF-Bench and RoI-grounded report evaluation). Β (c) Agentic tool use for retrieval-augmented clinical workflows.
[2026-08-16] π¦ The full evaluation suite is out! We have released ClinFusion-Eval-Data on β 211K evaluation records over 22 medical benchmarks, plus the 509 GiB media archive of 2D images and native 3D CT volumes for one-command reproduction. π¬
[2026-07-29] π₯ Try ClinFusion-8B in your browser! β no installation required. πΉοΈ οΌBoth English and Chinese are supported but English might be better.οΌ
[2026-07-28] π Our paper ClinFusion: A Vision-Centric Multimodal LLM System for Holistic Medical Understanding is now on arXiv! We have open-sourced the code and released the model weights (ClinFusion-8B / ClinFusion-32B) on Hugging Face. π
Flash-Attention cannot be installed directly via pip and must be provided as a pre-built wheel. Download the wheel that matches your environment from:
Choose the wheel matching your CUDA version, PyTorch version, and Python version (e.g., flash_attn-2.8.3+cu128torch2.8-cp311-cp311-linux_x86_64.whl for CUDA 12.8 + PyTorch 2.8 + Python 3.11), and place it in the project root directory.
Make sure the filename in requirements.txt matches the wheel you downloaded. If not, update the last line of requirements.txt accordingly.
We provide an installation script that automatically sets up the environment using uv:
# Install and activate in one step
source install_from_scratch.sh
# Or install only (prints activation command afterwards)
bash install_from_scratch.sh
The script will:
uv package manager (if not already installed)ENV_DIR in install_from_scratch.shοΌrequirements.txtClinFusion uses multiple vision encoders. Please download them first:
export HF_ENDPOINT=https://hf-mirror.com
# π¦ DINOv2
huggingface-cli download --resume-download facebook/dinov2-large \
--repo-type model \
--local-dir cache/models/dinov2-large
# π¬ ConvNeXt
huggingface-cli download --resume-download laion/CLIP-convnext_large_d_320.laion2B-s29B-b131K-ft-soup \
--repo-type model \
--local-dir cache/models/CLIP-convnext_large_d_320.laion2B-s29B-b131K-ft-soup
export HF_ENDPOINT=https://hf-mirror.com
# Qwen3-VL-8B-Instruct (for 8B model)
huggingface-cli download --resume-download Qwen/Qwen3-VL-8B-Instruct \
--repo-type model \
--local-dir cache/models/Qwen3-VL-8B-Instruct
# Qwen3-VL-32B-Instruct (for 32B model)
huggingface-cli download --resume-download Qwen/Qwen3-VL-32B-Instruct \
--repo-type model \
--local-dir cache/models/Qwen3-VL-32B-Instruct
export HF_ENDPOINT=https://hf-mirror.com
# ClinFusion-8B
huggingface-cli download --resume-download Alibaba-DAMO-Academy/ClinFusion-8B \
--repo-type model \
--local-dir cache/models/ClinFusion-8B
# ClinFusion-32B
huggingface-cli download --resume-download Alibaba-DAMO-Academy/ClinFusion-32B \
--repo-type model \
--local-dir cache/models/ClinFusion-32B
The evaluation annotations (the four *.jsonl files) already ship with this repository under eval/Evaluation/datasets/. The media they reference β 2D images and native 3D CT volumes β are released separately on the Hub as ClinFusion-Eval-Data, split into 102 shards of mm_data.tar (509.25 GiB in total, since the Hub caps single files at 50 GB).
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download --resume-download Alibaba-DAMO-Academy/ClinFusion-Eval-Data \
--repo-type dataset \
--local-dir cache/data
cd cache/data
cat mm_data.tar.part-* | wc -c # expect 546797690880
cat mm_data.tar.part-* | tar xf - # -> cache/data/mm_data/
Media paths inside the jsonl files are relative (mm_data/...) and are resolved from the repository root, so link the extracted tree there:
cd ClinFusion
ln -s cache/data/mm_data mm_data
[!TIP] Reassembly needs ~1 TB of free space while the shards and the extracted tree coexist; delete
mm_data.tar.part-*once extraction succeeds to halve that. Both the download and the extraction can be resumed by re-running the same commands.
Fill in the API keys in eval/api_keys/api_key.ak.
Modify the base_url: in your yaml file to specify the base URL of the API.
Modify the python path python_executable: in your yaml file to specify the python path in your environment.
cd ClinFusion
| Benchmark Type | Command |
|---|---|
| πΌοΈ 2D & Textual | bash eval/tools/launch_eval_clinfusion_2d_general.sh |
| π§ 3D Volumetric | bash eval/tools/launch_eval_clinfusion_3d.sh |
| π Instruction-Following | bash eval/tools/launch_eval_clinfusion_if.sh |
[!TIP] 3D evaluation can be time-consuming. We provide a lite version for faster iteration. Switch by modifying
eval_data_pathineval/Evaluation/config_templates/clinfusion/config_3d_clinfusion.yaml:# Full version eval_data_path: "eval/Evaluation/datasets/3d_eval_data_ct-rate_amos_3d-rad.jsonl" # Lite version (recommended for quick testing) eval_data_path: "eval/Evaluation/datasets/3d_eval_data_ct-rate_amos_3d-rad_lite.jsonl"
This section explains how to run ClinFusion inference on your own data. Before running, modify python_executable: in your YAML config file to point to your Python environment.
All input data should be in JSONL format (one JSON object per line). Each entry must contain a messages field with the following structure:
{
"messages": {
"prompt": "Your question or instruction here.",
"image": ["path/to/image1.jpg", "path/to/image2.png"],
"nifti": ["path/to/volume.nii.gz"]
}
}
prompt (required): The text query or instruction for the model.image (optional): A list of paths to 2D image files (e.g., .jpg, .png). Omit this field for text-only or 3D-only inputs.nifti (optional): A list of paths to 3D NIfTI volumes (.nii.gz). Omit this field for text-only or 2D-only inputs.[!NOTE] You can include any additional fields (e.g.,
source,index,ground_truth) in each JSON object for your own bookkeeping β they will be preserved in the output file alongside the model's generation.
Prepare a JSONL file where each line contains a messages field with prompt and image:
{"messages": {"prompt": "What imaging modality was used in the diagnosis?\nA. X-ray\nB. Ultrasound\nC. MRI\nD. CT scan\n\nPut your final single letter choice in \\boxed{}.", "image": ["assets/example_data/PMC3610355_fig14.jpg"]}}
{"messages": {"prompt": "Where does the image represent in the body?", "image": ["assets/example_data/xmlab508_source.jpg"]}}
It is placed in eval/test/example_data_2d_general.jsonl.
Then create a YAML config file (see eval/test/test_clinfusion_2d_general.yaml as a template) and run:
cd ClinFusion
bash eval/tools/launch_inference.sh eval/test/test_clinfusion_2d_general.yaml
Key config fields to modify:
| Field | Description |
|---|---|
python_executable | Path to your Python binary |
input_data_path | Path to your JSONL data file |
final_output_path | Directory for output results |
model_path | Path to store the ClinFusion checkpoint |
For text-only questions (no images), simply omit both image and nifti fields:
{"messages": {"prompt": "A 41-year-old man presents to his primary care provider after seeing bright red blood in the toilet bowl after his last 2 bowel movements. He reports that he also noticed some blood mixed with his stool. The patient denies abdominal pain or any changes in his stool habits. He notes a weight loss of 8 pounds in the last 2 months with no changes in his diet or exercise habits. Which of the following is the most appropriate next step in management?\nA. Abdominal CT\nB. Colonoscopy\nC. Ultrasound of abdomen\nD. Barium enema"}}
It is placed in eval/test/example_data_2d_general.jsonl.
Run with the same 2D general config:
cd ClinFusion
bash eval/tools/launch_inference.sh eval/test/test_clinfusion_2d_general.yaml
For 3D CT/MRI volumes, use the nifti field instead of image. ClinFusion automatically converts NIfTI volumes into 2D slices for processing via nifti_to_image_slices.
{"messages": {"prompt": "What can be inferred about the left iliac artery from the CT image?\nA. There is a significant dilation\nB. It is obscured by nearby structures\nC. It extends into an intramural hematoma\nD. There is a discontinuity in the vessel wall", "nifti": ["assets/example_data/amos_0326.nii.gz"]}}
It is placed in eval/test/example_data_3d.jsonl.
Run with the 3D config:
cd ClinFusion
bash eval/tools/launch_inference.sh eval/test/test_clinfusion_3d.yaml
Results are saved to <final_output_path>/generation_output.jsonl. Each line contains your original input fields plus a model_generation field with the model's response:
{"messages": {"prompt": "...", "image": [...]}, "model_generation": "..."}
| Component | How to Customize | Reference |
|---|---|---|
| Aggregator | Replace aggregator_path in config | See Evaluation/aggregators/ |
| Evaluator | Replace evaluator_path in config | See Evaluation/evaluators/ |
| Dataset | Follow the format in Evaluation/datasets/ | MCQ context format supports RAG benchmarks |
| 3D Input | All models support NIfTI file input via nifti_to_image_slices | See InferenceEngine/models/utils.py |
ClinFusion-Eval supports evaluating any custom model via the model_type: "custom" configuration:
model_config:
# 1. Set model_type to 'custom'
model_type: "custom"
# 2. Path to your fine-tuned model checkpoint
model_path: "/path/to/checkpoint"
# 3. Path to your adapter file (must define MedEvalKitAdapter)
model_definition_path: "/path/to/medevalkit_adapter.py"
[!NOTE] Define a
medevalkit_adapter.pyin your model directory. Seetest/medevalkit_adapter.pyfor an example. Verify your implementation withpython test/test_custom.py.
Example: Custom model inference
You can refer to π Model Inference with Your Own Data.
Example: Custom model evaluation
You can follow Running ClinFusion-Eval to run evaluation with your custom model since ClinFusion is one kind of custom model.
Both launch_inference.sh and launch_eval.sh support single-node and multi-node environments seamlessly.
bash launch_inference.sh.RANK, WORLD_SIZE, MASTER_ADDR, etc.) are automatically configured. Just run the same command.[!IMPORTANT] For local models: Ensure
cluster_config.total_gpusin yourconfig.yamlis set to the total number of available GPUs across all nodes. For example, 2 nodes Γ 8 GPUs =16.
Workers are dynamically allocated for optimal GPU utilization:
total_gpus / gpus_per_workerlen(dataset) / batch_sizemin(1, 2)[!TIP] To force more GPU parallelism on small datasets, reduce
generation_config.batch_sizeβ this increases the effective worker count.
ClinFusion is part of our ongoing efforts in building reliable and trustworthy medical AI. We encourage you to check out our related works:
If you find ClinFusion useful in your research, please consider citing:
@article{yuan2026ClinFusion,
title={ClinFusion: A Vision-Centric Multimodal LLM System for Holistic Medical Understanding},
author={Yuan, Hangjie and Qian, Yichen and Tang, Zhiwei and Xu, Xianzhe and Wu, Lirong and Yang, Sicheng and Wang, Jinwang and Wang, Pengju and Zeng, Zhitao and Han, Yizeng and Xing, Yan and Luo, Shengxuan and Feng, Tao and Xie, Qing and Yao, Weigen and Yang, Yi and Liu, Zuozhu and Tang, Jiasheng and Wang, Shaocheng and Wang, Jitao and Dong, Jiahong and Chen, Weihua and Xu, Feng and Wang, Fan},
journal={arXiv preprint arXiv:2607.24743},
year={2026}
}
@article{yang2026ClinHallu,
title={ClinHallu: A Benchmark for Diagnosing Stage-Wise Hallucinations in Medical MLLM Reasoning},
author={Yang, Sicheng and Yuan, Hangjie and Zhang, Wenjun and Wang, Jinwang and Qian, Yichen and Chen, Weihua and Wang, Fan and Zhu, Lei},
journal={arXiv preprint arXiv:2606.14697},
year={2026}
}
ClinFusion is built upon the following excellent open-source projects:
Made with β€οΈ by Alibaba DAMO Academy
12 commits
Python
96.4%
Shell
3.6%
A Vision-Centric Multimodal LLM System for Holistic Medical Understanding
Multimodal large language models (MLLMs) hold immense potential to revolutionize clinical practice, yet deploying them in the medical domain is fundamentally a vision-centric challenge: models must absorb knowledge from heterogeneous 2D and 3D medical images, and evaluation protocols must align with radiologists' clinical practice and provide an accurate, fine-grained and factualness-driven assessment. In this paper, we introduce ClinFusion, a vision-centric MLLM designed for holistic medical understanding that systematically addresses these limitations. We propose a compositional and cascaded vision encoder architecture featuring a Cascade Spatial-Aware Locality Fusion operator that unifies diverse 2D and native 3D medical image understanding within a fused encoder. We further introduce a vision-grounded evaluation framework, including MedIF-Bench for instruction-following assessment and a region-of-interest-grounded method for clinically aligned and factualness-driven report generation evaluation. We show that ClinFusion sets a new state-of-the-art across a comprehensive suite of 2D and 3D multimodal medical benchmarksβspanning visual question answering, report generation, and instruction followingβas well as textual medical tasks, outperforming leading open-source medical MLLMs (e.g., Hulu-Med, Lingshu) on 20 out of 24 benchmarks and demonstrating multimodal capabilities better than powerful proprietary models such as GPT-5.2 and Gemini-3-Flash on 13 out of 16 benchmarks, and can be further augmented with agentic tool use for retrieval-augmented and tool-assisted clinical workflows. A blinded evaluation by board-certified radiologists confirms that ClinFusion produces the highest-ranked reports, and validates our RoI-grounded metric as achieving the strongest correlation with expert judgment among all automatic evaluation metrics examined.
(a) Performance on multimodal medical benchmarks. Β (b) Performance on text-only medical benchmarks.
(a) Data curation, compositional vision encoder, and training recipe. Β (b) Vision-grounded evaluation framework (MedIF-Bench and RoI-grounded report evaluation). Β (c) Agentic tool use for retrieval-augmented clinical workflows.
[2026-08-16] π¦ The full evaluation suite is out! We have released ClinFusion-Eval-Data on β 211K evaluation records over 22 medical benchmarks, plus the 509 GiB media archive of 2D images and native 3D CT volumes for one-command reproduction. π¬
[2026-07-29] π₯ Try ClinFusion-8B in your browser! β no installation required. πΉοΈ οΌBoth English and Chinese are supported but English might be better.οΌ
[2026-07-28] π Our paper ClinFusion: A Vision-Centric Multimodal LLM System for Holistic Medical Understanding is now on arXiv! We have open-sourced the code and released the model weights (ClinFusion-8B / ClinFusion-32B) on Hugging Face. π
Flash-Attention cannot be installed directly via pip and must be provided as a pre-built wheel. Download the wheel that matches your environment from:
Choose the wheel matching your CUDA version, PyTorch version, and Python version (e.g., flash_attn-2.8.3+cu128torch2.8-cp311-cp311-linux_x86_64.whl for CUDA 12.8 + PyTorch 2.8 + Python 3.11), and place it in the project root directory.
Make sure the filename in requirements.txt matches the wheel you downloaded. If not, update the last line of requirements.txt accordingly.
We provide an installation script that automatically sets up the environment using uv:
# Install and activate in one step
source install_from_scratch.sh
# Or install only (prints activation command afterwards)
bash install_from_scratch.sh
The script will:
uv package manager (if not already installed)ENV_DIR in install_from_scratch.shοΌrequirements.txtClinFusion uses multiple vision encoders. Please download them first:
export HF_ENDPOINT=https://hf-mirror.com
# π¦ DINOv2
huggingface-cli download --resume-download facebook/dinov2-large \
--repo-type model \
--local-dir cache/models/dinov2-large
# π¬ ConvNeXt
huggingface-cli download --resume-download laion/CLIP-convnext_large_d_320.laion2B-s29B-b131K-ft-soup \
--repo-type model \
--local-dir cache/models/CLIP-convnext_large_d_320.laion2B-s29B-b131K-ft-soup
export HF_ENDPOINT=https://hf-mirror.com
# Qwen3-VL-8B-Instruct (for 8B model)
huggingface-cli download --resume-download Qwen/Qwen3-VL-8B-Instruct \
--repo-type model \
--local-dir cache/models/Qwen3-VL-8B-Instruct
# Qwen3-VL-32B-Instruct (for 32B model)
huggingface-cli download --resume-download Qwen/Qwen3-VL-32B-Instruct \
--repo-type model \
--local-dir cache/models/Qwen3-VL-32B-Instruct
export HF_ENDPOINT=https://hf-mirror.com
# ClinFusion-8B
huggingface-cli download --resume-download Alibaba-DAMO-Academy/ClinFusion-8B \
--repo-type model \
--local-dir cache/models/ClinFusion-8B
# ClinFusion-32B
huggingface-cli download --resume-download Alibaba-DAMO-Academy/ClinFusion-32B \
--repo-type model \
--local-dir cache/models/ClinFusion-32B
The evaluation annotations (the four *.jsonl files) already ship with this repository under eval/Evaluation/datasets/. The media they reference β 2D images and native 3D CT volumes β are released separately on the Hub as ClinFusion-Eval-Data, split into 102 shards of mm_data.tar (509.25 GiB in total, since the Hub caps single files at 50 GB).
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download --resume-download Alibaba-DAMO-Academy/ClinFusion-Eval-Data \
--repo-type dataset \
--local-dir cache/data
cd cache/data
cat mm_data.tar.part-* | wc -c # expect 546797690880
cat mm_data.tar.part-* | tar xf - # -> cache/data/mm_data/
Media paths inside the jsonl files are relative (mm_data/...) and are resolved from the repository root, so link the extracted tree there:
cd ClinFusion
ln -s cache/data/mm_data mm_data
[!TIP] Reassembly needs ~1 TB of free space while the shards and the extracted tree coexist; delete
mm_data.tar.part-*once extraction succeeds to halve that. Both the download and the extraction can be resumed by re-running the same commands.
Fill in the API keys in eval/api_keys/api_key.ak.
Modify the base_url: in your yaml file to specify the base URL of the API.
Modify the python path python_executable: in your yaml file to specify the python path in your environment.
cd ClinFusion
| Benchmark Type | Command |
|---|---|
| πΌοΈ 2D & Textual | bash eval/tools/launch_eval_clinfusion_2d_general.sh |
| π§ 3D Volumetric | bash eval/tools/launch_eval_clinfusion_3d.sh |
| π Instruction-Following | bash eval/tools/launch_eval_clinfusion_if.sh |
[!TIP] 3D evaluation can be time-consuming. We provide a lite version for faster iteration. Switch by modifying
eval_data_pathineval/Evaluation/config_templates/clinfusion/config_3d_clinfusion.yaml:# Full version eval_data_path: "eval/Evaluation/datasets/3d_eval_data_ct-rate_amos_3d-rad.jsonl" # Lite version (recommended for quick testing) eval_data_path: "eval/Evaluation/datasets/3d_eval_data_ct-rate_amos_3d-rad_lite.jsonl"
This section explains how to run ClinFusion inference on your own data. Before running, modify python_executable: in your YAML config file to point to your Python environment.
All input data should be in JSONL format (one JSON object per line). Each entry must contain a messages field with the following structure:
{
"messages": {
"prompt": "Your question or instruction here.",
"image": ["path/to/image1.jpg", "path/to/image2.png"],
"nifti": ["path/to/volume.nii.gz"]
}
}
prompt (required): The text query or instruction for the model.image (optional): A list of paths to 2D image files (e.g., .jpg, .png). Omit this field for text-only or 3D-only inputs.nifti (optional): A list of paths to 3D NIfTI volumes (.nii.gz). Omit this field for text-only or 2D-only inputs.[!NOTE] You can include any additional fields (e.g.,
source,index,ground_truth) in each JSON object for your own bookkeeping β they will be preserved in the output file alongside the model's generation.
Prepare a JSONL file where each line contains a messages field with prompt and image:
{"messages": {"prompt": "What imaging modality was used in the diagnosis?\nA. X-ray\nB. Ultrasound\nC. MRI\nD. CT scan\n\nPut your final single letter choice in \\boxed{}.", "image": ["assets/example_data/PMC3610355_fig14.jpg"]}}
{"messages": {"prompt": "Where does the image represent in the body?", "image": ["assets/example_data/xmlab508_source.jpg"]}}
It is placed in eval/test/example_data_2d_general.jsonl.
Then create a YAML config file (see eval/test/test_clinfusion_2d_general.yaml as a template) and run:
cd ClinFusion
bash eval/tools/launch_inference.sh eval/test/test_clinfusion_2d_general.yaml
Key config fields to modify:
| Field | Description |
|---|---|
python_executable | Path to your Python binary |
input_data_path | Path to your JSONL data file |
final_output_path | Directory for output results |
model_path | Path to store the ClinFusion checkpoint |
For text-only questions (no images), simply omit both image and nifti fields:
{"messages": {"prompt": "A 41-year-old man presents to his primary care provider after seeing bright red blood in the toilet bowl after his last 2 bowel movements. He reports that he also noticed some blood mixed with his stool. The patient denies abdominal pain or any changes in his stool habits. He notes a weight loss of 8 pounds in the last 2 months with no changes in his diet or exercise habits. Which of the following is the most appropriate next step in management?\nA. Abdominal CT\nB. Colonoscopy\nC. Ultrasound of abdomen\nD. Barium enema"}}
It is placed in eval/test/example_data_2d_general.jsonl.
Run with the same 2D general config:
cd ClinFusion
bash eval/tools/launch_inference.sh eval/test/test_clinfusion_2d_general.yaml
For 3D CT/MRI volumes, use the nifti field instead of image. ClinFusion automatically converts NIfTI volumes into 2D slices for processing via nifti_to_image_slices.
{"messages": {"prompt": "What can be inferred about the left iliac artery from the CT image?\nA. There is a significant dilation\nB. It is obscured by nearby structures\nC. It extends into an intramural hematoma\nD. There is a discontinuity in the vessel wall", "nifti": ["assets/example_data/amos_0326.nii.gz"]}}
It is placed in eval/test/example_data_3d.jsonl.
Run with the 3D config:
cd ClinFusion
bash eval/tools/launch_inference.sh eval/test/test_clinfusion_3d.yaml
Results are saved to <final_output_path>/generation_output.jsonl. Each line contains your original input fields plus a model_generation field with the model's response:
{"messages": {"prompt": "...", "image": [...]}, "model_generation": "..."}
| Component | How to Customize | Reference |
|---|---|---|
| Aggregator | Replace aggregator_path in config | See Evaluation/aggregators/ |
| Evaluator | Replace evaluator_path in config | See Evaluation/evaluators/ |
| Dataset | Follow the format in Evaluation/datasets/ | MCQ context format supports RAG benchmarks |
| 3D Input | All models support NIfTI file input via nifti_to_image_slices | See InferenceEngine/models/utils.py |
ClinFusion-Eval supports evaluating any custom model via the model_type: "custom" configuration:
model_config:
# 1. Set model_type to 'custom'
model_type: "custom"
# 2. Path to your fine-tuned model checkpoint
model_path: "/path/to/checkpoint"
# 3. Path to your adapter file (must define MedEvalKitAdapter)
model_definition_path: "/path/to/medevalkit_adapter.py"
[!NOTE] Define a
medevalkit_adapter.pyin your model directory. Seetest/medevalkit_adapter.pyfor an example. Verify your implementation withpython test/test_custom.py.
Example: Custom model inference
You can refer to π Model Inference with Your Own Data.
Example: Custom model evaluation
You can follow Running ClinFusion-Eval to run evaluation with your custom model since ClinFusion is one kind of custom model.
Both launch_inference.sh and launch_eval.sh support single-node and multi-node environments seamlessly.
bash launch_inference.sh.RANK, WORLD_SIZE, MASTER_ADDR, etc.) are automatically configured. Just run the same command.[!IMPORTANT] For local models: Ensure
cluster_config.total_gpusin yourconfig.yamlis set to the total number of available GPUs across all nodes. For example, 2 nodes Γ 8 GPUs =16.
Workers are dynamically allocated for optimal GPU utilization:
total_gpus / gpus_per_workerlen(dataset) / batch_sizemin(1, 2)[!TIP] To force more GPU parallelism on small datasets, reduce
generation_config.batch_sizeβ this increases the effective worker count.
ClinFusion is part of our ongoing efforts in building reliable and trustworthy medical AI. We encourage you to check out our related works:
If you find ClinFusion useful in your research, please consider citing:
@article{yuan2026ClinFusion,
title={ClinFusion: A Vision-Centric Multimodal LLM System for Holistic Medical Understanding},
author={Yuan, Hangjie and Qian, Yichen and Tang, Zhiwei and Xu, Xianzhe and Wu, Lirong and Yang, Sicheng and Wang, Jinwang and Wang, Pengju and Zeng, Zhitao and Han, Yizeng and Xing, Yan and Luo, Shengxuan and Feng, Tao and Xie, Qing and Yao, Weigen and Yang, Yi and Liu, Zuozhu and Tang, Jiasheng and Wang, Shaocheng and Wang, Jitao and Dong, Jiahong and Chen, Weihua and Xu, Feng and Wang, Fan},
journal={arXiv preprint arXiv:2607.24743},
year={2026}
}
@article{yang2026ClinHallu,
title={ClinHallu: A Benchmark for Diagnosing Stage-Wise Hallucinations in Medical MLLM Reasoning},
author={Yang, Sicheng and Yuan, Hangjie and Zhang, Wenjun and Wang, Jinwang and Qian, Yichen and Chen, Weihua and Wang, Fan and Zhu, Lei},
journal={arXiv preprint arXiv:2606.14697},
year={2026}
}
ClinFusion is built upon the following excellent open-source projects:
Made with β€οΈ by Alibaba DAMO Academy
12 commits
Python
96.4%
Shell
3.6%