llama.cpp 完整实操指南:下载编译 + Gemma4-E4B-it 模型转换与运行测试(避坑版)
前言:最近在部署Gemma4-E4B-it多模态模型时,踩了无数llama.cpp的坑(比如Makefile废弃、模板参数报错、多GPU冲突等),整理了一套从llama.cpp下载、编译,到模型转换、量化、单卡运行的完整流程,所有指令可直接复制粘贴,新手也能快速上手,全程避坑!
环境说明:Ubuntu系统(容器内也适用)、NVIDIA RTX 4090显卡(单卡/多卡均适配)、Python 3.8+,已安装CUDA toolkit。
一、llama.cpp 下载与编译(CMake版,弃用Makefile)
重点:llama.cpp 已彻底废弃Makefile,全部改用CMake编译,用make命令会直接报错,这是最容易踩的第一个坑!
1. 下载llama.cpp源码
克隆官方最新源码,进入目录:
# 克隆源码(国内可替换为镜像地址,速度更快)
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp2. 安装编译依赖
安装CMake及相关依赖,确保编译顺利:
apt update
apt install -y build-essential cmake pkg-config libopenblas-dev3. CMake编译(开启CUDA加速,适配多模态)
核心编译命令,开启CUDA支持(必须加,否则无法用GPU加速):
# 清理旧编译文件(首次编译可跳过,更新源码后必执行)
rm -rf build
# CMake配置(开启CUDA、多模态支持)
cmake -B build -DLLAMA_CUDA=ON -DLLAMA_MULTIMODAL=ON
# 多核编译(-j$(nproc) 自动适配CPU核心数,加速编译)
cmake --build build --config Release -j$(nproc)编译完成后,所有可执行文件(如llama-mtmd-cli、llama-quantize)都会在 build/bin/ 目录下,后续所有操作都依赖该目录下的工具。
二、Gemma4-E4B-it 多模态模型转换(关键避坑)
Gemma4-E4B-it是Google原生多模态模型(支持文本+图像),llama.cpp运行需拆分转换为「文本模型(LLM)+ 视觉投影器(mmproj)」,且必须用正确参数,否则转换失败或运行崩溃。
1. 准备工作:安装转换依赖
# 安装模型转换所需依赖(在llama.cpp目录下执行)
pip install torch transformers accelerate pillow2. 下载Gemma4-E4B-it原始模型(Hugging Face)
先创建模型目录,再下载原始模型(需安装git-lfs):
# 创建模型目录(路径可自定义,后续统一即可)
mkdir -p ../models/gemma4-E4B-it
cd ../models/gemma4-E4B-it
# 安装git-lfs(用于下载大文件)
git lfs install
# 克隆原始模型(Google官方仓库)
git clone https://huggingface.co/google/gemma-4-E4B-it下载完成后,模型路径为:/root/xxx/gemma_proj/models/gemma4-E4B-it/gemma-4-E4B-it(可根据自己的实际路径修改)。
3. 转换模型(分2步:视觉投影器 + 文本模型)
重点:老版本llama.cpp的--vision-only参数已废弃,改用--mmproj参数,否则会报“unrecognized arguments”错误!
第一步:转换视觉投影器(mmproj,多模态核心)
回到llama.cpp目录,执行转换命令,生成mmproj文件(保持F16精度,视觉效果最好):
cd ../../llama.cpp
# 转换视觉投影器(mmproj)
python convert_hf_to_gguf.py \
/root/xxx/gemma_proj/models/gemma4-E4B-it/gemma-4-E4B-it \
--outfile ../mmproj-gemma-4-E4B-it-f16.gguf \
--mmproj \
--outtype f16第二步:转换文本模型(LLM)
转换为F16格式(后续可量化为INT4,节省显存):
python convert_hf_to_gguf.py \
/root/xxx/gemma_proj/models/gemma4-E4B-it/gemma-4-E4B-it \
--outfile ../gemma-4-E4B-it-f16.gguf \
--outtype f164. 模型量化(可选但强烈推荐:INT4,显存减半)
原始F16模型约14GB,量化为INT4(q4_K_M格式,llama.cpp最优量化)后仅7GB左右,速度翻倍,效果几乎无损失,单卡也能轻松运行:
# 量化为INT4(q4_K_M格式)
./build/bin/llama-quantize \
../gemma-4-E4B-it-f16.gguf \
../gemma-4-E4B-it-q4_K_M.gguf \
q4_K_M量化完成后,会生成INT4版本模型:gemma-4-E4B-it-q4_K_M.gguf,后续优先使用该模型。
三、Gemma4-E4B-it 模型运行测试(单卡稳定版)
llama-mtmd-cli(多模态专用工具)多GPU环境下默认会分片加载,推荐强制单卡运行,更稳定。
1. 核心运行命令(单卡+INT4模型+多模态看图)
强制使用0号显卡(第一张卡),关闭自动显存适配(-fit off,避免崩溃),完整命令:
CUDA_VISIBLE_DEVICES=0 \
./build/bin/llama-mtmd-cli \
-m ../gemma-4-E4B-it-q4_K_M.gguf \
--mmproj ../mmproj-gemma-4-E4B-it-f16.gguf \
--image /root/xxx/gemma_proj/test1.jpeg \
-p "详细描述这张图片" \
-ngl 99 \
-fit off \
--jinja2. 命令参数详解(新手必看)
CUDA_VISIBLE_DEVICES=0:强制只使用0号显卡(单卡运行,避免多卡分片冲突,最稳定),换卡可改为1、2、3。./build/bin/llama-mtmd-cli:llama.cpp多模态专用运行工具,看图必须用这个,不能用llama-cli。-m ../gemma-4-E4B-it-q4_K_M.gguf:指定INT4量化后的文本模型路径。--mmproj ../mmproj-gemma-4-E4B-it-f16.gguf:指定视觉投影器路径(必须和文本模型匹配,不能量化)。--image 图片路径:指定需要识别的图片路径(替换为自己的图片路径,支持jpeg、png格式)。-p "详细描述这张图片":给模型的提示词,可根据需求修改(如“识别图片中的物体”“分析图片内容”)。-ngl 99:将所有模型层加载到GPU(INT4模型单卡可轻松承载,F16模型建议改为20,避免显存不足)。-fit off:关闭llama.cpp自动显存分配功能,避免Gemma4大模型+多模态导致的崩溃(核心避坑参数)。
3. 运行成功标志
执行命令后,出现以下日志,说明模型加载成功,正在看图推理:
ggml_cuda_init: found 1 CUDA devices (Total VRAM: 24217 MiB):
Device 0: NVIDIA GeForce RTX 4090, compute capability 8.9, VMM: yes, VRAM: 24217 MiB
llama_model_loader: loaded meta data with 45 key-value pairs and 720 tensors from ../gemma-4-E4B-it-q4_K_M.gguf (version GGUF V3 (latest))
load_tensors: loading model tensors, this can take a while...
load_tensors: offloaded 43/43 layers to GPU
...后续会输出图片的详细描述,说明多模态运行成功。
四、常见报错及解决方案(避坑汇总)
1. 报错:Makefile:6: *** Build system changed: The Makefile build has been replaced by CMake.
解决方案:弃用make命令,改用本文第一部分的CMake编译流程。
2. 报错:unrecognized arguments: --vision-only
解决方案:llama.cpp新版本已废弃--vision-only,替换为--mmproj参数(参考模型转换步骤)。
3. 报错:GGML_ASSERT(n_inputs < GGML_SCHED_MAX_SPLIT_INPUTS) failed
解决方案:加参数-fit off,关闭自动显存适配。
4. 报错:invalid argument: --chat-template-file
解决方案:llama-mtmd-cli不支持模板参数,删除--chat-template-file、--jinja等所有模板相关参数。
5. 多GPU环境下运行不稳定
解决方案:用CUDA_VISIBLE_DEVICES=0强制单卡运行,避免多卡分片冲突。
五、总结
本文梳理了llama.cpp从下载、编译,到Gemma4-E4B-it多模态模型转换、量化、单卡运行的完整流程,核心避坑点:
llama.cpp 用CMake编译,弃用Makefile;
Gemma4转换需分两步(mmproj+文本模型),用--mmproj替代--vision-only;
llama-mtmd-cli不支持模板参数,删除所有模板相关配置;
大模型+多模态必加-fit off,单卡运行更稳定;
INT4量化(q4_K_M)是最优选择,兼顾速度和效果。
所有指令均已实测可用,复制粘贴即可快速部署,新手也能轻松上手。如果遇到其他报错,可在评论区留言,及时回复解决!