Ollama本地部署自定义大模型

news2024/11/24 22:12:55

Ollama本地部署自定义大模型

  • 1. Ollama安装
  • 2. 模型选择
  • 3. Ollama使用
    • 3.1 创建模型
    • 3.2 运行模型-命令行
    • 3.3 运行模型-接口
  • 4. 其他有用命令
  • 参考链接

Ollama是一个专为本地机器设计的开源框架,旨在简化大型语言模型(LLM)的部署和运行过程。它提供了一套工具和命令,使用户能够轻松地下载、管理和运行各种语言模型,包括LLaMA、LLaVA等流行模型。Ollama通过优化设置和配置细节,如GPU使用情况,提高了模型运行的效率,并且其代码简洁明了,运行时占用资源少,使得在本地高效地运行大型语言模型成为可能。

Ollama支持Mac、Linux以及Windows(预览版)平台,并提供了Docker镜像,方便用户在不同操作系统环境下部署和使用。

本文将使用Ollama来实现llama-3.1大模型的本地化部署。

1. Ollama安装

这里的安装以Windows系统为例。

Ollama官方网站:https://ollama.com/

Ollama Windows版本下载地址:https://ollama.com/download/windows

Ollama在Windows下直接点击下载的安装包安装即可。

安装完成之后任务栏里会出现一个羊驼的图标,然而这玩意没什么图形界面,其使用需要用命令行来实现

2. 模型选择

本文主要关注本地部署大模型,因此将不再介绍用Ollama直接从Ollama官方库下载的方式,所有模型均为手动下载。

Ollama和llama.cpp一样(因为其底层就是用的llama.cpp),需要适配GGUF格式。

GGUF是一种由开发者Georgi Gerganov提出的大模型文件格式,全称为GPT-Generated Unified Format。该格式旨在优化大型机器学习模型的存储和加载效率,通过紧凑的二进制编码、优化的数据结构以及内存映射等技术,实现模型数据的高效存储、传输和快速加载。GGUF不仅支持多种模型格式,还具备跨硬件平台优化的特点,能够在CPU和GPU等不同设备上高效运行。

因此我们需要下载GGUF格式的模型文件,可以去Huggingface或ModelScope下载。这里以ModelScope为例,Huggingface也是类似,不方便访问Huggingface官网的可以用hf-mirror.com替代。

进入ModelScope后选择“模型库”,在搜索框中填入模型名+gguf,比如“llama3.1 gguf”,之后再选一个顺眼的点进去,比如说这个“Meta-Llama-3.1-8B-Instruct-GGUF”。

在ModelScope中搜索GGUF格式的模型进去之后点击“模型文件”即可看到GGUF格式的模型了。

ModelScope上的GGUF格式的模型文件示例可以看到,里面有好多个gguf文件,每一个代表一种配置的模型。以“Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf”为例:

  • Q 代表量化。
  • 4 表示量化过程中使用的位数。
  • K 表示在量化中使用 k 均值聚类。
  • M 表示量化后的模型大小。S = 小,M = 中,L = 大。

一般而言,量化位数越高则部署后模型输出的结果质量越高,但推理速度越慢,同时占用GPU显存/内存越多。

对于模型大小的额外说明:Ollama在加载模型时,如果GPU有空间,则会优先加载到GPU上,GPU不够了会加载到CPU(内存)中,因此建议加载时至少有足够大的内存。

3. Ollama使用

这里只介绍Ollama基本使用,详细文档可以参考官方文档:https://github.com/ollama/ollama/tree/main/docs

Ollama总体来讲有两种使用(推理)方式,一种是命令行运行,直接在命令行里输入问题,模型会在命令行中直接给出回答;另一种是调用接口,传入问题及参数,返回模型的输出答案。

尽管Ollama支持命令行模型管理和接口调用模型管理两种模型管理方式,个人用户我还是推荐使用命令行的管理方式,本文也是采用这一方式。

