LLaVA-1.5を試す
Visual instruction tuning towards large language and vision models with GPT-4 level capabilities.
pyenv&pyenv-virtualenv環境で。python-3.10.13。
$ pyenv virtualenv 3.10.13 llava
$ git clone https://github.com/haotian-liu/LLaVA llava && cd llava
$ pyenv local llava
$ pip install --upgrade pip
$ pip install -e .
モデルのダウンロード。手動でやらなくても初回実行時に勝手にダウンロードされるのでここはお好みで。個人的にはキャッシュディレクトリ(~/.cache/hugging_face/hub)に溜めたくないのと$HOMEとは別のディスクに保存したいのでこうしてる。PYTORCH_TRANSFORMERS_CACHEあたりも設定しておくと良い(参考: HuggingFaceのモデルが大きすぎたのでキャッシュの保存先を別のディスクに変更してみた)
$ cd /data/hf_models
# 事前にgit lfs installが必要
$ git clone https://huggingface.co/liuhaotian/llava-v1.5-7b
$ git clone https://huggingface.co/liuhaotian/llava-v1.5-13b
$ cd
レポジトリのディレクトリに戻って、まずはCLIで。
- モデルは7b
- 画像はLlaVAのサンプル
- 4ビット量子化
$ python -m llava.serve.cli \
--model-path /data/hf_models/llava-v1.5-7b \
--image-file "https://llava-vl.github.io/static/images/view.jpg" \
--load-4bit
USER: この画像について日本語で説明してください。
ASSISTANT: この写真は、湖の畔にある木製の歩道を描いた美しい景色です。歩道は湖の畔に沿って、山の裏にある湖に続く道です。周りには、豊かな樹木があり、山の裏には、山頂が見えます。また、湖の畔には、船が浮かんでいます。この景色は、自然の美しさと平和を感じさせるものです。
USER: この画像の場所に行く場合、注意すべきことはありますか?
ASSISTANT: この場所に行く場合、注意すべきことは、歩道が滑りやすいため、靴や靴下を履くことをおすすめします。また、周りには豊かな樹木があるため、注意深く歩くことが重要です。また、湖の畔には船が浮かんでいるため、注意深く湖の状態を確認し、安全に船を利用することが望ましいです。
VRAM消費は5〜8GBぐらいだった。
あとなぜか2回のやり取りのあと、以下でコケる。
RuntimeError: probability tensor contains either `inf`, `nan` or element < 0
量子化オプション無しで実行してみると、
- VRAM消費は14GBぐらい。対話を繰り返すとどんどん増えていって、
- 以下のようなメッセージが出て、どうも記憶が失われたり
Token indices sequence length is longer than the specified maximum sequence length for this model (2566 > 2048). Running this sequence through the model will result in indexing errors
- 同じことを延々と繰り返したり
- 最終的にCUDA out of memoryになったりした。
- 以下のようなメッセージが出て、どうも記憶が失われたり
8ビット量子化もためしてみたけどVRAM 12GBぐらいで、うちの環境だと一番安定して動いた感。
Web UIも試してみる。
コントローラを起動。
$ python -m llava.serve.controller --host 0.0.0.0 --port 10000 &
GradleのWebサーバを起動。
$ python -m llava.serve.gradio_web_server --controller http://localhost:10000 --model-list-mode reload &
モデルのworkerを起動。以下のようにモデルごとに別ポートでworkerを起動しておくと、Web UIからモデルを選択できる。
$ python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40001 --worker http://localhost:40001 --model-path /data/hf_models/llava-v1.5-7b --load-4bit &
$ python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40002 --worker http://localhost:40002 --model-path /data/hf_models/llava-v1.5-13b --load-4bit &
http://X.X.X.X:7860
にブラウザでアクセス。
CLIのようにコケることはあまりない(もしかしてCLIの出来があまりよくないのかな?)けども、やり取りを長く繰り返していくと、メモリ不足になったり、上の方で記載したようなエラーが起きたりはした。
ライセンスはこんな感じ。商用利用は出来ないので注意。
Usage and License Notices: The data and checkpoint is intended and licensed for research use only. They are also restricted to uses that follow the license agreement of LLaMA, Vicuna and GPT-4. The dataset is CC BY NC 4.0 (allowing only non-commercial use) and models trained using the dataset should not be used outside of research purposes.
ちょっと安定してない感あるけれども、うちの環境が良くないのかもしれない。
GPT-4Vが中々来ないので試してみたけど、画像→テキストは面白い。これとDALL-E-3を組み合わせるとかなりできることの幅が広がりそう。
日本語の文字の読み取りは出来ないっぽい。英数字だと結構認識してくれる。
日本語の文字の画像の学習データが殆どないんだと思う。
GGUF版が出た
GPUオフロードにも対応している様子
モデルをダウンロード
# 適当なディレクトリで
$ git lfs install
$ git clone https://huggingface.co/mys/ggml_llava-v1.5-7b
$ git clone https://huggingface.co/mys/ggml_llava-v1.5-13b
# llama.cppのクローンディレクトリで
$ make clean
$ make LLAMA_CUBLAS=1