오늘 모델 리뷰는 멀티 모달 중의 MILVG의 imp입니다. 3b 크기로 상당히 좋은 퀄리티의 멀티 모달 성능을 내고 있습니다. 라바와 비슷한 방식으로 만들어진 거 같고, 이미지 인코더로는 구글의 siglip과 sLLM으로 ms의 phi2가 사용되서 두개 합쳐서 3b 밖에 안되는 크기를 자랑합니다. 양자화가 되지 않은채로 GPU 사용량이 8기가를 넘지 않습니다. 시스템 램 또한 2기가 정도 밖에 되지 않아 가볍게 사용 할 수 있습니다.
개발자의 소개글
https://huggingface.co/MILVLG/imp-v1-3b
https://github.com/MILVLG/imp
The Imp 프로젝트는 강력한 멀티모달 소형 언어 모델(MSLMs) 패밀리를 제공하는 것을 목표로 합니다. 우리의 imp-v1-3b는 3B 파라미터만으로도 강력한 MSLM으로, 이는 작지만 강력한 SLM Phi-2(2.7B)와 강력한 시각 인코더 SigLIP(0.4B)를 기반으로 하고 있으며, LLaVA-v1.5 트레이닝 세트에서 훈련되었습니다.
아래 표에서 보듯이, imp-v1-3b는 유사한 모델 크기의 대조 모델을 크게 능가하며, 다양한 멀티모달 벤치마크에서 강력한 LLaVA-7B 모델보다 조금 더 우수한 성능을 달성합니다.
우리는 모델 가중치를 공개하고 아래에서 모델을 실행하는 예제를 제공합니다. 자세한 기술 보고서와 해당 훈련/평가 코드는 곧 GitHub 레포지토리에서 공개될 예정입니다. 우리는 지속적으로 모델을 개선하고 모델 성능을 더욱 향상시키기 위해 다음 버전을 공개할 것입니다 :)
!pip install -U transformers
!pip install -q pillow accelerate einops
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from PIL import Image
torch.set_default_device("cuda")
model = AutoModelForCausalLM.from_pretrained(
"MILVLG/imp-v1-3b",
torch_dtype=torch.float16,
device_map="auto",
trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(
"MILVLG/imp-v1-3b",
trust_remote_code=True
)
input_ids = tokenizer(text, return_tensors="pt").input_ids
image_tensor = model.image_preprocess(image)
output_ids = model.generate(
input_ids,
max_new_tokens=1000,
images=image_tensor,
use_cache=True)[0]
print(tokenizer.decode(output_ids[input_ids.shape[1]:], skip_special_tokens=True).strip())
사용후기
아주 복잡한 세미콘덕터의 그림을 넣었는데 무슨 내용인지는 모르겠지만 잘 생성하는 것을 확인 할 수 있습니다.
https://github.com/hypro2/step-by-step-colab/blob/main/MILVLG_imp_v1_3b_vanilla_colab.ipynb