LAMDA-CL/Prism
GitHub: LAMDA-CL/Prism
PRISM 是一个多模态持续指令微调工具箱,为在序列任务上训练和评估多模态大语言模型提供了标准化、可复现的实验基础设施。
Stars: 32 | Forks: 6
# PRISM:多模态持续指令微调工具箱
**PRISM** 是一个即插即用、可复现的工具箱,用于在**持续指令微调 (MCIT)** 下训练和评估**多模态大语言模型 (MLLMs)**。单一的入口点 (`run.py`) 负责协调跨多个基准测试和持续学习方法的序列任务训练、推理和评估。
如果您使用了本代码库,请引用:
```
@article{tang2026prism,
title={Prism: A Plug-in Reproducible Infrastructure for Scalable Multimodal Continual Instruction Tuning},
author={Jun-Tao Tang and Yu-Cheng Shi and Zhen-Hao Xie and Da-Wei Zhou},
year={2026},
journal={arXiv preprint arXiv:2605.26110},
}
@inproceedings{xie2026same,
title={SAME: Stabilized Mixture-of-Experts for Multimodal Continual Instruction Tuning},
author={Xie, Zhen-Hao and Tang, Jun-Tao and Shi, Yu-Cheng and Ye, Han-Jia and Zhan, De-Chuan and Zhou, Da-Wei},
booktitle={ICML},
year={2026}
}
```
## 📖 简介
多模态大语言模型 (MLLMs) 将多种视觉和视觉-语言任务统一为共享的指令跟随格式。然而在实际部署中,数据和指令是以数据流的形式到达的:模型必须按顺序学习新任务,同时不能遗忘先前掌握的能力。在这种设置下,标准的微调会导致严重的灾难性遗忘问题。
**多模态持续指令微调 (MCIT)** 通过在一系列指令微调阶段训练 MLLMs,同时保持在先前任务上的性能,从而解决了这一问题。PRISM 标准化了这一工作流程——包括基准定义、方法集成、checkpoint 存储布局以及评估——使得各种 MCIT 方法能够在统一的基础架构下进行比较和扩展。
## 🧩 已实现的方法
每个方法均通过 `--method ` 进行选择(对应 `method/custom//` 下的文件夹)。
| 缩写 | `--method` | 论文 |
| :--- | :--- | :--- |
| HiDe-LLaVA | `hide_llava` | [HiDe-LLaVA: Hierarchical Decoupling for Continual Instruction Tuning of Multimodal Large Language Model](https://arxiv.org/abs/2503.12941) |
| Replay+LoRA | `replay_lora` | [LoRA: Low-Rank Adaptation of Large Language Models](https://arxiv.org/abs/2106.09685) |
| LoRA | `ft_lora` | [LoRA: Low-Rank Adaptation of Large Language Models](https://arxiv.org/abs/2106.09685) |
| O-LoRA | `olora` | [Orthogonal Subspace Learning for Language Model Continual Learning](https://arxiv.org/abs/2310.14152) |
| SMoLoRA | `smolora` | [SMoLoRA: Exploring and Defying Dual Catastrophic Forgetting in Continual Visual Instruction Tuning](https://arxiv.org/abs/2411.13949) |
| MoELoRA | `moelora` | [CoIN: A Benchmark of Continual Instruction tuNing for Multimodel Large Language Model](https://arxiv.org/abs/2403.08350) |
| CL-MoE | `clmoe` | [CL-MoE: Enhancing Multimodal Large Language Model with Dual Momentum Mixture-of-Experts for Continual Visual Question Answering](https://arxiv.org/abs/2503.00413) |
| ModalPrompt | `modal_prompt` | [ModalPrompt: Towards Efficient Multimodal Continual Instruction Tuning with Dual-Modality Guided Prompt](https://arxiv.org/abs/2410.05849) |
| EWC | `ewc` | [Overcoming catastrophic forgetting in neural networks](https://arxiv.org/abs/1612.00796) |
| DisCo | `disco` | [Federated Continual Instruction Tuning](https://arxiv.org/abs/2503.12897) |
| SAME | `same` | [SAME: Stabilized Mixture-of-Experts for Multimodal Continual Instruction Tuning](https://arxiv.org/abs/2602.01990) |
| Zero-shot | `zeroshot` | [Visual Instruction Tuning](https://arxiv.org/abs/2304.08485) |
要添加新方法,请实现 `method/custom//integration.py` 并使用 `@CLMethodFactory.register("your_method")` 进行注册。
## 🚀 使用指南
### 预训练权重
从各代码库的 **Model Zoo** 下载,然后在 `config/paths/llava_paths.py` 或 `config/paths/internvl_paths.py` 中设置路径。通过 `config/run_config.py` 中的 `backbone` 选择底层模型(`llava` 或 `internvl`)。
- [**LLaVA**](https://github.com/haotian-liu/LLaVA) — `llava-v1.5-7b`
- [**InternVL**](https://github.com/OpenGVLab/InternVL/tree/main/internvl_chat_llava) — `InternVL-Chat-ViT-6B-Vicuna-7B`
您可以在 `config/backbone/` 和 `backbone/` 下接入额外的底层模型,然后在 `config/backbone/registry.py` 中注册它们。
### 数据集
PRISM 目前支持三个基准测试:
| 基准测试 | `--benchmark` | 任务数 | 参考 |
| :--- | :--- | :---: | :--- |
| **CoIN** | `coin` | 8 | [论文](https://arxiv.org/abs/2403.08350) · [基准测试](https://github.com/zackschen/CoIN/tree/CoIN) |
| **UCIT** | `ucit` | 6 | [论文](https://arxiv.org/abs/2503.12941) · [基准测试](https://github.com/Ghy0501/HiDe-LLaVA) |
| **TriGap** | `trigap` | 10 | [论文](https://arxiv.org/abs/2602.01990) · [基准测试](https://huggingface.co/datasets/JuntaoTang/TriGap) |
一个基准测试通常包含一个**图像文件夹**和一个**指令文件夹**。指令文件夹中的 JSON 文件会引用图像路径,因此您在磁盘上的目录结构必须与这些路径相匹配。
接着,在 `config/benchmarks/.py` 中设置基准测试路径(例如 `TriGap.py` 中的 `TRIGAP_IMAGE_DIR` 和 `TRIGAP_INSTRUCTION_DIR`)。
为了进行快速实验,您可以使用较小的**子数据集**:自行对指令 JSON 进行采样,保存时添加 `_sub` 后缀(例如 `train_sub.json`),并在 `config/run_config.py` 中设置 `"use_sub_dataset": true`。
您可以在 `config/benchmarks/` 下添加自定义基准测试,并在 `config/benchmarks/__init__.py` 中注册它们。
### 环境配置(一条命令)
如果您使用的是 **NVIDIA RTX 5090** GPU(我们测试的环境),在代码库根目录下运行一条命令即可完成所有设置:
```
bash scripts/setup_env.sh
```
这将创建 conda 环境 **`prism`**(如果不存在),并安装 torch 2.8 + cu128、训练/评估依赖项、flash-attn,然后运行 `pip install -e .`。
对于其他 GPU 或 CUDA 版本,您可能需要调整 PyTorch、flash-attn 及相关库。请参阅 [`requirements/README.md`](requirements/README.md) 了解更多选项(例如针对旧版 CUDA 环境使用 `TORCH_REQUIREMENTS=requirements/torch-cu118.txt`、`FLASH_ATTN_WHEEL`、`SKIP_FLASH_ATTN`)。
激活并验证:
```
conda activate prism
python -c "import torch; import transformers; import deepspeed; print(torch.__version__, transformers.__version__)"
```
### 路径与配置
在 `config/paths/` 下编辑底层模型路径,并在 `config/benchmarks/` 下编辑基准测试根目录。通过 `config/run_config.py` 调整运行设置。
配置完成后,在单个任务上运行快速的 **zero-shot** 推理,以检查权重、数据路径和 GPU(`zeroshot` 仅使用基础的 MLLM checkpoint):
```
python run.py infer 0 --method zeroshot
```
然后运行持续训练和评估:
```
python run.py train 0 1 2
python run.py infer 0 1 2
```
## 📄 许可证
本项目基于 [MIT 许可证](LICENSE) 发布。
## 🙏 致谢
我们感谢以下项目为 PRISM 提供了基准测试和参考实现:
- [UCIT](https://github.com/Ghy0501/HiDe-LLaVA)
- [CoIN](https://github.com/zackschen/CoIN/tree/CoIN)
- [MCITlib](https://github.com/Ghy0501/MCITlib)
## 📧 联系方式
如果您有任何问题,请随时通过创建 issue 来提出新功能,或联系作者:Jun-Tao Tang ([juntao.tang@smail.nju.edu.cn](mailto:juntao.tang@smail.nju.edu.cn))、Yu-Cheng Shi ([231250034@smail.nju.edu.cn](mailto:231250034@smail.nju.edu.cn)) 以及 Da-Wei Zhou ([zhoudw@lamda.nju.edu.cn](mailto:zhoudw@lamda.nju.edu.cn))。祝您编码愉快。
📖 简介 • 🧩 方法 • 🚀 使用指南 • 📄 许可证 • 📧 联系方式
标签:人工智能, 凭据扫描, 多模态大语言模型, 持续学习, 指令微调, 机器学习工具库, 灾难性遗忘, 用户模式Hook绕过, 逆向工具