|
|
1 tahun lalu | |
|---|---|---|
| .. | ||
| android | 2 tahun lalu | |
| CMakeLists.txt | 2 tahun lalu | |
| MobileVLM-README.md | 1 tahun lalu | |
| README.md | 1 tahun lalu | |
| clip.cpp | 1 tahun lalu | |
| clip.h | 1 tahun lalu | |
| convert-image-encoder-to-gguf.py | 1 tahun lalu | |
| llava-cli.cpp | 1 tahun lalu | |
| llava-surgery-v2.py | 1 tahun lalu | |
| llava-surgery.py | 1 tahun lalu | |
| llava.cpp | 1 tahun lalu | |
| llava.h | 1 tahun lalu | |
| requirements.txt | 1 tahun lalu | |
Currently this implementation supports llava-v1.5 variants, as well as llava-1.6 llava-v1.6 variants.
The pre-converted 7b and 13b models are available. For llava-1.6 a variety of prepared gguf models are available as well 7b-34b
After API is confirmed, more models will be supported / uploaded.
Build with cmake or run make llava-cli to build it.
After building, run: ./llava-cli to see the usage. For example:
./llava-cli -m ../llava-v1.5-7b/ggml-model-f16.gguf --mmproj ../llava-v1.5-7b/mmproj-model-f16.gguf --image path/to/an/image.jpg
note: A lower temperature like 0.1 is recommended for better quality. add --temp 0.1 to the command to do so.
note: For GPU offloading ensure to use the -ngl flag just like usual
Clone a LLaVA and a CLIP model (available options). For example:
git clone https://huggingface.co/liuhaotian/llava-v1.5-7b
git clone https://huggingface.co/openai/clip-vit-large-patch14-336
Install the required Python packages:
pip install -r examples/llava/requirements.txt
Use llava-surgery.py to split the LLaVA model to LLaMA and multimodel projector constituents:
python ./examples/llava/llava-surgery.py -m ../llava-v1.5-7b
Use convert-image-encoder-to-gguf.py to convert the LLaVA image encoder to GGUF:
python ./examples/llava/convert-image-encoder-to-gguf.py -m ../clip-vit-large-patch14-336 --llava-projector ../llava-v1.5-7b/llava.projector --output-dir ../llava-v1.5-7b
Use convert.py to convert the LLaMA part of LLaVA to GGUF:
python ./convert.py ../llava-v1.5-7b --skip-unknown
Now both the LLaMA part and the image encoder is in the llava-v1.5-7b directory.
1) Backup your pth/safetensor model files as llava-surgery modifies them
2) Use python llava-surgery-v2.py -C -m /path/to/hf-model which also supports llava-1.5 variants pytorch as well as safetensor models:
python ./examples/llava/convert-image-encoder-to-gguf.py -m ../path/to/vit --llava-projector ../path/to/llava.projector --output-dir ../path/to/output --clip-model-is-visionllava-1.5 models all use the same vicuna prompt, here you can just add your image question like -p "Provide a full description."
For llava-1.5 models which are not vicuna (mistral and Yi) you need to adapt system prompt as well as user prompt, for this purpose llava-cli has a basic templating system:
For Mistral and using llava-cli binary:
Add this: -p "<image>\nUSER:\nProvide a full description.\nASSISTANT:\n"
The mistral template for llava-1.6 seems to be no system print and a USER/ASSISTANT role
For the 34B this should work:
Add this: -e -p <|im_start|>system\nAnswer the questions.<|im_end|><|im_start|>user\n<image>\nProvide a full description.<|im_end|><|im_start|>assistant\n
When running llava-cli you will see a visual information right before the prompt is being processed:
Llava-1.5:
encode_image_with_clip: image embedding created: 576 tokens
Llava-1.6 (anything above 576):
encode_image_with_clip: image embedding created: 2880 tokens
Alternatively just pay notice to how many "tokens" have been used for your prompt, it will also show 1000+ tokens for llava-1.6