Project Icon

MoE-LLaVA

高效视觉语言模型的新方向

MoE-LLaVA项目采用混合专家技术,实现了高效的大规模视觉语言模型。该模型仅使用3B稀疏激活参数就达到了与7B参数模型相当的性能,在多项视觉理解任务中表现优异。项目提供简单的基线方法,通过稀疏路径学习多模态交互,可在8张A100 GPU上1天内完成训练。MoE-LLaVA为构建高性能、低参数量的视觉语言模型探索了新的方向。

MoE-LLaVA: 大型视觉语言模型的专家混合系统

如果您喜欢我们的项目,请在GitHub上给我们一个星标 ⭐ 以获取最新更新。

hf_space Replicate演示和云API 在Colab中打开 hf_space arXiv youtube 机器之心 许可证 访问量 GitHub问题 GitHub已关闭问题

💡 我还有其他可能引起您兴趣的视觉语言项目 ✨。

Open-Sora-Plan
github github

Video-LLaVA: 通过对齐后投影学习统一视觉表示
林斌, 叶阳, 朱斌, 崔嘉熙, 宁木南, 金鹏, 袁黎
github github arXiv

LanguageBind: 通过基于语言的语义对齐将视频-语言预训练扩展到N模态
朱斌, 林斌, 宁木南, 闫洋, 崔嘉熙, 王鸿发, 庞亚天, 江文豪, 张俊武, 李宗威, 张万才, 李志峰, 刘伟, 袁黎
github github arXiv

📣 新闻

  • ⏳⏳⏳ 正在训练一个在更高图像分辨率(如768 × 768)下的更强大模型。
  • ⏳⏳⏳ 正在训练MoE-LLaVA-Qwen1.5以更好地支持中文。
  • [2024.03.16] 🎉 我们发布了所有第二阶段模型,请查看我们的模型库
  • [2024.02.03] 🎉 我们发布了一个更强大的MoE-LLaVA-StableLM。通过使用2.0B稀疏激活参数,其平均性能接近LLaVA-1.5-7B,请查看我们的模型库
  • [2024.02.02] 🤝 欢迎体验由@camenduru创建的Replicate演示和云API在Colab中打开,他慷慨地支持了我们的研究!
  • [2024.02.01] 🔥 无法访问HF的用户现在可以通过模型范围下载模型,请查看我们的模型库
  • [2024.01.30] 🔥 我们发布了一个更强大的MoE-LLaVA-Phi2。通过使用3.6B稀疏激活参数,其平均性能超过了LLaVA-1.5-7B,请查看我们的模型库
  • [2024.01.27] 🤗 Hugging Face演示所有代码和数据集现已可用!欢迎关注 👀 本仓库以获取最新更新。

😮 亮点

MoE-LLaVA在多模态学习中表现出色。

🔥 高性能,但参数更少

  • 仅使用3B稀疏激活参数,MoE-LLaVA在各种视觉理解数据集上表现与LLaVA-1.5-7B相当,甚至在物体幻觉基准测试中超过了LLaVA-1.5-13B。

🚀 简单基线,通过稀疏路径学习多模态交互。

  • 通过添加一个简单的MoE调优阶段,我们可以在8个A100 GPU上在1天内完成MoE-LLaVA的训练。

🤗 演示

Gradio Web UI

强烈推荐通过以下命令试用我们的Web演示,它包含了MoE-LLaVA当前支持的所有功能。我们还在Huggingface Spaces提供了在线演示

# 使用phi2
deepspeed --include localhost:0 moellava/serve/gradio_web_server.py --model-path "LanguageBind/MoE-LLaVA-Phi2-2.7B-4e" 
# 使用qwen
deepspeed --include localhost:0 moellava/serve/gradio_web_server.py --model-path "LanguageBind/MoE-LLaVA-Qwen-1.8B-4e" 
# 使用stablelm
deepspeed --include localhost:0 moellava/serve/gradio_web_server.py --model-path "LanguageBind/MoE-LLaVA-StableLM-1.6B-4e" 

CLI推理

# 使用phi2
deepspeed --include localhost:0 moellava/serve/cli.py --model-path "LanguageBind/MoE-LLaVA-Phi2-2.7B-4e"  --image-file "image.jpg"
# 使用qwen
deepspeed --include localhost:0 moellava/serve/cli.py --model-path "LanguageBind/MoE-LLaVA-Qwen-1.8B-4e"  --image-file "image.jpg"
# 使用stablelm
deepspeed --include localhost:0 moellava/serve/cli.py --model-path "LanguageBind/MoE-LLaVA-StableLM-1.6B-4e"  --image-file "image.jpg"

