LAMDA-CL/Prism

GitHub: LAMDA-CL/Prism

PRISM 是一个多模态持续指令微调工具箱,为在序列任务上训练和评估多模态大语言模型提供了标准化、可复现的实验基础设施。

Stars: 32 | Forks: 6

# PRISM:多模态持续指令微调工具箱

📖 简介🧩 方法🚀 使用指南📄 许可证📧 联系方式

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绕过, 逆向工具