跳到主要内容本地部署多模态 Llama3 大模型实战 | 极客日志PythonAI算法
本地部署多模态 Llama3 大模型实战
如何在本地部署多模态 Llama3 大模型。首先解析了 LLaVA 方案的原理,包括 Image Projector 的作用及训练流程。接着详细说明了如何通过 Xtuner 和 HuggingFace 获取模型,并利用 Ollama 进行本地加载。随后演示了使用 Docker 安装 Open WebUI 以实现图形化交互界面。最后通过图片识别、数量统计、OCR 及图表解读等多个维度测试了模型能力,结果显示其在基础视觉任务上表现良好,但在复杂图表分析上仍有不足。文章总结了本地部署的优缺点,并给出了后续优化建议。
RedisGeek3 浏览 一般开源的 LLM,例如 Llama3 和 Qwen2 等,只支持文本的输入,只能理解文本的内容,实现基于文本的逻辑推理和意图识别。
但是一些 Chatbot,例如 GPT-4V,就是拥有视觉能力,能够理解图片内容,能够更好的解决现实中的实际问题。
如何给开源大模型添加上视觉 Vision?本篇文章助力大家在本地玩转多模态的 Llama3。
理解 LLaVA 方案
添加上一个 Image Projector,让大模型具有处理图片输入的能力,再经过向量对齐,输入 LLM 中,就可以使大模型增加对输入图片的理解。
所使用的文本单模型 LLM 和训练出来的 Image Projector,统称为 LLaVA 模型。
LLaVA(Large Language-and-Vision Assistant),是一个在 LLM 基础上来实现对视觉问题问答的解决方案。
Image Projector 的训练和测试,有点类似之前我们讲过的 LoRA 微调方案。
二者都是在已有 LLM 的基础上,用新的数据训练一个新的小文件。
只不过,LLM 套上 LoRA 之后,有了新的灵魂(角色);而 LLM 套上 Image Projector 之后,才有了眼睛。
简述 Image Projector 的训练过程
训练过程分为为 2 个阶段:Pretrain 和 Finetune。
在 Pretrain 阶段,我们会使用大量的图片 + 简单文本(即图片标题)数据对,使 LLM 理解图像中的普遍特征。即对大量的图片进行粗看。
Pretrain 阶段训练完成后,此时的模型已经有视觉能力了!但是由于训练数据中都是图片 + 图片标题,所以此时的图片虽然有视觉能力,但无论用户问它什么,它都只会回答输入图片的标题,即此时的模型只会给输入图像'写标题'。
在 Finetune 阶段,我们会使用图片 + 复杂文本数据对(多轮对话数据),来对 Pretrain 得到的 Image Projector 进行进一步的训练。
选择和下载模型
Xtuner 是一个高效、灵活、全能的轻量化大模型微调工具库。
- 支持多种开源的大语言模型
- 支持多种微调方法,QLoRA、LoRA、全量参数微调
- 支持多种微调算法
- phi-3-mini
- Llama3
- InternLM2
- Qwen
- Llama2
其中的,Vision 大模型 LLaVA-Llama-3-8B。
HuggingFace 仓库中提供了量化好的 GGUF 格式,直接可以在 Ollama 的 F16 半精度模型和 INT4 精度模型:
- llava-llama-3-8b-v1_1-f16.gguf 模型大小是 16.1GB
- llava-llama-3-8b-v1_1-int4.gguf 模型大小是 4.92GB
硬件建议:
运行此类模型建议至少配备 16GB 显存的显卡(如 RTX 3060 12G 或更高),若使用 CPU 推理则需较大内存(建议 32GB+)。INT4 量化版本对显存要求较低,适合消费级显卡。
创建本地模型
本地部署 LLM,采取的方案是 Ollama 部署。
可以选择 Makefile 创建
Xtuner 团队的 HuggingFace 仓库,提供了文件:
FROM ./llava-llama-3-8b-v1_1-f16.gguf
FROM ./llava-llama-3-8b-v1_1-mmproj-f16.gguf
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER num_keep 4
PARAMETER num_ctx 4096
执行相关命令,可以参考官方文档。其中 num_ctx 设置为 4096 以平衡上下文长度与显存占用。
从 Ollama 官方仓库下载
Ollama 官方仓库,已经有了 llava-llama3 的模型。大小 16GB。
ollama pull llava-llama3:8b-v1.1-fp16
安装 Open WebUI
因为目前 ChatBox 主推自己 ChatBox AI,不支持本地部署的开源大模型上传图片对话。
所以我们需要安装 open-webui,它支持 Ollama 部署的模型,进行图片对话理解。
Open WebUI,原名叫做 Ollama WebUI。
支持多模态,支持文档、本地 RAG 集成、网页浏览功能、语言输入支持、AI 绘画、多个模型对话。
官方推荐的是用 Docker 进行安装。需要提前在本地安装好 Docker 软件。
If Ollama is on your computer, use this command:
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
访问页面地址
这样你就拥有一个完全属于自己的,本地部署的 ChatGPT。
测试 Vision 大模型能力
ImageNet,图片识别
图片中的动物是水豚。它四肢着地站在一块岩石上,毛色是灰色的。水豚面对镜头时,它的头微微向左倾斜。
图片数量识别
OCR 识别和指令跟随
表格和图表解读
复杂信息提取
总结与展望
通过上述测试可以看出,本地部署的 LLaVA-Llama-3-8B 模型在基础物体识别和简单的 OCR 任务上表现尚可,能够满足日常的图片描述需求。然而,在处理复杂图表、密集文本信息提取以及精确计数任务时,仍存在明显的局限性。
这主要受限于当前开源多模态模型的训练数据和参数量。对于开发者而言,本地部署多模态模型的优势在于数据隐私安全和低延迟响应,适合集成到内部系统中。未来随着模型量化技术的进步以及更大规模数据集的训练,端侧多模态模型的性能有望进一步提升。
建议在遇到复杂场景时,结合传统 CV 算法(如专门的 OCR 引擎或目标检测模型)与大模型生成能力,采用混合架构以获得更稳定的效果。同时,关注社区更新的量化版本,通常新版本会在保持精度的同时显著降低资源消耗。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online