Loading

Ollama 安装与模型部署

本文主要是介绍如何内网、离线等无法直接访问 ollma 官网等外部网站的情况下,安装 ollama。

1 在线

不必多说,直接参考官方文档即可。

2 离线安装(linux 服务器)

参考:

2.1 ollama 程序下载 & 离线安装

ollama 支持程序安装以及通过 docker 的方式安装,程序安装非常简单,直接在官网下载对应操作系统的程序,然后直接安装即可。单个人还是推荐使用 docker 方式进行安装,方便进行程序以及环境管理,也方便迁移。

1)本地安装方式

直接访问官网下载页:https://ollama.com/download ,按自己的操作系统下载好对应的程序,然后上传到离线机器上安装即可。

2)docker 安装方式

首先,关于 docker 本身的安装不做赘述,请先自行搜索安装好 docker 环境。

  1. 如果机器可以联网,直接拉取镜像 ollama docker 镜像即可:docker run -d -v /home/ollama:/root/.ollama -p 11435:11434 --name ollama ollama/ollama

  2. 如果机器无法联网,离线下载 Docker 镜像通常需要先在一个可联网的设备上拉取镜像,然后将其导出为 tar 文件,最后将该文件传输到离线设备并加载。以下是详细步骤:

    a. 步骤 1:在可联网设备上拉取镜像

    • 拉取 Ollama 镜像
      在联网的设备上打开终端或命令行工具,运行以下命令:

      docker pull ollama/ollama
      

      可以采用国内的镜像源来加速:

      > 参考:https://blog.csdn.net/weixin_47575974/article/details/145922927
      > 国内镜像源汇集网站:渡渡鸟: https://docker.aityp.com/#google_vignette
      
      # 临时使用,命令行方式
      # docker pull [镜像源]/[镜像名称]
      docker pull docker.registry.cyou/ollama/ollama
      
      # 如需将镜像源配置到系统中,参考上述链接
      
    • 检查镜像是否成功拉取
      使用以下命令查看已拉取的镜像:

      docker images
      

      确保 ollama/ollama 镜像出现在列表中。

    b. 步骤 2:导出镜像为 tar 文件

    • 导出镜像
      将拉取的镜像导出为 tar 文件,以便离线传输:
      docker save ollama/ollama > ollama-docker-image.tar
      
      这会在当前目录下生成一个名为 ollama-docker-image.tar 的文件。

    c. 步骤3:将 tar 文件传输到离线设备

    • 传输文件
      使用外部存储设备(如 USB 驱动器)或网络传输工具(如 SCP),将 ollama-docker-image.tar 文件从联网设备复制到离线设备。

    d. 步骤4:在离线设备上加载镜像

    • 加载镜像
      在离线设备上,将 tar 文件加载为 Docker 镜像:
      docker load < ollama-docker-image.tar
      # 或下面命令
      docker load -i xxx.tar
      
      加载完成后,使用以下命令验证镜像是否成功加载:
      docker images
      
      如果一切正常,你会看到 ollama/ollama 镜像出现在列表中。

    e. 步骤5:运行 Ollama 容器

    • 运行容器
      现在可以在离线设备上运行 Ollama 容器。根据你的需求选择以下命令之一:
      # 仅使用 CPU:
      docker run -d -v /app/zzkf_jiang/llms/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
      
      # 使用 GPU(如果支持):
      docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
      
  3. 进入容器内部(后面所有关于 ollama 的命令都是在容器中执行):

    docker exec -it ollama /bin/bash
    

2.2 ollama 常用命令

# 查看当前有哪些模型
ollama list

# 查看ollama执行
ollama

ollama serve 		# 启动ollama 
ollama create 	# 从模型文件创建模型 
ollama show 		# 显示模型信息 
ollama run 			# 运行模型,会先自动下载模型 
ollama pull 		# 从注册仓库中拉取模型 
ollama push 		# 将模型推送到注册仓库 
ollama list 		# 列出已下载模型 
ollama ps 			# 列出正在运行的模型 
ollama cp 			# 复制模型 
ollama rm 			# 删除模型

2.3 ollama 离线更新

pass

3 导入 gguf 模型

参考:

注意:
您应该至少有 8 GB 的 RAM 来运行 7B 型号,16 GB 的 RAM 来运行 13B 的型号,32 GB 的 RAM 来运行 33B 型号。

