Gemma 2 是 Google 最新发布的开源大语言模型。它有两种规模:90 亿(9B)参数和 270 亿(27B)参数,分别具有基础(预训练)和指令调优版本,拥有 8K Tokens 的上下文长度:
-
Gemma-2-9b: 90 亿参数基础模型版本 -
Gemma-2-9b-it: 90 亿参数基础模型的指令调优版本 -
Gemma-2-27B: 270 亿参数基础模型版本 -
Gemma-2-27B-it: 270 亿参数基础模型的指令调优版本
Gemma 2 模型的训练数据量约为其第一代的两倍,总计 13 万亿 Tokens(270 亿模型)和 8 万亿 Tokens(90 亿模型)的网页数据(主要是英语)、代码和数学数据。同时,相比较第一代,Gemma 2 的推理性能更高、效率更高,并在安全性方面取得了重大进步。
许可协议: Gemma 2 与第一代使用相同的许可证,这是一个允许再分发、微调、商业用途和衍生作品的宽松许可证。
性能优异: Gemma 2 27B 版本在同规模级别中性能最佳,甚至比两倍于其尺寸的机型更具竞争力。9B 版本的性能在同类产品中也处于领先地位,超过了 Llama 3 8B 和其他同规模的开放模型。
其他关于 Gemma 2 的介绍信息,可以参见 Google 官方博客:https://blog.google/technology/developers/google-gemma-2/
Google 重磅发布产品,我们肯定需要体验以下。今天,老牛同学就和大家一起,分别通过 2 种方式在个人笔记本电脑本地部署和体验 Gemma2-9B 大模型。
方式一:通过 Ollama 部署大模型
关于 Ollama 是什么以及它的使用方式,老牛同学前面的博文中有介绍,本文不在赘述,感兴趣的朋友可以看一下之前的博文。
Ollama 管理和维护 Gemma 2 比较简单,主要流程如下:
-
下载并安装 Ollama 软件(Windows/Linux/MacOS 均支持):https://ollama.com/download -
通过 Ollama 下载并启动 Gemma 2 大模型:
ollama run gemma2:9b
模型文件大小为 5.4GB 左右,需要耐心等待模型下载完成。下载完成之后,Ollama 自动启动模型,就可以通过 Ollama 进行对话了:
如果觉得通过控制台的方式对话体验不好,可以部署 WebUI 的方式与模型对话。WebUI 的部署方式,可以参见老牛同学之前的博文:https://mp.weixin.qq.com/s/P_ufvz4MWVSqv_VM-rJp9w,主要部署步骤:
-
下载并安装 Node.js 工具:https://nodejs.org/zh-cn -
下载 ollama-webui工程代码:git clone https://github.com/ollama-webui/ollama-webui-lite ollama-webui -
切换 ollama-webui代码的目录:cd ollama-webui -
设置 Node.js 工具包镜像源(下载提速): npm config set registry http://mirrors.cloud.tencent.com/npm/ -
安装 Node.js 依赖的工具包: npm install -
最后,启动 Web 可视化界面: npm run dev
然后,通过浏览器打开 WebUI 对话界面了:http://localhost:3000/
方式二:通过 GGUF 部署大模型
GGUF模型文件格式是为了快速推理和优化内存使用而设计的,支持更复杂的令牌化过程和特殊令牌处理,能更好地应对多样化的语言模型需求。GGUF就一个文件,也简化了模型交换和部署的过程,它对促进模型的普及和应用有着积极作用。
GGUF 模型文件列表:https://modelscope.cn/models/LLM-Research/gemma-2-9b-it-GGUF/files
GGUF 模型文件名称格式,如gemma-2-9b-it-Q5_K_M.gguf等:
-
it代表本模型是对基线模型进行了微调,用于更好地理解和生成遵循指令(instruction-following)的文本,以提供符合要求的响应
-
Q4/Q5 等代表模型权重的量化位数(其中Q是Quantization的缩小,即量化),是一种模型压缩技术,用于减少模型大小,同时降低对计算资源的需求(特别是内存),但又尽量保持模型的性能;数字4或5则代表量化精度的位数(Q4 是 4 位,Q5 是 5 位等),精度越高模型体积和内存使用也会越大,但仍然远小于未量化的基线模型
-
K_M/K_S代表了与注意力机制相关的特定配置,K_M 可能是指 Key 的 Mask,即用来屏蔽某些位置的键值对,防止它们在注意力计算中被考虑;而 K_S 可能是指 Key 的 Scale 或 Size,涉及到键向量缩放,这是在多头注意力机制中常见的操作,以稳定梯度
点击下载图标即可下载,由于文件较大,浏览器的下载容易过程容易终端,重试可继续下载(假设下载本地的文件名为:Gemma-2-9B-it-Q5_K_M.gguf):
-
打开一个终端窗口,切换到 GGUF 文件所在目录: cd Gemma2 -
切换 Python 虚拟环境: conda activate PY3.12 -
安装 Python 依赖包:
pip install llama-cpp-pythonpip install openaipip install uvicornpip install starlettepip install fastapipip install sse_starlettepip install starlette_contextpip install pydantic_settings
或者,我们也可以一把进行安装:pip install -r requirements.txt
# requirements.txtllama-cpp-pythonopenaiuvicornstarlettefastapisse_starlettestarlette_contextpydantic_settings
最后,启动大模型:
# 启动Llama大模型python -m llama_cpp.server --host 0.0.0.0 --model ./Gemma-2-9B-it-Q5_K_M.gguf --n_ctx 2048
模型启动命令中,n_ctx 2048代表单次回话最大 Token 数量。
启动成功,我们应该看到类似如下的信息:INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

最后一步: 我们使用 openai 库在个人电脑上快速搭建客户端。Python 客户端代码(Client.py)如下:
-
我们使用OpenAI接口来与 Gemma 交互,上面启动模型的最后,我们看到服务端 IP 是本地,端口是8000 -
接着,我们使用 2 条信息对历史记录进行初始化:第一个条是系统信息,第二个条是要求模型自我介绍的用户提示,为了避免长篇大论,我这里限制了回答的长度和字数 -
接下来,通过 >提示符等待用户(即我们)输入,输入bye、quit和exit任意一个即代表退出客户端
# Client.pyfrom openai import OpenAI# 注意服务端端口,因为是本地,所以不需要api_keyclient = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")# 对话历史:设定系统角色是一个只能助理,同时提交“自我介绍”问题history = [{"role": "system", "content": "你是一个智能助理,你的回答总是正确的、有用的和内容非常精简."},{"role": "user", "content": "请用中文进行自我介绍,要求不能超过5句话,总字数不超过100个字。"},]print("


