Ollama 加载本地下载的gguf大模型

前言

在本地安装好ollama后,下载加载模型总是失败,出现的错误信息为:

ollama run deepseek-r1:1.5b

Error: pull model manifest: Get "https://registry.ollama.ai/v2/library/deepseek-r1/manifests/1.5b": net/http: TLS handshake timeout。 重试了比较多的方法,都没能成功,所以出现了本文离线下载gguf模型文件,然后再倒入ollama运行的原因。

如何下载离线模型

最快下载离线模型的方式是直接去huggingface上找模型。比如找千问的模型

直接找到的模型,看模型文件都是safetensors

ollama没法直接加载safetensors格式。

safetensors和gguf模型格式区别 

  • Safetensors

    • 由 Hugging Face 推出的一种新型安全的模型存储格式,主要用于保存模型的权重参数。

    • 特别关注模型的安全性和隐私保护,不包含执行代码,减少了模型文件的大小并提高了加载速度。

    • 支持零拷贝(zero-copy)和懒加载(lazy loading),没有文件大小限制,并且支持 bfloat16/fp8 数据类型。

    • 不包含模型的元数据信息,在大模型高效序列化、数据压缩、量化等方面存在不足。

  • GGUF

    • 是一种针对大模型的二进制文件格式,专为 GGML 及其执行器快速加载和保存模型而设计,是 GGML 格式的替代者。

    • 包含加载模型所需的所有信息,无需依赖外部文件,简化了模型部署和共享的过程,有助于跨平台操作。

    • 支持量化技术,可以降低模型的资源消耗,并且设计为可扩展的,以便在不破坏兼容性的情况下添加新信息。

小结:

  • Safetensors 更侧重于安全性和效率,适合快速部署和对安全性有较高要求的场景。

  • GGUF 格式则是一种为大模型设计的二进制文件格式,优化了模型的加载速度和资源消耗,适合需要频繁加载不同模型的场景。

如何找到gguf模型文件

直接在unsloth下搜索,大部分都是gguf格式的。https://huggingface.co/unsloth

safetensors如何转gguf格式

参考文献如何将SafeTensors模型转换为GGUF格式_safetensors转换为gguf-CSDN博客 

注意:不是所有的safetensors格式都可以转换成gguf的

如何加载本地大模型

  • 将模型文件拷贝到ollama的模型文件

cp xxxx.gguf ~/.ollama/models

  • 创建Modelfile文件

FROM qwen2.5-7b-instruct-q5_0.gguf

# set the temperature to 1 [higher is more creative, lower is more coherent]
PARAMETER temperature 0.7
PARAMETER top_p 0.8
PARAMETER repeat_penalty 1.05
PARAMETER top_k 20

TEMPLATE """{{ if .Messages }}
{{- if or .System .Tools }}<|im_start|>system
{{ .System }}
{{- if .Tools }}

# Tools

You are provided with function signatures within <tools></tools> XML tags:
<tools>{{- range .Tools }}
{"type": "function", "function": {{ .Function }}}{{- end }}
</tools>

For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>
{{- end }}<|im_end|>
{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 -}}
{{- if eq .Role "user" }}<|im_start|>user
{{ .Content }}<|im_end|>
{{ else if eq .Role "assistant" }}<|im_start|>assistant
{{ if .Content }}{{ .Content }}
{{- else if .ToolCalls }}<tool_call>
{{ range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}}
{{ end }}</tool_call>
{{- end }}{{ if not $last }}<|im_end|>
{{ end }}
{{- else if eq .Role "tool" }}<|im_start|>user
<tool_response>
{{ .Content }}
</tool_response><|im_end|>
{{ end }}
{{- if and (ne .Role "assistant") $last }}<|im_start|>assistant
{{ end }}
{{- end }}
{{- else }}
{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ end }}{{ .Response }}{{ if .Response }}<|im_end|>{{ end }}"""

# set the system message
SYSTEM """You are Qwen, created by Alibaba Cloud. You are a helpful assistant."""
 

  • 加载模型

ollama create qwen2.5-coder-7b-q3km -f Modelfile

  • 运行模型

ollama run qwen2.5-coder-7b-q3km

ollama如何同时加载多个大模型 

如果本地资源充足,ollama可以同时加载多个大模型,梳理出来有三种方式:

方式1:docker镜像隔离

-- 下载docker镜像

docker pull ollama/ollama:latest

-- 启动镜像实例

docker run -d \ --name ollama-model1 \ -p 11434:11434 \ -v ollama-model1:/root/.ollama \ ollama/ollama:latest \ serve --model llama3:8b

方式2:Server 不同的端口启动

-- 针对每个模型文件创建Modelfile,然后加载模型

ollama create llama3-8b -f llama3.Modelfile

ollama create mistral-7b -f mistral.Modelfile

方式3:同实例同时加载多个模型

  • 确保使用的是 Ollama 的最新版本(v0.1.33 或更高版本) 

  • 设置环境变量,OLLAMA_NUM_PARALLEL 环境变量来指定并发请求数量。OLLAMA_MAX_LOADED_MODELS 环境变量来指定同时加载的模型数量。

set OLLAMA_NUM_PARALLEL=2
set OLLAMA_MAX_LOADED_MODELS=2
ollama serve

ollama run gemma:2b
ollama run llama3:8b

### 如何在Ollama加载多个GGUF文件 为了实现多模型组合的功能需求,在Ollama环境中加载多个GGUF(Graph-based General Unification Format)文件可以通过特定接口或命令完成。通常情况下,对于支持多种配置文件加载的应用框架而言,存在类似的模式来处理不同资源文件的集成。 针对Ollama平台的具体操作方法如下: 当涉及到加载多个 GGUF 文件时,可以参照官方文档中的指导说明[^1]。假设当前版本允许通过命令行工具指定路径参数的方式导入额外的数据集或者预训练权重文件,则可能的形式为: ```bash ollama load --model my_model --files path/to/file1.gguf,path/to/file2.gguf ``` 此命令示意用户能够一次性传递多个 GGUF 文件给目标模型 `my_model` 进行加载。实际语法可能会依据具体版本有所调整,请查阅最新发布的API手册获取最准确的信息。 另外一种可能是利用编程接口批量读取并应用这些 GGUF 文件的内容到内存中的模型实例上。如果 SDK 提供了相应的函数库用于管理此类任务,那么开发者可以根据示例代码片段构建适合应用场景的工作流逻辑。 ```python from ollama import ModelLoader loader = ModelLoader() for file_path in ["path/to/file1.gguf", "path/to/file2.gguf"]: loader.add_file(file_path) model_instance = loader.create_model("combined_model_name") ``` 上述 Python 伪代码展示了如何创建一个自定义名称的新模型,并将其关联至一系列预先准备好的 GGUF 数据源之上。需要注意的是,具体的类名、方法签名以及内部机制应当依照 Ollama 官方提供的开发指南为准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值