LLaVA
当前实现支持 llava-v1.5 变体,以及 llava-1.6 llava-v1.6 变体。
已预转换的 7b 和 13b 模型已可获取。对于 llava-1.6,也提供了多种准备好的 gguf 格式模型 7b-34b。
API 确认后,将支持/上传更多模型。
使用方法
构建 llama-mtmd-cli 二进制文件。
构建完成后,运行:./llama-mtmd-cli 查看使用说明。例如:
./llama-mtmd-cli -m ../llava-v1.5-7b/ggml-model-f16.gguf \
--mmproj ../llava-v1.5-7b/mmproj-model-f16.gguf \
--chat-template vicuna
注意: 建议使用较低的温度值(如 0.1)以获得更好的质量。在命令中添加
--temp 0.1即可。
注意: 对于 GPU 加速,请像往常一样使用
-ngl标志。
LLaVA 1.5
- 克隆 LLaVA 和 CLIP 模型(可用选项)。例如:
git clone https://huggingface.co/liuhaotian/llava-v1.5-7b
git clone https://huggingface.co/openai/clip-vit-large-patch14-336
- 安装所需的 Python 包:
pip install -r tools/mtmd/requirements.txt
- 使用
llava_surgery.py将 LLaVA 模型分离为 LLaMA 和多模态投影器组件:
python ./tools/mtmd/llava_surgery.py -m ../llava-v1.5-7b
- 使用
convert_image_encoder_to_gguf.py将 LLaVA 图像编码器转换为 GGUF 格式:
python ./tools/mtmd/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
- 使用
examples/convert_legacy_llama.py将 LLaVA 的 LLaMA 部分转换为 GGUF 格式:
python ./examples/convert_legacy_llama.py ../llava-v1.5-7b --skip-unknown
现在 LLaMA 部分和图像编码器都位于 llava-v1.5-7b 目录中。
LLaVA 1.6 gguf 转换
- 首先克隆 LLaVA 1.6 模型:
git clone https://huggingface.co/liuhaotian/llava-v1.6-vicuna-7b
- 安装所需的 Python 包:
pip install -r tools/mtmd/requirements.txt
- 使用
llava_surgery_v2.py,该脚本同时支持 llava-1.5 变体的 pytorch 和 safetensor 模型:
python tools/mtmd/llava_surgery_v2.py -C -m ../llava-v1.6-vicuna-7b/
- 您将在模型目录中找到 llava.projector 和 llava.clip 文件
- 将 llava.clip 文件复制到子目录(如 vit),将其重命名为 pytorch_model.bin,并向目录添加合适的 vit 配置:
mkdir vit
cp ../llava-v1.6-vicuna-7b/llava.clip vit/pytorch_model.bin
cp ../llava-v1.6-vicuna-7b/llava.projector vit/
curl -s -q https://huggingface.co/cmp-nct/llava-1.6-gguf/raw/main/config_vit.json -o vit/config.json
- 创建视觉 gguf 模型:
python ./tools/mtmd/convert_image_encoder_to_gguf.py -m vit --llava-projector vit/llava.projector --output-dir vit --clip-model-is-vision
- 这与 llava-1.5 类似,区别在于我们告诉编码器我们正在使用 CLIP 的纯视觉模型部分
- 然后将模型转换为 gguf 格式:
python ./examples/convert_legacy_llama.py ../llava-v1.6-vicuna-7b/ --skip-unknown
- 最后,我们可以使用 1.6 模型版本运行 llava 命令行界面:
./llama-mtmd-cli -m ../llava-v1.6-vicuna-7b/ggml-model-f16.gguf --mmproj vit/mmproj-model-f16.gguf
注意: llava-1.6 比 llava-1.5 需要更多上下文,至少需要 3000(建议使用 -c 4096 运行)
注意: llava-1.6 大大受益于批量提示处理(默认设置即可)
注意: 如果第 6 步中的语言模型与旧版转换脚本不兼容,处理 LLM 模型转换的最简单方法是在 transformers 中加载模型,并仅从 llava next 模型中导出 LLM。
import os
import transformers
model_path = ...
llm_export_path = ...
tokenizer = transformers.AutoTokenizer.from_pretrained(model_path)
model = transformers.AutoModelForImageTextToText.from_pretrained(model_path)
tokenizer.save_pretrained(llm_export_path)
model.language_model.save_pretrained(llm_export_path)
然后,您可以使用 convert_hf_to_gguf.py 脚本转换 LLM,该脚本处理更多 LLM 架构。
聊天模板
对于 llava-1.5 和 llava-1.6,您需要使用 vicuna 聊天模板。只需添加 --chat-template vicuna 即可激活此模板。
如何判断您正在运行 llava-1.5 还是 llava-1.6 模式
运行 llava-cli 时,您将在提示被处理之前看到视觉信息:
Llava-1.5:
encode_image_with_clip: image embedding created: 576 tokens
Llava-1.6(576 以上的任何值):
encode_image_with_clip: image embedding created: 2880 tokens
或者,注意您的提示使用了多少"标记",llava-1.6 也会显示 1000+ 标记。