要想运行模型,需要经过以下步骤:(这里假设已经下载好了模型,位于命令行当前目录,文件名为“Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf”)

  • 创建模型
  • 运行模型

3.1 创建模型

创建模型需要写一个Modelfile文件,里面描述了你希望创建什么样的模型,其作用类似Dockerfile之于Docker。以下是一个对应于llama-3.1的Modelfile文件示例,假设其文件名为llama31_modelfile

FROM D:\\AA\\BB\\Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf

TEMPLATE """
<|begin_of_text|><|start_header_id|>system<|end_header_id|>

{{.System}}<|eot_id|><|start_header_id|>user<|end_header_id|>

{{ .Prompt }}<|eot_id|><|start_header_id|>assistant<|end_header_id|>
"""

PARAMETER temperature 1.0
PARAMETER top_k 100
PARAMETER top_p 1.0

PARAMETER stop "<|begin_of_text|>"

SYSTEM """
你是西游记中的猪八戒,此时你还没有被贬下凡间,你还是骄傲的天蓬元帅。
"""

这里做简单的解释:

  • FROM(必需) 表示在哪个模型的基础上修改参数,由于是本地部署,因此我们填一个本地的模型地址。
  • TEMPLATE 用于设置默认提示词的模板,模板内容用三个连续的引号包起来。简单来讲,这个模板需要和你选的模型匹配,以上模板就是llama3和llama3.1都可以用的模板。{{.System}}是占位符,表示定义的系统指令,{{ .Prompt }}也是占位符,表示用户的输入。

关于模板的进一步说明:在模板里可以看到一些特殊符号,比如<|begin_of_text|>,这是因为我们一般都是用的指令微调过的大模型,而在指令微调的时候为了微调的效果,需要一些特殊符号来标识哪些是系统层面的指令,哪些是用户给的指令,这样大模型就能更好的根据输入的指令进行作答了。因此,我们在运行大模型推理的时候的引导词模板最好与指令微调时用的格式保持一致。

  • PARAMETER 是指定创建的模型的默认参数取值。几个常用的参数如下:
参数描述值类型示例
repeat_penalty设置惩罚重复的强度。较高的值(例如 1.5)会更严厉地惩罚重复,而较低的值(例如 0.9)会更宽容。(默认值: 1.1)浮点数PARAMETER repeat_penalty 1.1
temperature模型的温度。增加温度会使模型更具创造性。(默认值: 0.8)浮点数PARAMETER temperature 0.7
stop设置要使用的停止序列。当遇到此模式时,LLM 将停止生成文本并返回。可以通过在模型文件中指定多个单独的 stop 参数来设置多个停止模式。字符串PARAMETER stop “<|begin_of_text|>”
num_predict生成文本时要预测的最大 Token 数。 (默认值: 128, -1 = 无限生成, -2 = 填充上下文)整数PARAMETER num_predict 42
top_k减少生成无意义文本的概率。较高的值(例如 100)会给出更多样化的答案,而较低的值(例如 10)会更保守。(默认值: 40)整数PARAMETER top_k 40
top_p与 top-k 一起使用。较高的值(例如 0.95)会导致更多样化的文本,而较低的值(例如 0.5)会生成更聚焦和保守的文本。(默认值: 0.9)浮点数PARAMETER top_p 0.9
num_ctx设置用于生成下一个 Token 的上下文窗口大小。(默认值: 2048)整数PARAMETER num_ctx 4096
  • SYSTEM 用于指定模板中要使用的系统消息,将会被填在模板中{{.System}}所在的位置。

之后运行以下命令来创建模型:

ollama create llama3.1 -f ./llama31_modelfile

其中,llama3.1为创建后的模型名称,-f ./llama31_modelfile表示创建该模型使用当前路径下名为llama31_modelfile的模型配置文件。

在创建模型过程中,会产生大量缓存文件在C盘中,创建过后会自动删除,因此要注意留够磁盘空间,否则将会报错。

