ollama自定义模型容器部署(cpu版)

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模型接口,避免模型卸载和冷启动,提高响应速度(可选)

附:

  1. 常见命令
    ollama serve #启动ollama
    ollama create #从模型文件创建模型
    ollama show #显示模型信息
    ollama run #运行模型
    ollama pull #从注册表中拉取模型
    ollama push #将模型推送到注册表
    ollama list #列出模型
    ollama cp #复制模型
    ollama rm #删除模型
    ollama help #获取有关任何命令的帮助信息

  2. GPU利用
    使用GPU需要安装 NVIDIA Container Toolkit⁠: https://hub.docker.com/r/ollama/ollama

  3. 从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

### 部署Ollama模型所需条件 对于希望在本地环境中部署Ollama模型的情况,首先需确认所使用的模型是否存在于Ollama模型库中。如果目标模型并不在此列,则可以考虑采用GGUF (GPT-Generated Unified Format)格式的模型作为替代方案[^1]。 ### 设备需求与辅助工具准备 硬件方面的要求应当尽可能高配,尤其是当处理较大规模的数据集或复杂度较高的模型时更为重要。尽管当前技术进步使得本地运行大型模型所需的最低配置有所降低,但充足的存储空间仍然是必不可少的因素之一;通常来说,随着模型参数量级的增长,对应的计算资源也应相应提升。此外,稳定的网络连接同样不可或缺。为了简化整个部署流程并提高效率,推荐利用Docker容器化平台来管理应用程序及其依赖项[^2]。 ### 安装过程概述 #### 准备工作 确保计算机满足上述提到的各项基本要求之后,下一步便是着手于实际安装操作前的一些准备工作: - **操作系统兼容性验证**:检查操作系统本能否支持后续步骤中的各项指令执行。 - **更新系统包列表**:通过命令行终端刷新可用软件包的信息索引表,以便获取最新发布的程序组件。 ```bash sudo apt-get update ``` - **安装必要的开发工具链**:依据个人偏好以及具体项目文档指导完成编译器、构建脚本等相关工具的选择与设置。 #### Docker环境搭建 鉴于Docker能够提供一致性的运行环境从而减少潜在冲突的发生几率,在此建议优先选用该方式来进行服务端口映射、镜像拉取等一系列动作: - **下载官方提供的基础镜像** ```bash docker pull ubuntu:latest ``` - **创建自定义容器实例** ```bash docker run -it --name my_ollama_container -v /path/to/local/data:/data ubuntu bash ``` 这里`/path/to/local/data`代表主机上用于持久保存数据的具体路径位置,而`:data`则是指代容器内部相对应挂载点名称。 #### 获取并加载预训练权重文件 针对那些未被收录进标准集合里的特殊定制模型而言,可能还需要额外从第三方渠道单独取得相应的参数矩阵副本,并按照既定规则导入至指定目录下供调用接口识别读取。 #### 启动推理引擎服务进程 最后一步就是激活负责接收请求消息并对输入样本作出响应预测的服务单元啦! ```bash python3 serve.py --model_path=/data/models/my_custom_model.gguf ``` 以上即是在常规情况下实现Ollama框架下的AI能力迁移至私有服务器上的大致思路总结。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gallonyin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值