mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
1400 字
4 分钟
llamacpp部署gemma4-E4B
2026-04-08

在 WSL2 Ubuntu 中部署 Gemma-4-E4B 视觉模型全记录(含 Claude Code 接入)#

Google发布了最新的gemma4开源模型系列,号称开源“最强”。

本地跑一个能看图、读文档的多模态模型,选了一圈最终锁定了 Google 的 Gemma-4-E4B —— 40 亿参数,视觉能力不错,关键是在消费级显卡上也能流畅运行。

但我的主力机是 Windows 11,权衡之后决定走 WSL2 + Ubuntu 22.04 的方案。

下面就记录一下完整过程,方便以后复现,也给同样折腾的朋友一个参考。


为什么是 WSL2 而不是直接在 Windows 上跑?#

先说结论:不推荐在 Windows 原生环境部署 llama.cpp。虽然现在 Windows 下也能编译 CUDA 版本,但折腾依赖、路径、权限问题耗时又费力,最终推理速度还远不如 WSL2 里的原生 Linux 环境。WSL2 现在对 GPU 直通支持非常成熟,配合 Mirrored 网络模式,体验几乎和裸机 Linux 无异。


第一步:WSL2 环境准备#

1. 安装 WSL2 与 Ubuntu 22.04#

如果系统还没装 WSL,用管理员权限打开 PowerShell,一条命令搞定:

Terminal window
wsl --update
wsl --install -d Ubuntu-22.04

安装完成后重启,进入 Ubuntu 设置用户名密码。

2. 配置 .wslconfig(关键一步)#

在 Windows 用户目录下(C:\Users\<你的用户名>\)创建或编辑 .wslconfig 文件,内容如下:

[wsl2]
memory=12GB
processors=4
networkingMode=mirrored
  • memory=12GB:给 WSL 分配 12G 内存,因为接入claude 或者 openclaw都是需要并行,上下文会存储在内存上。
  • processors=4:根据你的 CPU 核心数调整,我分配了 4 核。
  • networkingMode=mirrored:这个非常重要!启用后 WSL 的网络和 Windows 共享同一个 IP,你从 Windows 访问 WSL 服务直接用 127.0.0.1 即可,代理设置也会自动继承,省去一堆端口转发烦恼。

配置完记得重启 WSL 生效:

Terminal window
wsl --shutdown
#重新进入Ubuntu
wsl -d Ubuntu-22.04

第二步:CUDA 环境与显卡检测#

安装 CUDA Toolkit#

进入 WSL Ubuntu,依次执行:

#没有代理可以使用国内apt镜像
sudo apt update
sudo apt install nvidia-cuda-toolkit -y

安装完成后用 nvidia-smi 验证显卡是否被 WSL 识别。

nvidia


第三步:编译 llama.cpp(CUDA 加速版)#

llama.cpp 官方仓库更新频繁,直接拉取最新代码编译即可。

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
rm -rf build
mkdir build && cd build
cmake .. -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES="89" -DGGML_CUBLAS=ON -DLLAMA_CURL=ON
cmake --build . --config Release -j $(nproc)

参数说明:

  • -DGGML_CUDA=ON:启用 CUDA 加速。
  • -DCMAKE_CUDA_ARCHITECTURES="89":我的显卡是 RTX 40 系列(Ada Lovelace),架构代号 89。如果你用 30 系列填 8086,20 系列填 75,不确定的话可以去 NVIDIA 官网 查询。
  • -DGGML_CUBLAS=ON:启用 cuBLAS 矩阵运算加速。
  • -DLLAMA_CURL=ON:支持从 URL 直接拉取模型(可选)。

第四步:下载模型与多模态投影文件#

Gemma-4-E4B 需要两个文件:

  • 主模型文件(.gguf):用于文本生成。
  • mmproj 投影文件(.gguf):用于图像、视频、音频等多模态输入理解。

我使用的是社区 Uncensored 版本,直接从 Hugging Face 拉取:

# 创建模型存放目录
mkdir -p ~/models/gemma-4-E4B-it
# 下载主模型(约 4.7GB,Q4_K_M 量化版本)
wget -c -P ~/models/gemma-4-E4B-it https://huggingface.co/HauhauCS/Gemma-4-E4B-Uncensored-HauhauCS-Aggressive/resolve/main/Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-Q4_K_P.gguf
# 下载配套 mmproj 文件
wget -c -P ~/models/gemma-4-E4B-it https://huggingface.co/HauhauCS/Gemma-4-E4B-Uncensored-HauhauCS-Aggressive/resolve/main/mmproj-Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-f16.gguf