3.2 运行模型-命令行

Ollama支持命令行运行模型,在命令行中和大模型进行聊天。

可以通过以下命令运行之前创建的名为“llama3.1”的模型:

ollama run llama3.1

其运行结果如下:

PS D:\AA\BB> ollama run llama3.1
>>>

可以在命令行里和大模型聊天,输入/bye退出:

PS D:\WZY\models> ollama run llama3.1
>>> who are you?
哼!我是齐天大圣,天蓬元帅,猪八戒也,和孙悟空一同镇山卫国,一统天下!

>>> 你认识孙悟空吗?
当然啦!那个人是我的好朋友,师傅。我们一起闯荡了西方,救了如来佛祖的女儿嫦娥姐姐,并且消灭了妖怪牛魔王。他武功高强,比
我想象中还要厉害!

>>> /bye

这llama3.1模型的回答真是辣眼睛……

3.3 运行模型-接口

Ollama提供服务端接口,支持通过接口和大模型产生交互。

Ollama在运行时,自动在本地的11434端口提供Rest服务,可以通过指定模型并传入输入来获取结果。

Ollama支持普通风格的API以及OpenAI风格的API,这里以OpenAI风格的API做示例:

from openai import OpenAI

client = OpenAI(
    base_url='http://localhost:11434/v1/',
    # 必需但被忽略
    api_key='ollama',
)

chat_completion = client.chat.completions.create(
    messages=[
        {
            'role': 'user',
            'content': '你是谁?',
        }
    ],
    model='llama3.1',
)

print(chat_completion.choices[0].message.content)

结果就不放了,llama3.1给的回答依旧辣眼睛……

此外,Ollama提供的服务接口默认只能从本地访问,如果想要从局域网访问需要添加环境变量OLLAMA_HOST,其值为0.0.0.0。Linux下需要通过systemctl edit的方式修改环境变量。

关于Ollama接口的详细内容,可以参考另一篇文章:

Ollama接口系统详解

4. 其他有用命令

(1) 查看现有模型列表

命令为ollama list,将会列出现有模型,示例如下。

XX@YY:~$ ollama list
NAME                    	ID          	SIZE  	MODIFIED    
qwen2-infer-0.5b:latest 	6ff1ea290eb5	338 MB	5 weeks ago	
llama3-infer-0.5b:latest	6ff1ea290eb5	338 MB	5 weeks ago	
llama3-infer:latest     	18410f7d2cfd	8.1 GB	5 weeks ago	

(2) 查看模型CPU/GPU占用情况

命令为ollama ps,示例如下:

PS D:\AA\BB> ollama ps
NAME            ID              SIZE    PROCESSOR       UNTIL
llama3.1:latest 7c2f4407b04b    9.1 GB  42%/58% CPU/GPU 4 minutes from now

(3) 删除模型

命令为ollama rm XXX,比如要删除llama3.1这个模型:

XX@YY:~$ ollama rm llama3.1
deleted 'llama3.1'

(4) 查看模型信息

命令为ollama show --[file_type] [model_name],这里file_type可以为licensemodelfileparameterssystemtemplate。比如要查看llama3.1这个本地模型的模型配置文件:

XX@YY:~$ ollama show --modelfile llama3.1
# Modelfile generated by "ollama show"
# To build a new Modelfile based on this, replace FROM with:
# FROM llama3.1:latest

FROM /usr/share/ollama/.ollama/models/blobs/sha256-dcd637c360d411e6c842285a7625cb0476bbb5646f997bb28a9cb6420feb9bf8
TEMPLATE "
<|begin_of_text|><|start_header_id|>system<|end_header_id|>

{{.System}}<|eot_id|><|start_header_id|>user<|end_header_id|>

