菜单

多模态模型

相关源文件

本文档介绍了 llama.cpp 中多模态语言模型的实现,重点关注 LLaVA(大型语言和视觉助手)集成、图像处理能力以及多模态推理执行。多模态模型扩展了传统的纯文本语言模型,使其能够处理和理解多种输入模态,特别是结合视觉和文本信息。

有关通用的模型加载和管理概念,请参阅 模型加载与管理。有关推理期间的上下文管理,请参阅 上下文管理与推理。有关处理不受信任的多模态输入时的安全注意事项,请参阅 安全注意事项

架构概述

llama.cpp 中的多模态模型遵循一种双编码器架构,其中视觉输入与文本输入分开处理,然后再与语言模型结合。该系统集成了基于 CLIP 的视觉编码器和 LLaMA 语言模型,以实现视觉-语言理解。

多模态处理流程

来源:基于 llama.cpp 代码库中的多模态架构模式。

LLaVA 集成

LLaVA 模型将预训练的 CLIP 视觉编码器与语言模型相结合,使系统能够处理视觉和文本输入。集成包括加载两个模型组件并在推理过程中协调它们的执行。

模型加载架构

来源:examples/llava/llava-cli.cpp examples/llava/clip.cpp

图像处理管道

图像处理流程负责将原始图像数据转换为语言模型可以使用的嵌入。这包括图像预处理、通过视觉编码器提取特征以及嵌入集成。

图像处理流程

来源:examples/llava/clip.cpp examples/llava/clip.h

多模态推理流程

多模态推理将标准的 llama.cpp 推理流程扩展到处理组合的视觉-文本输入。该过程涉及视觉编码器和语言模型之间的协调,同时保持高效的内存使用和计算调度。

推理执行流程

阶段组件输入输出目的
视觉处理clip_image_encode原始图像数据图像嵌入提取视觉特征
Token 准备文本分词器文本提示文本 Token文本转换为 Token
嵌入融合嵌入层视觉 + 文本 Token组合嵌入合并模态
语言处理llama_decode组合嵌入隐藏状态处理多模态输入
响应生成llama_sampler隐藏状态输出 Token生成文本响应

来源:examples/llava/llava-cli.cpp src/llama.cpp

内存管理

来源:src/ggml-backend-sched.cpp src/ggml-alloc.c

安全考量

多模态模型由于其处理包括图像在内的各种输入格式的能力,引入了额外的安全考量。攻击面超出了纯文本提示,还包括潜在的基于图像的漏洞和跨模态注入攻击。

安全风险矩阵

风险类别威胁向量缓解策略实现
图像输入验证恶意图像文件格式验证,大小限制图像预处理流程
跨模态注入图像中的嵌入式提示输入净化,内容过滤文本提取检测
模型投毒不受信任的多模态模型模型验证,沙箱隔离执行环境
资源耗尽大型图像处理内存限制,超时控制资源分配边界

在生产环境中部署多模态模型时

  1. 输入净化:在处理之前验证图像格式、尺寸和文件大小
  2. 沙箱执行:在隔离的容器或虚拟机中运行多模态推理
  3. 资源监控:实施内存和计算限制以防止资源耗尽
  4. 模型验证:验证多模态模型文件的校验和和来源

来源:SECURITY.md21-35

模型转换和支持

多模态模型支持需要将模型从各种框架转换为 GGUF 格式,同时保留视觉和语言组件。转换过程处理双模型架构,并确保与 llama.cpp 的推理引擎兼容。

支持的多模态架构

来源:convert-llava-to-gguf.py examples/llava/