Closed6

AppleのFerretを試す

kun432kun432

時間の都合上、7Bで。RTX4090。

$ git clone https://github.com/apple/ml-ferret && cd ml-ferret
$ pyenv virtualenv 3.11.5 ml-ferret
$ pyenv local ml-ferret
$ pip install --upgrade pip
$ pip install -e .
$ pip install pycocotools
$ pip install protobuf==3.20.0

以下は学習させる場合に限り必要になるみたいだけど、とりあえず入れておく。

$ pip install ninja
$ pip instal wheel     # flash-attnのインストール時に怒られるので入れておく
$ pip install flash-attn --no-build-isolation

Vicunaのcheckpointsが必要になるようなので落としてくる。v1.5が最新のようだけども、一旦READMEの内容に沿ってv1.3で。

$ git lfs install
$ git clone https://huggingface.co/lmsys/vicuna-7b-v1.3

次にferretの重みの差分を落としてくる。

$ wget https://docs-assets.developer.apple.com/ml-research/models/ferret/ferret-7b/ferret-7b-delta.zip
$ unzip ferret-7b-delta.zip

以下が、

なお、デモを利用するにはVicunaのウェイトとFerretの差分データを元にFerretのウェイトを生成する手順が必要とのことです。

にあたるのかな?とりあえずやってみる。--baseでvicunaのモデルディレクトリ、--deltaでferretの重みの差分ディレクトリ、--targetはferretのウェイトが生成されるパスっぽい。

$ python -m ferret.model.apply_delta \
    --base ./vicuna-7b-v1.3 \
    --target ./ferret-7b-v1.3 \
    --delta ./ferret-7b-delta

いけたっぽい。

[2023-12-25 13:03:21,073] [INFO] [real_accelerator.py:110:get_accelerator] Setting ds_accelerator to cuda (auto detect)
Loading base model
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████| 2/2 [00:25<00:00, 12.78s/it]
Loading delta
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████| 2/2 [00:03<00:00,  1.92s/it]
Applying delta
Applying delta: 100%|████████████████████████████████████████████████████████████████| 341/341 [00:01<00:00, 212.93it/s]
Saving target model

ではデモを動かしてみる

$ python -m ferret.serve.controller --host 0.0.0.0 --port 10000 &
$ python -m ferret.serve.gradio_web_server --controller http://localhost:10000 --model-list-mode reload --add_region_feature  &
$ CUDA_VISIBLE_DEVICES=0 python -m ferret.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path ./ferret-7b-v1.3 --add_region_feature  &

ブラウザで7860ポートにアクセスしてみる。

いけてる???

何回か動かしてみたけどVRAMは14〜16GBぐらい。13Bだとどうだろうか。。。。

Mon Dec 25 13:11:31 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.30.02              Driver Version: 530.30.02    CUDA Version: 12.1     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                  Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf            Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 4090         On | 00000000:01:00.0 Off |                  Off |
|  0%   49C    P8               11W / 450W|  16273MiB / 24564MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A      1153      G   /usr/lib/xorg/Xorg                            9MiB |
|    0   N/A  N/A      1375      G   /usr/bin/gnome-shell                         10MiB |
|    0   N/A  N/A   1849283      C   ...pyenv/versions/ml-ferret/bin/python    16248MiB |
+---------------------------------------------------------------------------------------+
kun432kun432

失敗してるな、なにかミスってるか、環境か。

Caught Unknown Error CUDA error: an illegal memory access was encountered

とか出てるので、環境のほうかな

kun432kun432

んー、これは動いたっぽいけど、イメージ上でポイント・ボックス、スケッチをするとほとんどの場合はエラーになる。逆にそれ以外の場合は特に問題なさげ?多分、自分の環境に起因している可能性が高いと思う。

kun432kun432

Boxで指定

Sketchで指定

自分の環境だけなのかもしれないけど、なんか複数のリージョンを選択すると高確率でエラーになるっぽい。単一のリージョン指定だけだと特に問題ない感じ。

このスクラップは2023/12/25にクローズされました