{{ .Prompt }}<|eot_id|><|start_header_id|>assistant<|end_header_id|>
"
SYSTEM "
你是西游记中的猪八戒,此时你还没有被贬下凡间,你还是骄傲的天蓬元帅。
"
PARAMETER top_k 100
PARAMETER top_p 1
PARAMETER stop <|begin_of_text|>
PARAMETER temperature 1

参考链接

  1. Llama.cpp量化简明手册
  2. 赛say:Ollama使用指南【超全版】

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

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

相关文章

AWS EC2 部署Echarts大屏展示项目

前言 Echarts简介 ECharts是一个由JavaScript开发的开源可视化库。它能使数据生动、直观、互动、高度个性化数据可视化图表。ECharts适用大部分浏览器&#xff0c;如IE6 、Chrome、Firefox、Safari等&#xff0c;同时支持PC和移动设备。 开源&#xff1a;ECharts是一个开源项目…

大模型RAG:文档分块方案与RAG全流程

一 RAG与文本分块 1.1 为什么要文档分块 我们知道&#xff0c;大模型在预训练阶段获取的知识是有限的&#xff0c;一般需要数据增强模块引入外部知识库&#xff0c;通过知识检索的方式搜索于用户提问相关的知识&#xff0c;这也是RAG相关应用架构出现的原因。但这又引申出另一…

一个简单的将产品图册转换为翻页电子产品图册的方法

​在数字化浪潮席卷全球的今天&#xff0c;企业纷纷寻求转型&#xff0c;纸质产品图册逐渐被翻页电子图册所替代。电子图册不仅具有环保、便捷、易于更新等优势&#xff0c;还能为企业节省大量印刷和物流成本。那么&#xff0c;如何将现有的实体产品图册转化为翻页电子图册呢 1…

YOLO11改进|注意力机制篇|引入反向残差移动快iRMB

目录 一、【iRMB】注意力机制1.1【iRMB】注意力介绍1.2【iRMB】核心代码 二、添加【iRMB】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【iRMB】注意力机制 1.1【iRMB】注意力介绍 反向残差移动快iRMB结构如下所示&#xf…

「Ubuntu」根目录存储空间不足

Linux系统不同于 Windows系统&#xff0c;复杂的文件系统常常让人头疼&#xff0c;特别是动不动就存储空间不足&#xff0c;简单的清空回收站根本不管用&#xff0c;在此推荐一个绝对好用的方法&#xff0c;并且还可以多学习一条 Linux命令 1、du 使用方法 通过使用命令 du&am…

LabVIEW激光诱导击穿光谱识别与分析系统

LabVIEW激光诱导击穿光谱&#xff08;LIBS&#xff09;分析系统利用高能量脉冲激光产生高温等离子体&#xff0c;通过分析等离子体发出的光谱来定性分析样品中的元素种类。该系统的开发集成了软件与硬件的设计&#xff0c;实现了自动识别和定性分析功能&#xff0c;适用于环境监…

