本地部署LLM踩坑日记(二)——Ollama更新之后挂载gguf模型的坑

 

        本来是打算先写Anaconda虚拟环境的,不过正好在更新了Ollama之后遇到了新的问题,虽然Ollama不是最高效运行LLM的范式,但还是相对方便和友好的,特别是如果只是个人或小组使用,并发需求不是那么大时,仍然是一个不错的选择。此外,Ollama可以响应请求后自动挂载、卸载模型文件,这一点还是非常方便的,例如在使用Dify编辑工作流时,首先使用MiniCPM-V来识别图像,之后让Deepseek-R1或Qwen-QwQ来推理时,Ollama在运行MiniCPM-V之后,将其卸载,并重新挂载Deepseek-R1或Qwen-QwQ。这次的坑比较意外,因为在更新之前,我使用Ollama挂载本地的gguf模型运行正常,但更新后的第二天,突然发现模型回答出现【乱码】【拒绝回答】【中途停止】【答非所问】【非必要补全】等情况。卸载重新安装后,问题依旧。最后发现是因为Ollama更新后对挂载gguf模型文件的modelfile格式要求有变化,在重新编辑modelfile后,问题解决。既然说到更新和卸载重装,索性把这部分一起写一下。

一、Ollama的更新和卸载

        Ollama初始安装还是非常简单的,Mac和Windows系统下载即可,Linux则可以使用官方提供的脚本命令自动运行脚本,但Linux下的卸载和更新比较麻烦一些,下面仅适用于Linux系统。

        注意:正常更新不需要卸载旧的版本,只是单独介绍两个操作而已。

1.卸载

        第一步,停止移除Ollama服务:

sudo systemctl stop ollama
sudo systemctl disable ollama
sudo rm /etc/systemd/system/ollama.service

        第二步,删除所有Ollama文件:

sudo rm $(which ollama)

        第三步,移除模型文件和用户(组)

sudo rm -r /usr/share/ollama
sudo userdel ollama
sudo groupdel ollama

        最后,删除安装目录

sudo rm -rf /usr/local/lib/ollama

2.更新

        安装官方文件,建议在更新前删除旧的Ollama库,但是实测,直接升级也并没有问题。

sudo rm -rf /usr/lib/ollama

        升级只需要再次运行安装脚本即可:

curl -fsSL https://ollama.com/install.sh | sh

二、Modelfile的编写

        之前在挂载gguf格式的模型文件时,只需要在相同目录下,创建一个modelfile,在其中写一条语句注明文件路径,Ollama就可以正确挂载和调用,但这样写其实是不规范的,具体的规范写法应当参考这篇文档

        因为Ollama中默认使用Ollama run {{Modelname}}命令运行的模型大多数是Q4量化的,如果对精度有要求,且显存容量允许时,完全可以使用Q8或fp16等更高精度模型,这时就可以通过HuggingFace(或镜像站)或者魔搭社区等网站下载对应模型文件,之后编写modelfile以便用Ollama挂载。(如果能够正确访问Hugging Face,HuggingFace中可以生成Ollama run 语句的,但因为我的模型文件是以前已经下载好的,下面就以DeepSeek-R1蒸馏Qwen14BQ6量化模型为例,介绍如何编写modelfile。

        最开始一行还是和以前一样,首先要写FROM 语句,定义Create模型时使用的基本模型文件:

FROM ./ollama-model.gguf

        接下来就是最重要的,之前可以非必填,现在需要填写的TEMPLATE提示模板,格式如下:

TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
"""

        下面可以定义参数如温度、top_k、top_p等值,格式如下:

PARAMETER <parameter> <parametervalue>

        不同模型modelfile的写法不一样,具体可以参考Ollama网站模型页面中的这里,template对应TEMPLATE,params对应PARAMETER:

        下面以文件名为DeepSeek-R1-Distill-Qwen-14B-GGUF_Q6_K_L的文件为例,提供一个完整的modelfile,以供参考。

FROM ./DeepSeek-R1-Distill-Qwen-14B-Q6_K_L.gguf

TEMPLATE """{{- if .System }}{{ .System }}{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1}}
{{- if eq .Role "user" }}<|User|>{{ .Content }}
{{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}{{- if not $last }}<|end▁of▁sentence|>{{- end }}
{{- end }}
{{- if and $last (ne .Role "assistant") }}<|Assistant|>{{- end }}
{{- end }}"""
PARAMETER stop <|begin▁of▁sentence|>
PARAMETER stop <|end▁of▁sentence|>
PARAMETER stop <|User|>
PARAMETER stop <|Assistant|>

        之后,使用下面的命令创建模型就可以正确使用了:

ollama create Deepseek-R1-14B-Q6 ./Modelfile
ollama run Deepseek-R1-14B-Q6

三、总结

        Ollama更新后,需要使用正确的modelfile才能正常创建和使用gguf格式的模型文件,如果在回答中出现【乱码】【拒绝回答】【中途停止】【答非所问】【非必要补全】等问题,可以尝试使用以上办法进行解决。

 

### 如何使用OllamaGGUF格式离线加载DeepSeek R1本地模型 为了实现通过Ollama框架以及GGUF格式来离线加载DeepSeek R1模型,以下是详细的说明: #### 准备工作 首先需要安装并配置好Ollama工具链。可以通过以下命令完成Ollama安装: ```bash curl https://ollama.ai/install.sh | sh ``` 此脚本会自动检测操作系统环境,并下载适合版本的进制文件[^3]。 接着验证安装是否成功: ```bash ollama --version ``` #### 下载DeepSeek R1模型 由于目标是离线部署,因此需提前获取DeepSeek R1模型文件。访问官方仓库或者可信第三方资源站点下载对应架构下的预训练权重文件。通常这些文件会被打包成`.bin`或压缩包形式提供给开发者使用[^4]。 注意:如果引用中的链接指向特定软件组件而非所需AI模型,则应忽略那些无关信息而专注于寻找正确的模型源地址。 #### 转换至GGUF格式 一旦获得原始模型参数集之后,下一步就是将其转换成为兼容于OLLAMA运行时所支持的数据交换标准——即General Graph Format Unified (GGUF)[^5]。这一步骤可能涉及编写自定义脚本来解析原生结构并将之映射到新的表示方法上;也可能利用现成库函数简化过程。 假设存在这样一个Python脚本用于执行上述操作: ```python from transformers import AutoModelForCausalLM, AutoTokenizer import gguf_utils # 假设这是处理gguf的相关模块 model_name_or_path = "path/to/deepseek-r1" output_gguf_file = "./deepseek_r1.gguf" # 加载HuggingFace上的PyTorch模型实例及其配套词表 model = AutoModelForCausalLM.from_pretrained(model_name_or_path) tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) # 使用假定存在的工具类封装逻辑保存为gguf格式 gguf_utils.save_model_as_gguf(model=model, tokenizer=tokenizer, output_filepath=output_gguf_file) ``` #### 部署与测试 最后,在完成了必要的前期准备活动以后就可以尝试启动服务端程序并通过API接口发起请求来进行推理计算了。例如可以这样调用刚刚创建好的LLM应用: ```bash ollama run deepseek-r1 --file ./deepseek_r1.gguf ``` 以上便是关于怎样借助Ollama平台配合GGUF序列化机制达成对DeepSeek系列大语言模型实施本地化管理的一般流程概述[^6]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值