模型参数说明:

  • q8_0:与浮点数16几乎无法区分。资源使用率高,速度慢。不建议大多数用户使用。
  • q6_k:将Q8_K用于所有张量。
  • q5_k_m:将 Q6_K 用于一半的 attention.wv 和 feed_forward.w2 张量,否则Q5_K
  • q5_0: 原始量化方法,5位。精度更高,资源使用率更高,推理速度更慢
  • q4_k_m:将 Q6_K 用于一半的 attention.wv 和 feed_forward.w2 张量,否则Q4_K
  • q4_0:原始量化方法,4 位
  • q3_k_m:将 Q4_K 用于 attention.wv、attention.wo 和 feed_forward.w2 张量,否则Q3_K
  • q2_k:将 Q4_K 用于 attention.vw 和 feed_forward.w2 张量,Q2_K用于其他张量。

根据经验,建议使用 Q5_K_M,因为它保留了模型的大部分性能。或者,如果要节省一些内存,可以使用 Q4_K_M

这里有一个坑需要注意,gguf 模型在使用 ollama 加载时使用的 modefile 文件内容如果没有指定 template,会导致模型回复时一直一直继续,无法自动停止。所以我们需要参考 ollama 官网对应模型的 template 内容,将其复制到 modefile 文件中

3.1 先去 Huggingface 下载模型

推荐先在联网环境,从 ollama 官网中找到所需的模型,然后再去 huggingface 上搜该模型的 gguf 格式的模型文件,下载下来。

1-最好是在主机的 /home/ollama 文件夹下新建 huggingface_models 文件夹。
2-再在 huggingface_models 文件夹下新建 qwen2-05b-q4{对应你的模型文件} 文件夹。
3-将模型文件和Modelfile上传到上一步创建的 qwen2-05b-q4 文件夹中。

3.2 配置 Modelfile 文件

这块可以在 gguf 同级的目录下增加一个 Modelfile 文件,文件第一行固定写法:

# 上一步的模型名
FROM ./qwen2.5-0.5b-instruct-q4_k_m.gguf

只是这样写也能运行,但会导致模型问答回复时无法自动终止,还需要配置模版信息,模版可以在 ollama 官网对应的模型下面找:

点进这个文件将其中的内容全部直接复制到 TEMPLATE 关键词之后的三个双引号中间:

# 上一步的模型名
FROM ./qwen2.5-0.5b-instruct-q4_k_m.gguf

# 可以到 ollama 网站上的模型库去寻找, 如 qwen2.5-3b 的模板地址: https://ollama.com/library/qwen2.5:3b/blobs/eb4402837c78
# 直接复制 ollama 上的 Template 到如下三个双引号中间
TEMPLATE """{{- if .Messages }}
{{- if or .System .Tools }}<|im_start|>system
{{- if .System }}
{{ .System }}
{{- end }}
{{- if .Tools }}

# Tools

You may call one or more functions to assist with the user query.

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 }}
"""

# 这一步参考 ollama 上的 parameters, 但是 ollama 上的 qwen2.5-3b 是没有参数的, 按照下面的格式添加即可
PARAMETER stop "<|im_start|>"
PARAMETER stop "<|im_end|>"

3.3 导入模型文件

打开 Modelfile 所在文件夹下打开终端,执行命令导入模型文件:

# ollama create 模型名称 -f ./Modelfile
# eg
ollama create qwen2.5-0.5b-instruct-q4_k_m -f ./Modelfile

导入成功之后,我们就可以通过 list 命令,看到名为 qwen2-05b-q4 的本地模型了,后续可以和其他模型一样进行管理了。

3.4 运行模型

ollama run qwen2.5-0.5b-instruct-q4_k_m:latest

结果如下:

4 导入 safetensors 模型文件(多了一个将safetensors转换成gguf文件的过程)

优先找 gguf 模型,如果有的模型没有提供 gguf,可参考:https://blog.51cto.com/u_14121041/12339312

发现 ollama 似乎可以直接加载 safetensors 格式的模型文件,先插个眼:https://ollama.readthedocs.io/modelfile/#build-from-a-safetensors-model ,待后续研究验证。

posted @ 2025-04-07 16:32  sinatJ  阅读(3069)  评论(0)    收藏  举报