WSL2でLLaVAを試してみた
LLaVAのセットアップ
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
画像は指定せず、「ドラえもんとは」と聞いてみると、キター!
うーん、宮崎駿ではないのだよ。