見出し画像

Rinna-4Bのマルチモーダル会話モデルを試す

「Rinna-4B」のマルチモーダル会話モデルを試したのでまとめました。


1. Rinna-4Bのマルチモーダル会話モデル

rinna/bilingual-gpt-neox-4b-minigpt4」は、3.8Bパラメータの「GPT-NeoX」と「BLIP-2」を組み合わせて作成した、英日バイリンガルのマルチモーダル会話モデルです。

2. Colabでの実行

Colabでの実行手順は、次のとおりです。

(1) メニュー「編集→ノートブックの設定」で、「ハードウェアアクセラレータ」で「GPU」を選択。

(2) パッケージのインストール。

# パッケージのインストール
!git clone https://github.com/Vision-CAIR/MiniGPT-4.git
%cd ./MiniGPT-4
!git checkout 22d8888 # latest version as of July 31, 2023.
!wget https://huggingface.co/rinna/bilingual-gpt-neox-4b-minigpt4/resolve/main/customized_mini_gpt4.py
!wget https://huggingface.co/rinna/bilingual-gpt-neox-4b-minigpt4/resolve/main/checkpoint.pth

(3) environment.ymlに記述されてる依存パッケージもインストール。

!pip install accelerate==0.16.0
!pip install aiohttp==3.8.4
!pip install aiosignal==1.3.1
!pip install async-timeout==4.0.2
!pip install attrs==22.2.0
!pip install bitsandbytes==0.37.0
!pip install cchardet==2.1.7
!pip install chardet==5.1.0
!pip install contourpy==1.0.7
!pip install cycler==0.11.0
!pip install filelock==3.9.0
!pip install fonttools==4.38.0
!pip install frozenlist==1.3.3
!pip install huggingface-hub==0.13.4
!pip install importlib-resources==5.12.0
!pip install kiwisolver==1.4.4
!pip install matplotlib==3.7.0
!pip install multidict==6.0.4
!pip install openai==0.27.0
!pip install packaging==23.0
!pip install psutil==5.9.4
!pip install pycocotools==2.0.6
!pip install pyparsing==3.0.9
!pip install python-dateutil==2.8.2
!pip install pyyaml==6.0
!pip install regex==2022.10.31
!pip install tokenizers==0.13.2
!pip install tqdm==4.64.1
!pip install transformers==4.28.0
!pip install timm==0.6.13
!pip install spacy==3.5.1
!pip install webdataset==0.2.48
!pip install scikit-learn==1.2.2
!pip install scipy==1.10.1
!pip install yarl==1.8.2
!pip install zipp==3.14.0
!pip install omegaconf==2.3.0
!pip install opencv-python==4.7.0.72
!pip install iopath==0.1.10
!pip install decord==0.6.0
!pip install tenacity==8.2.2
!pip install peft
!pip install pycocoevalcap
!pip install sentence-transformers
!pip install umap-learn
!pip install notebook
!pip install gradio==3.24.1
!pip install gradio-client==0.0.8
!pip install wandb

(4) モデルとトークナイザーとVISプロセッサの準備。

from minigpt4.processors.blip_processors import Blip2ImageEvalProcessor
from customized_mini_gpt4 import CustomizedMiniGPT4
import torch

# モデルとトークナイザーの準備
model = CustomizedMiniGPT4(
    gpt_neox_model="rinna/bilingual-gpt-neox-4b"
)
tokenizer = model.gpt_neox_tokenizer
if torch.cuda.is_available():
    model = model.to("cuda")

# チェックポイントの読み込み
ckpt = torch.load("./checkpoint.pth", map_location="cpu")
model.load_state_dict(ckpt['model'], strict=False)

# VISプロセッサの準備
vis_processor = Blip2ImageEvalProcessor()

(5) プロンプトの準備。
speakerは "ユーザー" or "システム" です。<Img><ImageHere></Img> は画像のプレースホルダー になります。

# プロンプトの準備
prompt = [
    {
        "speaker": "ユーザー",
        "text": "<Img><ImageHere></Img>画像を説明して"
    },
]
prompt = [
    f"{uttr['speaker']}: {uttr['text']}"
    for uttr in prompt
]
prompt = "\n".join(prompt)
prompt = (
    prompt
    + "\n"
    + "システム: "
)
print(prompt)

(6) 画像の埋め込みの準備。

import requests
from PIL import Image

# 画像の埋め込みの準備
image_url = "https://huggingface.co/rinna/bilingual-gpt-neox-4b-minigpt4/resolve/main/sample.jpg"
raw_image = Image.open(requests.get(image_url, stream=True).raw).convert("RGB")
image = vis_processor(raw_image).unsqueeze(0).to(model.device)
image_emb = model.encode_img(image)

今回は公式のサンプル画像を使いました。

(7) 入力の埋め込みの準備。
プロンプトと画像の埋め込みから入力の埋め込みを生成します。

# 入力埋め込みの準備
embs = model.get_context_emb(prompt, [image_emb])

(8) 推論の実行。
画像とプロンプトに対する応答が返されます。

# 推論の実行
output_ids = model.gpt_neox_model.generate(
    inputs_embeds=embs,
    max_new_tokens=512,
    do_sample=True,
    temperature=1.0,
    top_p=0.85,
    pad_token_id=tokenizer.pad_token_id,
    bos_token_id=tokenizer.bos_token_id,
    eos_token_id=tokenizer.eos_token_id
)
output = tokenizer.decode(output_ids.tolist()[0], skip_special_tokens=True)
print(output)
raw_image

パソコンの前で猫が寝ている




この記事が気に入ったらサポートをしてみませんか?