第五步:启动 llama-server 服务#

llama.cpp 自带一个 HTTP 服务端,支持 OpenAI 兼容 API,非常方便后续集成。

llama-server \
-m ~/models/gemma-4-E4B-it/Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-Q4_K_P.gguf \
--mmproj ~/models/gemma-4-E4B-it/mmproj-Gemma-4-E4B-Uncensored-HauhauCS-Aggressive-f16.gguf \
--host 0.0.0.0 --port 8080 \
-ngl 99 -fa on -ub 1024 -t 16 -b 8192 -n 4096 \
--jinja

关键参数解释:

  • -ngl 99:把 99 层模型全部加载到 GPU,显存占用约 6~7GB。
  • -fa on:启用 Flash Attention,降低显存开销并加速推理。
  • -ub 1024:批处理上限,平衡吞吐与延迟。
  • -t 16:使用 16 个线程处理 CPU 任务。
  • -b 8192 -n 4096:上下文大小与最大生成长度。
  • --jinja:启用 Jinja 模板,提升对话格式兼容性。

启动后,因为前面配置了 Mirrored 网络模式,直接在 Windows 浏览器打开 http://127.0.0.1:8080 就能看到 llama.cpp 自带的 Web UI。

我开的东西太多了,正常下是54token/s,整体效果还不错 也可以使用27B-A4B,输出慢点,但是智商比E4B强

web UI

web UI image

第六步:接入 Claude Code(通过 LiteLLM 做 API 转换)#

我想在 Claude Code 里用这个本地模型,但 Claude Code 只认 Anthropic 官方 API 格式。LiteLLM 就是为此而生的——它能将各种模型接口统一成 OpenAI 格式,并支持自定义模型名映射。

1. 安装 LiteLLM#

pip install 'litellm[proxy]'

2. 配置 config.yaml#

我在 ~/claude-proxy/config.yaml 中写入了以下内容:

model_list:
- model_name: gemma-4-e4b
litellm_params:
model: openai/llama
api_base: http://127.0.0.1:8080/v1
api_key: dummy
stream: true
max_tokens: 4096
- model_name: claude-haiku-4-5-20251001
litellm_params:
model: openai/llama
api_base: http://127.0.0.1:8080/v1
api_key: dummy
stream: true
max_tokens: 4096

这里解释一下:

  • 本地 llama-server 的 API 地址是 http://127.0.0.1:8080/v1,格式兼容 OpenAI。
  • 我将本地模型映射了两个名字:gemma-4-e4b(自己用)和 claude-haiku-4-5-20251001(欺骗 Claude Code)。
  • api_key: dummy 是因为 llama-server 默认无需鉴权,随便填一个即可。

3. 启动 LiteLLM 代理#

litellm --config ~/claude-proxy/config.yaml --port 4000 --host 127.0.0.1

启动后 LiteLLM 会监听在 http://127.0.0.1:4000

litellm

4. 在 Claude Code 中配置自定义端点#

打开 Claude Code 设置,将 API Base URL 修改为 http://127.0.0.1:4000,然后在模型选择列表里就会出现我们伪造的 claude-haiku-4-5-20251001,选中它即可使用本地 Gemma 模型。

推理速度相当可观,稳定在 50 tokens/秒左右,配合图片理解能力,日常 Coding 助手体验完全不输云端小模型。

cppclaude


总结#

整个流程走下来,最顺畅的体验来自于两点:

  1. WSL2 的 Mirrored 网络模式 —— 彻底告别 localhost:8080 连不上的困惑。
  2. LiteLLM 的模型名称映射 —— 让任何支持自定义端点的客户端都能无缝接入本地模型。
  3. 其实还可以llamacpp更优化,让速度达到60-70,这里我就没尝试了

如果你也有一块 8G 以上显存的 N 卡,强烈建议试试这套方案,本地多模态模型跑起来的感觉真的很棒。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

llamacpp部署gemma4-E4B
https://30790842.xyz/posts/记一次llamacpp部署gemma4-e4b/
作者
岚崒
发布于
2026-04-08
许可协议
CC BY-NC-SA 4.0

目录