Gemma 4 本地AI终极指南
谷歌几天前发布了 Gemma 4,我终于重新爱上了这些模型。
在 Gemma 2 之后,我停止使用它们:我转向了 Qwen,因为它为我提供了足够的上下文长度用于文档分析和智能体功能。
但现在,即使是小巧的 Gemma-4-E2B 也能做到一切。
我是一个"显卡穷人",所以我总是押注于具有出色能力的小语言模型。而 Gemma 4 是我的新选择!
在本文中,我将向你展示如何将旧电脑用作本地 AI 服务器:以及如何在 Google AI Studio 上免费测试更大的模型。
1、Gemma-4
Gemma-4 是谷歌最新的开放权重模型家族,专注于更强的推理能力、智能体行为和多模态设备端使用。
主要新功能
- 高级推理和"思考"模式:Gemma-4 可以进行逐步推理、多步规划,并针对智能体工作流进行优化(例如自主工具使用和工作流)。
- 长上下文窗口:小型 E2B/E4B 边缘模型支持高达 128K token,26B/31B 版本支持高达 256K token,支持非常长的上下文任务。
- 多模态输入:所有模型都支持文本加图像(支持可变宽高比和多个 token 预算);E2B/E4B 还原生支持音频,某些变体处理类似视频的序列。
- 更强的编码和函数调用:改进的编码基准测试加上内置的函数调用支持,让模型能够在智能体管道中调用工具和 API,无需额外微调。
- 原生系统提示支持:4 系列现在具有内置的
system角色处理,使指令和行为控制更加一致且对开发者友好。在我看来,这是最伟大的功能(我一直在等待它)。 - 边缘优化的小型模型(E2B/E4B):高效的 2B 和 4B 有效参数模型,专为手机、树莓派和类似硬件设计,具有多模态推理和接近零延迟的离线执行能力。
Gemma-4 是一个推理更快、上下文更长、多模态、支持智能体的模型家族,即使在移动设备和边缘设备上也能高效运行。
已经令人惊叹的 gemma2-2b-it 中主要缺失的功能是:上下文和系统消息。
在现代大语言模型使用中,智能体能力和结构化输出是相辅相成的,为此你需要系统消息和广泛的上下文长度。
gemma-2-2b-it
- 强大的聊天/指令遵循能力,针对小占用部署进行优化(例如端点、简单聊天机器人)。
- 纯文本到文本;没有原生多模态或高级"思考"模式;编码和数学能力弱于后代模型。
gemma-3n-E2B
- 专家混合式设计:总共 5B 参数但表现得像 2B 占用模型,针对设备端效率进行调整。
- 纯文本,但比 Gemma-2-2B 具有更好的推理和指令遵循能力,面向"设备端"但尚不支持多模态或智能体。
gemma-4-E2B
- 多模态:支持文本+图像(以及在更广泛的 Gemma-4 家族中支持类似音频或视频的行为),具有长上下文(例如 32K-128K 范围)。
- 专为高级推理("思考模式")、函数调用和手机/树莓派类设备上的智能体工作流设计。
我们可以轻松地在硬件上运行该家族的边缘模型,使用 llama.cpp。但如果你想尝试 26B/31B 版本,你可以选择 Google AI studio 上的免费 API 或 Playground……免费!
2、Google AI Studio 免费 API 和 Playground
谷歌提供了一个丰富的集成环境,可以直接在 Google AI Studio 上玩转谷歌模型(文本、音频、图像和视频)。
如果你有 Gmail 地址或 Google 账户,注册过程简单直接。
但你需要同意 Gemini API 附加服务条款:出于某些原因,你需要同意你*"是使用 Google AI Studio 和 Gemini API 进行专业或商业目的开发的开发者……"*
由你决定:我将其用于不涉及专有数据的个人项目(主要是搜索、比较和探索新主题)。
你可以访问 Playground,在那里你可以立即开始聊天,切换模型(在我的情况下,我想测试 Gemma 4 的高端:31B 和 MoE)。你还可以设置思考深度(最小、高)。
免费层的 API 密钥允许你每天进行多达 1500 次调用!
速率限制都在这里。
具体来说,Gemma-4 模型基本上是免费的。
稍后我将向你展示如何将本地 Perplexica 配置为强大的工具,使用 Gemma4-MoE 和免费 API 调用。
所以,创建你的第一个 API 密钥,并将其保存在安全的地方。我们很快就会使用它。
3、MiniPC 作为本地 AI 服务器
我有一台旧的 Beelink mini-PC,4 年前花了我 100 美元。这是一台低端电脑,配备英特尔第 6 代 CPU,没有独立 GPU,16GB 内存。而且 CPU 只有 4 个线程。
但是……我这台不再使用的 miniPC,即使运行 Gemma4-E4B 量化模型也能以不错的速度运行。
想法很简单:
- 你可以使用旧笔记本电脑(装有 Linux 的旧 MacBook)或旧 PC
- 通过 WiFi 将其连接到本地网络
- 使用 llama.cpp 服务器和一些技巧运行模型
并获得一个远程、完全本地的 AI,不会降低你自己的工作电脑的速度。
4、在旧硬件上运行 Gemma-4-E4B
超级简单。
1)你需要模型
我建议你从 Hugging Face 上的 Unsloth Gemma 4 专用仓库 下载 GGUF 模型:
- gemma-4-E4B-it-Q3_K_S.gguf 对应 4B 活跃参数
- gemma-4-E2B-it-Q4_K_M.gguf 对应 2B 活跃参数
下载到一个新的项目目录:我将其命名为 GoogleAIstudio。
2)你需要 llama.cpp
获取 llama.cpp 的最新二进制文件。你可能已经拥有的旧版本不一定能工作。
以下是当我尝试使用 b8429 版本运行它时发生的情况……
获取最新版本!
在撰写本文时,b8705 是最后一个版本。
我在 Windows 上,所以我下载了仅 CPU 的 X64 架构二进制文件:
将 ZIP 压缩包解压到同一目录(我的名为 GoogleAIstudio)。
在同一目录中打开终端并运行:
.\llama-server.exe -m .\gemma-4-E4B-it-Q4_K_S.gguf -c 64000 -ngl 0 -ctk q4_0 -ctv q4_0 --mmap --temp 1.0 --top-p 0.95 --top-k 64 --port 8888 --host 0.0.0.0
这里的关键参数是:
--port 8888这是 API 的监听端口--host 0.0.0.0这里告诉将 API 暴露到网络。实际上你可以看到 Windows 正在询问你是否允许 llama-server.exe 访问网络(点击允许)
就像我在上面小视频中所做的那样,打开一个新终端并运行此命令:
ipconfig
你将获得有关 PC 上所有网络适配器的信息,类似这样
无线局域网适配器 Wi-Fi 2:
连接特定的 DNS 后缀 . : nexxt
IPv6 地址. . . . . . . . . . . : 2001:b07:6440:da7b:3542:8fe1:62f7:1c9
临时 IPv6 地址. . . . . . : 2001:b07:6440:da7b:205b:32ec:4099:deb3
临时 IPv6 地址. . . . . . : 2001:b07:6440:da7b:4d8b:a209:4120:d0b5
本地链接 IPv6 地址 . . . . . : fe80::eec7:e9e9:80cf:a71d%5
IPv4 地址. . . . . . . . . . . : 192.168.1.75
子网掩码 . . . . . . . . . . . : 255.255.255.0
默认网关 . . . . . . . . . : fe80::5a76:acff:fe04:9220%5
192.168.1.254
我的 miniPC IP 地址是标记为"IPv4 地址"的那个:192.168.1.75。这是网络上 llama-server 的地址,API 暴露在 8888 端口……
http://192.168.1.75:8888
5、测试本地网络模型 —— 交互方式
我创建了一个小 CLI 应用程序,让你立即了解这些模型有多好。另外,llama-cpp 的内置 Web 聊天已经可用。
你甚至可以从网络上的另一台计算机运行它(只需在浏览器中输入 IP:端口,在我的情况下是 http://192.168.1.75:8888)
对于 CLI 应用程序,我们需要一些库,最好全局安装。
打开终端并运行:
pip install openai rich
这个 CLI 应用程序能够从远程 llama-server 流式传输结果,并在终端中以 Markdown 格式渲染推理过程和最终输出。
5.1 导入
我们需要 rich 来在终端中渲染 Markdown,以及 openai 库来处理 chat.completion 的 API 调用。
import sys
import time
from openai import OpenAI
from rich.console import Console
from rich.markdown import Markdown
from rich.live import Live
from rich.panel import Panel
from rich.table import Table
# 初始化 Rich 控制台
console = Console()
client = OpenAI(
base_url="http://192.168.1.75:8888/v1", #根据你的 IP 调整
api_key="sk-no-key-required"
)
请注意,base_url 必须根据你的网络设置和上一步发现的 IP 地址。
5.2 用户输入函数
我想允许在终端中进行长文本复制/粘贴,所以我创建了一个函数来支持多行输入。输入仅在最后按 Ctrl+Z 和 Enter(在 Windows 上)或 Linux/mac 上的 Ctrl+D 后才被接受。
def get_multiline_input():
console.print("\n[bold cyan]User[/bold cyan] [dim](Ctrl+D/Z 发送, 'exit' 退出):[/dim]")
contents = []
try:
while True:
line = sys.stdin.readline()
if not line:
break
contents.append(line)
except EOFError:
pass
return "".join(contents).strip()
5.3 响应函数
因为我们使用流式选项发送 API 调用,所以我们将几乎立即开始打印响应,保持一个小缓冲区以在终端中渲染 Markdown:
def chat():
messages = [
{"role": "system", "content": "你是一个有用的助手。使用 Markdown 进行格式化。"}
]
console.print(Panel.fit("[bold reverse] 本地大语言模型聊天 [/bold reverse]\n连接到 192.168.1.75:8888", border_style="green"))
# 这里是主循环
while True:
user_text = get_multiline_input()
if user_text.lower() in ['exit', 'quit']:
console.print("[yellow]正在关闭会话...[/yellow]")
break
if not user_text:
continue
messages.append({"role": "user", "content": user_text})
# 启动 KPI 计时器
try:
start_time = time.time()
ttft_time = None
response = client.chat.completions.create(
model="gemma",
messages=messages,
temperature=1.0,
stream=True
)
console.print("\n[bold magenta]助手:[/bold magenta]")
# 我使用 rich.live 来渲染控制台
full_response = ""
with Live(console=console, refresh_per_second=10, vertical_overflow="visible") as live:
for chunk in response:
# 捕获首 token 时间
if ttft_time is None:
ttft_time = time.time() - start_time
content = chunk.choices[0].delta.content
if content:
full_response += content
live.update(Markdown(full_response))
total_time = time.time() - start_time
# 在小表格中显示性能指标
stats_table = Table(show_header=False, box=None, padding=(0, 2))
stats_table.add_row(
f"[dim]TTFT: {ttft_time:.2f}s[/dim]",
f"[dim]总计: {total_time:.2f}s[/dim]",
f"[dim]速度: {len(full_response.split()) / total_time:.1f} 词/秒[/dim]"
)
console.print(stats_table)
messages.append({"role": "assistant", "content": full_response})
except Exception as e:
console.print(f"\n[bold red]错误:[/bold red] {e}")
最后我们调用 Python 应用程序:
if __name__ == "__main__":
chat()
我的文件名为 ATEST_remoteGemma4.py。要使用 Python 应用程序,请从终端运行:
python .\ATEST_remoteGemma4.py
这就是将要发生的事情……
你也可以在我的 GitHub 仓库中找到整个代码。
6、在Perplexica中使用它
你可以在 CLI 应用程序中调用它,或者轻松将其连接到 LMStudio,甚至 Opencode(你的本地 AI 智能体堆栈)。
但今天我将向你展示如何将其与 Perplexica 一起使用,这是著名的 Perplexity 的本地版本。
当你的 vane/Perplexica 已经在运行(对我来说在 Docker 容器中),启动浏览器并点击 ⚙️ 设置图标:
现在我们想要 Gemini 连接(也适用于 GoogleAIstudio API),使用我们 5 分钟前创建的 API 密钥。
你会看到 Perplexica 已经扫描了所有可用模型:我高亮显示了 Gemma4 的模型。
记住检查哪些模型有免费层!!
目前,我只能看到 Gemma4 是免费的。
返回 Perplexica 主页,将模型切换到我们刚刚配置的新连接中的模型,然后运行你的查询
7、为什么 Gemma 4 是游戏规则改变者
在我们结束之前,让我们看看从 Gemma 2 到 Gemma 4 的跳跃对"显卡穷人"来说为什么重要。
- 系统提示革命:在以前的版本中,你必须将指令"黑客攻击"到用户消息中。Gemma 4 的原生系统角色支持意味着模型实际上保持角色并更好地遵循约束,即使是小尺寸。
- 可呼吸的上下文:从旧的小型模型的狭窄 8K 上下文移动到 E2B/E4B 系列的128K改变了一切。你现在可以将整个技术文档 PDF 输入到 4 线程的 mini-PC 并获得有意义的答案。
- "思考"优势:新的推理模式适用于所有模型。即使是边缘模型现在也可以"暂停"并规划,这大大减少了复杂任务(如编码或逻辑谜题)期间的幻觉。
8、结束语
我们经常认为要站在 AI 的" bleeding edge",我们需要花数千美元购买最新的 GPU 或月度订阅。Gemma 4 证明了相反的观点。
结合谷歌高效的开放权重、llama.cpp的轻量级强大功能,以及用旧 mini-PC 进行的"硬件考古",你可以用几瓦电的成本构建一个私人的 AI 强大工具。
底线是:
- 不要扔掉旧技术:那台第 6 代英特尔 NUC 或积灰的 MacBook 是专用大语言模型服务器的完美候选者。
- 混合是王道:使用本地边缘模型(E2B/E4B)进行私人的、快速的日常任务,并连接到Google AI Studio API进行"繁重"的推理任务——全部免费。
- 智能体是未来:通过原生函数调用和系统提示,Gemma 4 终于准备好超越"聊天",开始在 Perplexica 等应用程序中做工作。
我重新爱上了 Gemma,因为它感觉谷歌终于开始为重视效率而非蛮力的开发者构建。所以,去把那台旧笔记本电脑上的灰尘掸掉,获取 GGUF 文件,开始构建你自己的本地 AI 帝国。
原文链接:Gemma 4 on the Edge: high-performance AI for the "PoorGPUguy"
汇智网翻译整理,转载请标明出处