見出し画像

WSL2でLLaVAを試してみた

LLaVAのセットアップ

GitHub - haotian-liu/LLaVA: [NeurIPS 2023 Oral] Visual Instruction Tuning: LLaVA (Large Language-and-Vision Assistant) built towards multimodal GPT-4 level capabilities.

LLaVAをWSL2で試してみました。
いつものおまじない。

$ python3 -m venv llava
$ source llava/bin/activate
$ cd llava

続いて、git cloneです。

$ git clone https://github.com/haotian-liu/LLaVA.git
$ cd LLaVA

パッケージのインストール

$ pip install --upgrade pip
$ pip install -e .

Gradio Web UIを立ち上げる

コントローラとWebサーバを立ち上げます。

$ python -m llava.serve.controller --host 0.0.0.0 --port 10000
$ python -m llava.serve.gradio_web_server --controller http://localhost:10000 --model-list-mode reload

ブラウザで http://localhost:7860 にアクセスすると、以下の画面が表示されます。

ワーカーの立ち上げ

続いて、推論するワーカーを立ち上げる。
24GB未満のGPUだとうまく動かないよ、とある。RTX 4090 Laptopのため16GBしかないけれども、何も考えずに試してみる。

$ python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path liuhaotian/llava-v1.5-13b

初回起動は、モデルのダウンロードに時間を要するけれども、ワーカーは立ち上がった模様。

[2023-10-17 01:42:30,534] [INFO] [real_accelerator.py:110:get_accelerator] Setting ds_accelerator to cuda (auto detect)
2023-10-17 01:42:31 | INFO | model_worker | args: Namespace(host='0.0.0.0', port=40000, worker_address='http://localhost:40000', controller_address='http://localhost:10000', model_path='liuhaotian/llava-v1.5-13b', model_base=None, model_name=None, device='cuda', multi_modal=False, limit_model_concurrency=5, stream_interval=1, no_register=False, load_8bit=False, load_4bit=False)
2023-10-17 01:42:31 | INFO | model_worker | Loading the model llava-v1.5-13b on worker 39a43f ...
Loading checkpoint shards:   0%|                                                                                                                                                                      | 0/3 [00:00<?, ?it/s]
Loading checkpoint shards:  33%|████████████████████████████████████████████████████▋                                                                                                         | 1/3 [00:10<00:21, 10.82s/it]
Loading checkpoint shards:  67%|█████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                                    | 2/3 [00:18<00:08,  8.92s/it]
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:21<00:00,  6.38s/it]
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:21<00:00,  7.25s/it]
2023-10-17 01:42:55 | ERROR | stderr |
2023-10-17 01:43:00 | INFO | model_worker | Register to controller
2023-10-17 01:43:01 | ERROR | stderr | INFO:     Started server process [48261]
2023-10-17 01:43:01 | ERROR | stderr | INFO:     Waiting for application startup.
2023-10-17 01:43:01 | ERROR | stderr | INFO:     Application startup complete.
2023-10-17 01:43:01 | ERROR | stderr | INFO:     Uvicorn running on http://0.0.0.0:40000 (Press CTRL+C to quit)

試しに推論して見るとcuda.OutOfMemory。やはりダメか・・・。

2023-10-17 01:44:35 | ERROR | stderr | torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 136.00 MiB (GPU 0; 15.99 GiB total capacity; 14.85 GiB already allocated; 0 bytes free; 15.01 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
2023-10-17 01:44:46 | INFO | model_worker | Send heart beat. Models: ['llava-v1.5-13b']. Semaphore: Semaphore(value=5, locked=False). global_counter: 1

気を取り直して、8bit量子化で立ち上げてみる。

$ python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path liuhaotian/llava-v1.5-13b --load-8bit

画像は指定せず、「ドラえもんとは」と聞いてみると、キター!

ドラえもんは、日本の漫画家・宮崎駿によって作られたキャラクターで、タイムトラベルをするロボットのような存在です。彼は、自分の胸に持っているタイムトラベル機能を使って、過去や未来へと旅をすることができます。ドラえもんは、友達のノビタと一緒に、様々な冒険を繰り広げます。彼らは、悪い者たちから世界を守るために、時々危険な状況に立ち向かっています。ドラえもんは、子供たちに愛される人気キャラクターです。

LLaVAが生成

うーん、宮崎駿ではないのだよ。

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