🐳 模型库

模型激活参数Transformers(HF)ModelScope(HF)平均VQAv2GQAVizWizSQA-IMGT-VQAPOPEMMEMM-BenchMM-Vet
MoE-LLaVA-1.6B×4-Top22.0B🤗LanguageBind/MoE-LLaVA-StableLM-1.6B-4ePKU-YuanLab/MoE-LLaVA-StableLM-1.6B-4e57.376.760.336.262.650.185.71318.160.226.9
MoE-LLaVA-1.8B×4-Top22.2B🤗LanguageBind/MoE-LLaVA-Qwen-1.8B-4ePKU-YuanLab/MoE-LLaVA-Qwen-1.8B-4e56.776.261.532.663.148.087.01291.659.625.3
MoE-LLaVA-2.7B×4-Top23.6B🤗LanguageBind/MoE-LLaVA-Phi2-2.7B-4ePKU-YuanLab/MoE-LLaVA-Phi2-2.7B-4e61.177.661.443.968.551.486.31423.065.234.3
MoE-LLaVA-1.6B×4-Top2-3842.0B🤗LanguageBind/MoE-LLaVA-StableLM-1.6B-4e-384PKU-YuanLab/MoE-LLaVA-StableLM-1.6B-4e-38460.078.661.540.563.954.385.91335.763.332.3
MoE-LLaVA-2.7B×4-Top2-3843.6B🤗LanguageBind/MoE-LLaVA-Phi2-2.7B-4e-384PKU-YuanLab/MoE-LLaVA-Phi2-2.7B-4e-38462.979.962.643.770.357.085.71431.368.035.9
LLaVA-1.57B🤗liuhaotian/llava-v1.5-7b-62.078.562.050.066.858.285.91510.764.330.5

🚨 请查看 https://github.com/PKU-YuanGroup/MoE-LLaVA/issues/27。

