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

news2024/9/22 23:37:20

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2156127.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于51单片机的汽车倒车防撞报警器系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 本课题基于微控制器控制器&#xff0c; 设计一款汽车倒车防撞报警器系统。 要求&#xff1a; 要求&#xff1a;1.配有距离&#xff0c; 用于把车和障碍物之间的距离信号送入控制器。 2.配有报警系…

2024AI做PPT软件如何重塑演示文稿的创作

现在AI技术的发展已经可以帮我们写作、绘画&#xff0c;最近我发现了不少ai做ppt的工具&#xff01;不体验不知道&#xff0c;原来合理使用AI工具可以有效的帮我们进行一些办公文件的编写&#xff0c;提高了不少工作效率。如果你也有这方面的需求就接着往下看吧。 1.笔灵AIPPT…

内网穿透out了?黑群晖+IPv6+NAS公网助手的访问体验

科技宅最带折腾黑群晖&#xff0c;这不&#xff0c;尝试一下ipv6动态域名解析&#xff0c;远程访问群晖NAS的方法千千万&#xff0c;这个方法我早就想到了&#xff0c;今天终于体验了一把&#xff0c;把经验分享一下&#xff1a; 目录 黑群晖的魅力 IPv6的加入&#xff1a;无…

Python办公自动化教程(003):PDF的加密

【1】代码 from PyPDF2 import PdfReader, PdfWriter# 读取PDF文件 pdf_reader PdfReader(./file/Python教程_1.pdf) pdf_writer PdfWriter()# 对第1页进行加密 page pdf_reader.pages[0]pdf_writer.add_page(page) # 设置密码 pdf_writer.encrypt(3535)with open(./file/P…

上位机图像处理和嵌入式模块部署(linux小系统开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 和若干年前相比较&#xff0c;现在嵌入式linux开发要简单得多。稍微贵一点的有树莓派&#xff0c;国产的有各种水果派&#xff0c;基本上都可以按照…

苍穹外卖学习日志 -----20天项目从零到完结-----含软件下载,环境配置,框架学习,代码编写,报错处理,测试联调,每日总结,心路历程等等......

年份 2024 基础&#xff1a;Javase Javaweb 已完结 2024 8.25---9.14 20天 Day-01 8.25 今天开始学习已经晚了&#xff0c;网盘下载了一下文件&#xff0c;做了一些开始项目的准备工作。 本来其实打算用notepad来写学习日志的&#xff0c;但是那个传…

如何给bat文件替换好看的图标

最近遇到软件运行在Windows系统&#xff0c;通过bat文件启动&#xff0c;但是bat文件的图标不好看&#xff0c;而且作为启动快捷方式放桌面看上去跟其他软件不搭调&#xff0c;于是得给bat文件换个软件图标。 软件ico图标 Windows系统下使用.ico文件作为软件图标。另外favicon…

go libreoffice word 转pdf

一、main.go 关键代码 完整代码 package mainimport ("fmt""github.com/jmoiron/sqlx""github.com/tealeg/xlsx""log""os/exec""path/filepath" ) import _ "github.com/go-sql-driver/mysql"import &q…

Python练习宝典:Day 1 - 选择题 - 基础知识

目录 一、踏上Python之旅二、Python语言基础三、流程控制语句四、序列的应用 一、踏上Python之旅 1.想要输出 I Love Python,应该使用()函数。 A.printf() B.print() C.println() D.Print()2.Python安装成功的标志是在控制台(终端)输入python/python3后,命令提示符变为: A.&…

数业智能心大陆:职场倦怠的新解法

什么是职业倦怠&#xff1f; 在职场中&#xff0c;职业倦怠的表现形式丰富多样。从数业智能心大陆 AI 心理咨询平台的数据来看&#xff0c;职业倦怠呈现出多种状态。教师可能对教学不再满怀热情&#xff0c;精心备课也成为过去式&#xff1b;情绪上容易烦躁、易怒&#xff0c;在…

【d47_2】【Java】【力扣】1791.找出星型图的中心节点

思路 直接判断 edges[0][0] edges[0][1] edges[1][0] edges[1][1] 谁重复了 例如&#xff1a; [ [1,2] [2,3] ....],那么中心节点一定是2 代码 class Solution {public int findCenter(int[][] edges) {for (int i0;i<1;i){if (edges[1][0]edges[0][i]) {return edg…

车载软件调试工具系列---Trace32简介UI界面简介

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

java项目之常规应急物资管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的常规应急物资管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息。 项目简介&#xff1a; 基于SpringBootVue的…

TikTok流量不佳:是网络环境选择不当还是其他原因?

TikTok&#xff0c;作为全球短视频社交平台的佼佼者&#xff0c;每天都有海量的内容被上传和分享。然而&#xff0c;很多用户和内容创作者发现&#xff0c;他们的TikTok视频流量并不理想。这引发了一个问题&#xff1a;TikTok流量不佳&#xff0c;是因为网络环境选择不当&#…

S3C2440定时器

ee一、构造 二、设置相关位 1、MPLLCON寄存器&#xff08;配置MPLL寄存器&#xff0c;进行倍频&#xff09; 根据下列表格的想要输出的频率进行选择&#xff0c;选择完毕之后&#xff0c;对该寄存器进行设置 2、时钟分频控制&#xff08;CLKDIVN&#xff09;寄存器 根据不…

AD19基础应用技巧:交叉选择/跳转到器件/镜像粘贴/元器件矩形区域排列/选择过滤器/捕捉对象等设置

目录 1. 原理图<>PCB跳转2. 镜像粘贴3. 矩形区域排列4.选择过滤器5. 捕捉的对象Object for Snapping的设置 6.Grids/Guides/Axes1. **Grids&#xff08;网格&#xff09;**2. **Guides&#xff08;参考线&#xff09;**3. **Axes&#xff08;坐标轴&#xff09;**捕捉模式…

基于python的文本聚类分析与可视化实现,使用kmeans聚类,手肘法分析

1、数据预处理 由于在数据分析之前数据集通常都存在数据重复、脏数据等问题&#xff0c;所以为了提高 数据分析结果的质量&#xff0c;在应用之前就必须对数据集进行数据预处理。数据预处理的方法通常有清洗、集成、转换、规约这四个方面&#xff0c;接下来详细介绍这对爬取…

学习记录:js算法(四十二): 寻找两个正序数组的中位数

文章目录 寻找两个正序数组的中位数我的思路网上思路 总结 寻找两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,3], n…

力扣72-编辑距离(Java详细题解)

题目链接&#xff1a;力扣72-编辑距离 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 dp五部曲。 1.确定dp数组和i下标的含义。 2.确定递推公式。 3.dp初始化。 4.确定dp的遍历顺序。 5.如果没有ac打印dp数组 利于debug。 每一个dp…

网络层协议 —— IP协议

目录 0.前言 1.IP协议的格式 2.IP地址 2.1IP地址的划分 国际间IP地址的划分 公有IP 私有IP 特殊的IP地址 国内IP地址的划分 2.2IP地址不足问题 2.3IP地址的功能 2.4如何使用IP地址 2.5IP地址的构成 3.网段划分 以前的方案 现在的方案 4.认识宏观网络 5.路由 …