googleGemma 3 - 本地运行指南

如何使用我们的 GGUF 在 llama.cpp、Ollama、Open WebUI 上有效运行 Gemma 3,以及如何使用 Unsloth 进行微调!

Google 发布了 Gemma 3,新增 270M 模型,并保留之前的 1B、4B、12B 和 27B 尺寸。270M 和 1B 为仅文本模型,而更大型号支持文本和视觉。我们提供 GGUF,并提供如何有效运行它的指南,以及如何微调与执行 强化学习 使用 Gemma 3!

circle-check

运行教程微调教程

Unsloth 是唯一在 float16 机器上可用于 Gemma 3 推理和训练的框架。 这意味着带有免费 Tesla T4 GPU 的 Colab 笔记本也能运行!

circle-info

根据 Gemma 团队,推理的最佳配置是 temperature = 1.0,top_k = 64,top_p = 0.95,min_p = 0.0

Unsloth 上传的 Gemma 3,带有最佳配置:

⚙️ 推荐的推理设置

根据 Gemma 团队,官方推荐的推理设置为:

  • 温度为 1.0

  • Top_K 为 64

  • Min_P 为 0.00(可选,但 0.01 效果很好,llama.cpp 的默认值是 0.1)

  • Top_P 为 0.95

  • 重复惩罚(Repetition Penalty)为 1.0。(在 llama.cpp 和 transformers 中 1.0 表示禁用)

  • 聊天模板:

    <bos><start_of_turn>user\nHello!<end_of_turn>\n<start_of_turn>model\nHey there!<end_of_turn>\n<start_of_turn>user\nWhat is 1+1?<end_of_turn>\n<start_of_turn>model\n
  • 带有以下内容的聊天模板 \n换行已渲染(最后一行除外)

triangle-exclamation

✨在手机上运行 Gemma 3

要在手机上运行这些模型,我们建议使用任何能够在边缘设备(如手机)上本地运行 GGUF 的移动应用。微调后可以导出为 GGUF,然后在手机上本地运行。请确保手机有足够的内存/性能来处理模型,因为可能会过热,因此我们建议在此场景中使用 Gemma 3 270M 或 Gemma 3n 模型。你可以尝试 开源项目 AnythingLLM 的arrow-up-right 移动应用,可在 Android 此处arrow-up-rightChatterUIarrow-up-right,这些都是在手机上运行 GGUF 的优秀应用。

circle-check

🦙 教程:如何在 Ollama 中运行 Gemma 3

  1. 安装 ollama 如果你还没有安装!

  1. 运行模型!注意如果失败,您可以在另一个终端中调用 ollama serve我们在 Hugging Face 上传中包含了所有修复和建议参数(如 temperature 等),位于 params 在我们的 Hugging Face 上传中!你可以将模型名称 'gemma-3-27b-it-GGUF' 更改为任何 Gemma 模型,例如 'gemma-3-270m-it-GGUF:Q8_K_XL'。

📖 教程:如何在 llama.cpp 中运行 Gemma 3 27B

  1. 获取最新的 llama.cpp此处的 GitHubarrow-up-right。您也可以按照下面的构建说明进行。若 -DGGML_CUDA=ON 更改为 -DGGML_CUDA=OFF 如果您没有 GPU 或仅想要在 CPU 上进行推理。 对于 Apple Mac / Metal 设备,设置 -DGGML_CUDA=OFF 然后照常继续 - Metal 支持默认启用。

  1. 如果您想直接使用 llama.cpp 来加载模型,你可以如下操作:(:Q4_K_XL)是量化类型。你也可以通过 Hugging Face(第 3 点)下载。这与 ollama run

  1. 通过以下方式下载模型(在安装 pip install huggingface_hub hf_transfer )。你可以选择 Q4_K_M,或其他量化版本(例如 BF16 全精度)。更多版本见: https://huggingface.co/unsloth/gemma-3-27b-it-GGUFarrow-up-right

  1. 运行 Unsloth 的 Flappy Bird 测试

  2. 编辑 --threads 32 用于设置 CPU 线程数, --ctx-size 16384 用于上下文长度(Gemma 3 支持 128K 上下文长度!), --n-gpu-layers 99 用于指定将多少层卸载到 GPU。若 GPU 出现内存不足,请尝试调整它。若仅使用 CPU 推理,请移除此项。

  3. 用于对话模式:

  1. 对于非对话模式以测试 Flappy Bird:

我们来自 https://unsloth.ai/blog/deepseekr1-dynamicarrow-up-right 1.58bit 博客的完整输入是:

triangle-exclamation

🦥 在 Unsloth 中微调 Gemma 3

Unsloth 是唯一在 float16 机器上可用于 Gemma 3 推理和训练的框架。 这意味着带有免费 Tesla T4 GPU 的 Colab 笔记本也能运行!

circle-exclamation

Unsloth 微调修复

我们在 Unsloth 的解决方案有三方面:

  1. 将所有中间激活保持为 bfloat16 格式 —— 可以是 float32,但这会使用 2 倍以上的显存或内存(通过 Unsloth 的异步梯度检查点),

  2. 使用张量核在 float16 中执行所有矩阵乘法,但手动进行上/下转换,而不是依赖 Pytorch 的混合精度 autocast,

  3. 将所有不需要矩阵乘法的选项(如 layernorm)上采样为 float32,

🤔 Gemma 3 修复分析

Gemma 3 的 1B 到 27B 超出了 float16 的最大值 65504

首先,在我们微调或运行 Gemma 3 之前,我们发现使用 float16 混合精度时,梯度和 激活会变为无穷大 不幸的是。这种情况发生在只有 float16 张量核的 T4 GPU、RTX 20x 系列和 V100 GPU 上。

对于更新的 GPU,如 RTX 30x 或更高,A100、H100 等,这些 GPU 具有 bfloat16 张量核,所以不会出现这个问题! 但为什么会这样?

Float16 只能表示最大到 65504的数值,而 bfloat16 可以表示高达 10^38的巨大数值!但请注意两种数值格式都只使用 16 位!这是因为 float16 分配了更多位以便更好地表示更小的小数,而 bfloat16 无法很好地表示小数部分。

但为什么不用 float32?可惜在 GPU 上 float32 进行矩阵乘法非常慢 —— 有时慢 4 到 10 倍!所以我们不能这样做。

最后更新于

这有帮助吗?