第二阶段模型 | 模型 | 检查点 | |----------|-----------| | MoE-LLaVA-1.6B×4-Top2 | [LanguageBind/MoE-LLaVA-StableLM-Stage2](https://huggingface.co/LanguageBind/MoE-LLaVA-StableLM-Stage2) | | MoE-LLaVA-1.6B×4-Top2-384 | [LanguageBind/MoE-LLaVA-StableLM-Stage2-384](https://huggingface.co/LanguageBind/MoE-LLaVA-StableLM-Stage2-384) | | MoE-LLaVA-1.8B×4-Top2 | [LanguageBind/MoE-LLaVA-Qwen-Stage2](https://huggingface.co/LanguageBind/MoE-LLaVA-Qwen-Stage2) | | MoE-LLaVA-2.7B×4-Top2 | [LanguageBind/MoE-LLaVA-Phi2-Stage2](https://huggingface.co/LanguageBind/MoE-LLaVA-Phi2-Stage2) | | MoE-LLaVA-2.7B×4-Top2-384 | [LanguageBind/MoE-LLaVA-Phi2-Stage2-384](https://huggingface.co/LanguageBind/MoE-LLaVA-Phi2-Stage2-384) |
预训练模型
模型检查点
MoE-LLaVA-1.6B×4-Top2LanguageBind/MoE-LLaVA-StableLM-Pretrain
MoE-LLaVA-1.6B×4-Top2-384LanguageBind/MoE-LLaVA-StableLM-384-Pretrain
MoE-LLaVA-1.8B×4-Top2LanguageBind/MoE-LLaVA-Qwen-Pretrain
MoE-LLaVA-2.7B×4-Top2LanguageBind/MoE-LLaVA-Phi2-Pretrain
MoE-LLaVA-2.7B×4-Top2-384LanguageBind/MoE-LLaVA-Phi2-384-Pretrain

⚙️ 环境要求和安装

我们建议的环境要求如下:

  • Python == 3.10
  • Pytorch == 2.0.1
  • CUDA 版本 >= 11.7
  • Transformers == 4.37.0
  • Tokenizers==0.15.1
  • 安装所需的包:
git clone https://github.com/PKU-YuanGroup/MoE-LLaVA
cd MoE-LLaVA
conda create -n moellava python=3.10 -y
conda activate moellava
pip install --upgrade pip  # 启用 PEP 660 支持
pip install -e .
pip install -e ".[train]"
pip install flash-attn --no-build-isolation

# 以下是可选的。针对 Qwen 模型。
git clone https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
# 以下是可选的。安装它们可能会很慢。
# pip install csrc/layer_norm
# 如果 flash-attn 的版本高于 2.1.1,则不需要以下操作。
# pip install csrc/rotary

[!警告]

🚨 我们发现使用 flash attention2 会导致性能下降。

🗝️ 训练和验证

训练和验证的说明在 TRAIN.mdEVAL.md 中。

💡 自定义你的 MoE-LLaVA

说明在 CUSTOM.md 中。

😍 可视化

说明在 VISUALIZATION.md 中。

🤖 API

我们开源了所有代码。 如果你想在本地加载模型(例如 LanguageBind/MoE-LLaVA-Phi2-2.7B-4e),你可以使用以下代码片段。

使用以下命令运行代码。

deepspeed --include localhost:0 predict.py
import torch
from PIL import Image
from moellava.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN
from moellava.conversation import conv_templates, SeparatorStyle
from moellava.model.builder import load_pretrained_model
from moellava.utils import disable_torch_init
from moellava.mm_utils import tokenizer_image_token, get_model_name_from_path, KeywordsStoppingCriteria

def main():
    disable_torch_init()
    image = 'moellava/serve/examples/extreme_ironing.jpg'
    inp = '这张图片有什么不寻常之处?'
    model_path = 'LanguageBind/MoE-LLaVA-Phi2-2.7B-4e'  # LanguageBind/MoE-LLaVA-Qwen-1.8B-4e 或 LanguageBind/MoE-LLaVA-StableLM-1.6B-4e
    device = 'cuda'
    load_4bit, load_8bit = False, False  # 待修复:Deepspeed 是否支持 4 位或 8 位?
    model_name = get_model_name_from_path(model_path)
    tokenizer, model, processor, context_len = load_pretrained_model(model_path, None, model_name, load_8bit, load_4bit, device=device)
    image_processor = processor['image']
    conv_mode = "phi"  # qwen 或 stablelm
    conv = conv_templates[conv_mode].copy()
    roles = conv.roles
    image_tensor = image_processor.preprocess(Image.open(image).convert('RGB'), return_tensors='pt')['pixel_values'].to(model.device, dtype=torch.float16)

    print(f"{roles[1]}: {inp}")
    inp = DEFAULT_IMAGE_TOKEN + '\n' + inp
    conv.append_message(conv.roles[0], inp)
    conv.append_message(conv.roles[1], None)
    prompt = conv.get_prompt()
    input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda()
    stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2
    keywords = [stop_str]
    stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids)

    with torch.inference_mode():
        output_ids = model.generate(
            input_ids,
            images=image_tensor,
            do_sample=True,
            temperature=0.2,
            max_new_tokens=1024,
            use_cache=True,
            stopping_criteria=[stopping_criteria])

    outputs = tokenizer.decode(output_ids[0, input_ids.shape[1]:], skip_special_tokens=True).strip()
    print(outputs)

if __name__ == '__main__':
    main()

🙌 相关项目

  • Video-LLaVA 这个框架使模型能够高效地利用统一的视觉标记。
  • LanguageBind 一个开源的基于语言的五模态检索框架。

👍 致谢

  • LLaVA 我们基于此代码库构建,它是一个高效的大型语言和视觉助手。

🔒 许可证

  • 本项目的大部分内容根据 LICENSE 文件中的 Apache 2.0 许可证发布。
  • 本服务是一个仅供非商业用途的研究预览,受 LLaMA 模型许可证、OpenAI 生成数据的使用条款以及 ShareGPT 的隐私惯例约束。如果您发现任何潜在违规行为,请与我们联系。

✏️ 引用

如果您发现我们的论文和代码对您的研究有用,请考虑给予星标 :star: 和引用 :pencil:。

@article{lin2024moe,
  title={MoE-LLaVA: Mixture of Experts for Large Vision-Language Models},
  author={Lin, Bin and Tang, Zhenyu and Ye, Yang and Cui, Jiaxi and Zhu, Bin and Jin, Peng and Zhang, Junwu and Ning, Munan and Yuan, Li},
  journal={arXiv preprint arXiv:2401.15947},
  year={2024}
}
@article{lin2023video,
  title={Video-LLaVA: Learning United Visual Representation by Alignment Before Projection},
  author={Lin, Bin and Zhu, Bin and Ye, Yang and Ning, Munan and Jin, Peng and Yuan, Li},
  journal={arXiv preprint arXiv:2311.10122},
  year={2023}
}

✨ 星标历史

星标历史

🤝 贡献者

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号