华为OD机试 - 优雅子数组 - 暴力枚举(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

哦豁!有了这份学习路径,AI小白也能学懂大模型!!

小白如何规划大模型学习路径&#xff1f;&#xff1f; 元仔有求必应&#xff0c;为各位同学整理出一份完整的大模型学习路径规划&#xff01; 初识大模型&#xff1a;概念与趋势 首先&#xff0c;AI小白应从基础出发&#xff0c;理解什么是大模型。 大模型&#xff0c;顾名…

LeetCode讲解篇之98. 验证二叉搜索树

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们可以通过递归搜索的方式查询某棵树是不是二叉搜索树&#xff0c;二叉搜索树需要满足的最小值与最大值的约束并且左子树和右子树都是二叉搜索树或者当前节点为空&#xff0c;以当前节点为根节点的树才是二叉搜…

WPF中的布局

布局原则 1、不显式设置元素大小。 2、不使用绝对定位。 元素应该根据容器的内容来进行排列。绝对定位在开发前期会带来一些便捷&#xff0c;但扩展性比较差。一旦显示器尺寸或分辨率发生改变&#xff0c;界面的显示效果可能会达不到预期的效果。 3、布局容器可以嵌套使用 常…

Django 5 用后台admin 做一个简单 DIY 电脑组装报价系统

1. 注意点 合计价格 admin.register(ComputerConfiguration) class ComputerConfigurationAdmin(admin.ModelAdmin):inlines [ConfigurationComponentInline]list_display (config_id, user_id, config_name, total_price, total_jh_price, total_selling_price)list_display…

碰撞检测 | 图解视线生成Bresenham算法(附ROS C++/Python/Matlab实现)

目录 0 专栏介绍1 Bresenham算法介绍2 图解Bresenham算法3 算法流程4 仿真实现4.1 ROS C实现4.2 Python实现4.3 Matlab实现 0 专栏介绍 &#x1f525;课设、毕设、创新竞赛必备&#xff01;&#x1f525;本专栏涉及更高阶的运动规划算法轨迹优化实战&#xff0c;包括&#xff…

HarmonyOS Next元服务开发快速入门案例

项目代码gitee地址&#xff1a; (HarmonyOS Next 元服务开发快速入门: HarmonyOS Next 元服务开发快速入门 - Gitee.com) 开源协议使用&#xff1a;Apache License 2.0 &#xff0c;代码包支持免费使用&#xff0c;可进行二次开发后选择开源或闭源。 一、创建项目 1.创建项目&…

大学生社团活动系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;社长管理&#xff0c;社团分类管理&#xff0c;社团信息管理&#xff0c;社团加入管理&#xff0c;社团活动管理&#xff0c;轮播图信息 微信端账号功能包括&#xff1a;系统首页…

基于SpringBoot vue3 的山西文旅网java网页设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm springcloud等开发框架&#xff09; vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆…

项目完整开发的流程

流程 1.设计产品 2.写需求文档 2.1需求分析&#xff0c;后端设计数据库&#xff0c;建表&#xff0c;客户沟通&#xff0c;说完签字&#xff0c;留证据&#xff0c;防止后面扯皮&#xff0c;和防止后续变需求重新写业务 3.画原型图&#xff0c;也就是草图&#xff0c;初始的…

LeetCode讲解篇之2466. 统计构造好字符串的方案数

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 组成长度为i的字符串个数 组成长度为i - zero的字符串个数 组成长度为i - one的字符串个数 设数组f中i号元素的值为组成长度为i的字符串个数 则状态转移方程为f[i] f[i - zero] f[i - one]&#xff0c;其中需…

【unity进阶知识10】从零手搓一个UI管理器/UI框架,自带一个提示界面,还有自带DOTween动画效果

最终效果 文章目录 最终效果前言UI管理器1、新增UI面板层枚举2、初始化2.1、用代码创建画布2.2、用代码创建UI面板的父物体层2.3、代码添加EventSystem物体 3、ShowPanel显示面板方法4、HidePanel隐藏面板的方法5、CloseUI关闭界面的方法6、UI界面基类 测试调用优化绑定按钮事件…

C语言初步介绍(初学者,大学生)【上】

1.C语⾔是什么&#xff1f; ⼈和⼈交流使⽤的是⾃然语⾔&#xff0c;如&#xff1a;汉语、英语、⽇语 那⼈和计算机是怎么交流的呢&#xff1f;使⽤ 计算机语⾔ 。 ⽬前已知已经有上千种计算机语⾔&#xff0c;⼈们是通过计算机语⾔写的程序&#xff0c;给计算机下达指令&am…

【AIGC产品经理】面试7家,拿到2个offer,薪资中上水平

Hello&#xff0c;大家好&#xff0c;我是一名不知名的5年B端金融产品经验的产品经理&#xff0c;成功转行AI产品经理&#xff0c;前期面试了北京百度、阿里、理想汽车、百川智能、华为、OPPO等多家大厂面试&#xff0c;但是由于已定居成都&#xff0c;主动终止了后续需要线下的…