モデル概要
モデル特徴
モデル能力
使用事例
🚀 MoE-LLaVA: 大規模ビジョン言語モデルのエキスパート混合モデル
MoE-LLaVAは、多モーダル学習において優れた性能を発揮する大規模ビジョン言語モデルです。少ないパラメータで高い性能を実現し、簡単なベースラインで多モーダルの相互作用を学習します。
MoE-LLaVA: Mixture of Experts for Large Vision-Language Models
もしこのプロジェクトが気に入ったら、GitHubでスター⭐をつけて最新の更新情報をゲットしましょう。
🚀 クイックスタート
MoE-LLaVAをすぐに試すには、以下の手順に従ってください。
デモの実行
Gradio Web UI
以下のコマンドでウェブデモを試すことができます。これにはMoE-LLaVAが現在サポートするすべての機能が含まれています。また、Huggingface Spacesにオンラインデモも提供しています。
# use phi2
deepspeed --include localhost:0 moellava/serve/gradio_web_server.py --model-path "LanguageBind/MoE-LLaVA-Phi2-2.7B-4e"
# use qwen
deepspeed --include localhost:0 moellava/serve/gradio_web_server.py --model-path "LanguageBind/MoE-LLaVA-Qwen-1.8B-4e"
# use stablelm
deepspeed --include localhost:0 moellava/serve/gradio_web_server.py --model-path "LanguageBind/MoE-LLaVA-StableLM-1.6B-4e"
CLI Inference
# use phi2
deepspeed --include localhost:0 moellava/serve/cli.py --model-path "LanguageBind/MoE-LLaVA-Phi2-2.7B-4e" --image-file "image.jpg"
# use qwen
deepspeed --include localhost:0 moellava/serve/cli.py --model-path "LanguageBind/MoE-LLaVA-Qwen-1.8B-4e" --image-file "image.jpg"
# use stablelm
deepspeed --include localhost:0 moellava/serve/cli.py --model-path "LanguageBind/MoE-LLaVA-StableLM-1.6B-4e" --image-file "image.jpg"
インストール
必要なパッケージをインストールするには、以下のコマンドを実行してください。
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 # enable PEP 660 support
pip install -e .
pip install -e ".[train]"
pip install flash-attn --no-build-isolation
# Below are optional. For Qwen model.
git clone https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
# Below are optional. Installing them might be slow.
# pip install csrc/layer_norm
# If the version of flash-attn is higher than 2.1.1, the following is not needed.
# pip install csrc/rotary
✨ 主な機能
🔥 少ないパラメータで高い性能
MoE-LLaVAは、わずか3Bの疎活性化パラメータで、様々な視覚理解データセットでLLaVA-1.5-7Bと同等の性能を示し、物体の幻覚ベンチマークではLLaVA-1.5-13Bを上回ります。
🚀 シンプルなベースラインで多モーダル相互作用を学習
シンプルなMoEチューニングステージを追加することで、8台のV100 GPUで2日以内にMoE-LLaVAのトレーニングを完了することができます。
📦 インストール
必要条件
- Python >= 3.10
- Pytorch == 2.0.1
- CUDA Version >= 11.7
- Transformers == 4.36.2
- 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 # enable PEP 660 support
pip install -e .
pip install -e ".[train]"
pip install flash-attn --no-build-isolation
# Below are optional. For Qwen model.
git clone https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
# Below are optional. Installing them might be slow.
# pip install csrc/layer_norm
# If the version of flash-attn is higher than 2.1.1, the following is not needed.
# pip install csrc/rotary
💻 使用例
基本的な使用法
以下のコードを使用して、ローカルでモデルを読み込むことができます。
deepspeed predict.py
import torch
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 = 'What is unusual about this image?'
model_path = 'LanguageBind/MoE-LLaVA-Phi2-2.7B-4e' # LanguageBind/MoE-LLaVA-Qwen-1.8B-4e or LanguageBind/MoE-LLaVA-StableLM-1.6B-4e
device = 'cuda'
load_4bit, load_8bit = False, False # FIXME: Deepspeed support 4bit or 8bit?
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 or stablelm
conv = conv_templates[conv_mode].copy()
roles = conv.roles
image_tensor = image_processor.preprocess(image, 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()
📚 ドキュメント
トレーニングと検証
トレーニングと検証の手順については、TRAIN.md と EVAL.md を参照してください。
カスタマイズ
MoE-LLaVAをカスタマイズする方法については、CUSTOM.md を参照してください。
可視化
可視化の手順については、VISUALIZATION.md を参照してください。
🤖 API
すべてのコードをオープンソースで公開しています。ローカルでモデル(例:LanguageBind/MoE-LLaVA
)を読み込むには、上記のコードスニペットを使用できます。
🐳 モデルズー
モデル | LLM | チェックポイント | 平均 | VQAv2 | GQA | VizWiz | SQA | T-VQA | POPE | MM-Bench | LLaVA-Bench-Wild | MM-Vet |
---|---|---|---|---|---|---|---|---|---|---|---|---|
MoE-LLaVA-1.6B×4-Top2 | 1.6B | LanguageBind/MoE-LLaVA-StableLM-1.6B-4e | 60.0 | 76.0 | 60.4 | 37.2 | 62.6 | 47.8 | 84.3 | 59.4 | 85.9 | 26.1 |
MoE-LLaVA-1.8B×4-Top2 | 1.8B | LanguageBind/MoE-LLaVA-Qwen-1.8B-4e | 60.2 | 76.2 | 61.5 | 32.6 | 63.1 | 48.0 | 87.0 | 59.6 | 88.7 | 25.3 |
MoE-LLaVA-2.7B×4-Top2 | 2.7B | LanguageBind/MoE-LLaVA-Phi2-2.7B-4e | 63.9 | 77.1 | 61.1 | 43.4 | 68.7 | 50.2 | 85.0 | 65.5 | 93.2 | 31.1 |
🙌 関連プロジェクト
- Video-LLaVA このフレームワークは、モデルが統一された視覚トークンを効率的に利用できるようにします。
- LanguageBind オープンソースの5つのモダリティの言語ベースの検索フレームワークです。
👍 謝辞
- LLaVA このプロジェクトは、このコードベースをベースに構築されており、効率的な大規模言語とビジョンアシスタントです。
📄 ライセンス
このプロジェクトの大部分は、LICENSE ファイルに記載されているApache 2.0ライセンスの下で公開されています。サービスは研究用のプレビューであり、非商用利用のみを目的としており、LLaMAのモデルライセンス、OpenAIによって生成されたデータの利用規約、およびShareGPTのプライバシーポリシーに従う必要があります。潜在的な違反があることを発見した場合は、お問い合わせください。
✏️ 引用
もしこの論文とコードがあなたの研究に役立った場合は、スター⭐をつけて引用 :pencil: していただけると幸いです。
@misc{lin2024moellava,
title={MoE-LLaVA: Mixture of Experts for Large Vision-Language Models},
author={Bin Lin and Zhenyu Tang and Yang Ye and Jiaxi Cui and Bin Zhu and Peng Jin and Junwu Zhang and Munan Ning and Li Yuan},
year={2024},
eprint={2401.15947},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
@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}
}
✨ スター履歴
🤝 貢献者









