docker镜像封装
docker安装(略…)
拉取ollama镜像
docker pull ollama/ollama # 约1.98G
运行ollama容器
# 前一个11435是宿主机要对外暴露的tcp端口,可自定义修改
docker run -d -p 11435:11434 --name ollama ollama/ollama
准备模型注册文件
文件名称为Modelfile
,如可以使用 vim Modelfile,写入数据如下
FROM Qwen2.5-3B-Instruct-Q4_K_L.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容器
# 提前下载好Qwen2.5-3B-Instruct-Q4_K_L.gguf
# https://hf-mirror.com/bartowski/Qwen2.5-3B-Instruct-GGUF/blob/main/Qwen2.5-3B-Instruct-Q4_K_L.gguf
docker cp Qwen2.5-3B-Instruct-Q4_K_L.gguf ollama:/root
# 复制模型注册文件
docker cp Modelfile ollama:/root
注册模型到ollama服务中
docker exec -it ollama bash # 进入容器
cd /root
ls # 查看当前目录 应该存在 Qwen2.5-3B-Instruct-Q4_K_L.gguf 和 Modelfile
ollama create qwen2.5_3b -f Modelfile # 模型名称这里可以自定义
ollama list # 查看注册模型 应该可以看到qwen2.5_3b
运行模型
ollama服务已经启动,无需特别手动运行
调用API方法,可参考OpenAI规范,简单示例如下
# linxu可以使用以下curl命令
curl --location --request POST 'http://127.0.0.1:11435/v1/chat/completions' \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen2.5_3b",
"messages": [
{
"role": "user",
"content": "你好"
}
],
"stream": false
}'
# windows可以在cmd中使用以下curl命令
curl --request POST "http://127.0.0.1:11435/v1/chat/completions" --header "Content-Type: application/json" --data-raw "{\"model\": \"qwen2.5_3b\",\"messages\": [{\"role\": \"user\",\"content\": \"你好\"}],\"stream\": false}"
存储当前容器(快照)
docker commit ollama qwen2.5-3b_image:v1 # v1为自定义版本号
docker save -o qwen2.5-3b_image_image_v1.tar qwen2.5-3b_image:v1 # 保存为镜像文件
使用zip压缩与解压缩(可选)
zip qwen2.5-3b_image_image_v1.zip qwen2.5-3b_image_image_v1.tar # 将tar压缩成zip文件,减小体积
unzip qwen2.5-3b_image_image_v1.zip # 将zip解压缩成tar文件
文件切割(可选)
split -b 3G qwen2.5-3b_image_image_v1.tar qwen2.5-3b_image_ # 切割成 my_ollama_image_aa、my_ollama_image_ab、my_ollama_image_ac
cat qwen2.5-3b_image_* > qwen2.5-3b_image_image_v1.tar # 将 my_ollama_image_* 多个文件合并成 my_ollama_image_v1.tar
# windows cmd命令
# copy /b qwen2.5-3b_image_aa + qwen2.5-3b_image_ab + qwen2.5-3b_image_ac qwen2.5-3b_image_image_v1.tar
一键部署
加载快照镜像文件
docker load -i qwen2.5-3b_image_image_v1.tar # 在terminal或cmd(windows)等终端中运行命令
运行快照容器
# 前台测试运行
docker run --rm -p 11435:11434 --name my_ollama qwen2.5-3b_image:v1
# 后台运行
docker run -d -p 11435:11434 --name my_ollama qwen2.5-3b_image:v1
注意事项
- 可以3分钟轮询一次ollama模型接口,避免模型卸载和冷启动,提高响应速度(可选)
附:
-
常见命令
ollama serve #启动ollama
ollama create #从模型文件创建模型
ollama show #显示模型信息
ollama run #运行模型
ollama pull #从注册表中拉取模型
ollama push #将模型推送到注册表
ollama list #列出模型
ollama cp #复制模型
ollama rm #删除模型
ollama help #获取有关任何命令的帮助信息 -
GPU利用
使用GPU需要安装 NVIDIA Container Toolkit: https://hub.docker.com/r/ollama/ollama -
从huggingface下载ollama可用的gguf模型
推荐用镜像站hf-mirror(给前同事打个广告)
有些大佬已经把几乎所有主流开源模型的gguf量化模型都整理好了,
比如https://hf-mirror.com/bartowski
如果想使用Qwen2.5-7B模型,可以在这个模型页选择适合自己算力需求的模型下载
https://hf-mirror.com/bartowski/Qwen2.5-7B-Instruct-GGUF/tree/main