ollama 部署教程(window、linux)

news2024/12/23 3:07:58

目录

一、官网

二、安装方式一:window10版本下载

三、安装方式二:linux版本docker

四、 模型库

五、运行模型

六、API服务

七、python调用

ollama库调用

langchain调用 

requests调用

aiohttp调用

八、模型添加方式

1.线上pull

2.导入 GGUF 模型文件

3.导入 safetensors 模型文件

九、部署Open WebUI


参考链接:Ollama完整教程:本地LLM管理、WebUI对话、Python/Java客户端API应用 - 老牛啊 - 博客园 (cnblogs.com)icon-default.png?t=O83Ahttps://www.cnblogs.com/obullxl/p/18295202/NTopic2024071001

一、官网

在 macOS 上下载 Ollama - Ollama 中文

二、安装方式一:window10版本下载

安装完成没有提示。 接下来配置环境变量!

Ollama的安装过程,与安装其他普通软件并没有什么两样,安装完成之后,有几个常用的系统环境变量参数建议进行设置:

  1. OLLAMA_MODELS:模型文件存放目录,默认目录为当前用户目录(Windows 目录:C:\Users%username%.ollama\models,MacOS 目录:~/.ollama/models,Linux 目录:/usr/share/ollama/.ollama/models),如果是 Windows 系统建议修改(如:D:\OllamaModels),避免 C 盘空间吃紧
  2. OLLAMA_HOST:Ollama 服务监听的网络地址,默认为127.0.0.1,如果允许其他电脑访问 Ollama(如:局域网中的其他电脑),建议设置0.0.0.0,从而允许其他网络访问
  3. OLLAMA_PORT:Ollama 服务监听的默认端口,默认为11434,如果端口有冲突,可以修改设置成其他端口(如:8080等)
  4. OLLAMA_ORIGINS:HTTP 客户端请求来源,半角逗号分隔列表,若本地使用无严格要求,可以设置成星号,代表不受限制
  5. OLLAMA_KEEP_ALIVE:大模型加载到内存中后的存活时间,默认为5m即 5 分钟(如:纯数字如 300 代表 300 秒,0 代表处理请求响应后立即卸载模型,任何负数则表示一直存活);我们可设置成24h,即模型在内存中保持 24 小时,提高访问速度
  6. OLLAMA_NUM_PARALLEL:请求处理并发数量,默认为1,即单并发串行处理请求,可根据实际情况进行调整
  7. OLLAMA_MAX_QUEUE:请求队列长度,默认值为512,可以根据情况设置,超过队列长度请求被抛弃
  8. OLLAMA_DEBUG:输出 Debug 日志标识,应用研发阶段可以设置成1,即输出详细日志信息,便于排查问题
  9. OLLAMA_MAX_LOADED_MODELS:最多同时加载到内存中模型的数量,默认为1,即只能有 1 个模型在内存中

看看是不是已经启动了ollama。右下角图标如下 

如果没有,则去打开一下

黑窗口查看一下 版本

浏览器查看一下API服务:127.0.0.1:11434

 如果出现连接不上,则检查一下环境变量是不是配错了,是不是没有E盘(如果你照抄)。 

运行一个0.5b的qwen模型

ollama run qwen2:0.5b

看看API访问情况: 

提问:

对话: 

① system 代表系统设定(也就是告诉chatGPT他的角色)

② user 表示用户

③ assistant 表示GPT的回复

三、安装方式二:linux版本docker

Olama现已作为官方Docker镜像提供 · Olama博客 - Ollama 中文

docker run -d -v ollama:/root/.ollama -p 11435:11434 --name ollama ollama/ollama

 

进入容器内部:

docker exec -it ollama /bin/bash

 查看ollama执行

ollama

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

# 本地模型列表
>ollama list
NAME            ID              SIZE    MODIFIED
gemma2:9b       c19987e1e6e2    5.4 GB  7 days ago
qwen2:7b        e0d4e1163c58    4.4 GB  10 days ago
# 删除单个模型
>ollama rm gemma2:9b
deleted 'gemma2:9b'

>ollama list
NAME            ID              SIZE    MODIFIED
qwen2:7b        e0d4e1163c58    4.4 GB  10 days ago
# 启动本地模型
>ollama run qwen2:0.5b
>>>
# 运行中模型列表
>ollama ps
NAME            ID              SIZE    PROCESSOR       UNTIL
qwen2:0.5b      6f48b936a09f    693 MB  100% CPU        4 minutes from now
# 复制本地大模型:ollama cp 本地存在的模型名 新复制模型名
>ollama cp qwen2:0.5b Qwen2-0.5B
copied 'qwen2:0.5b' to 'Qwen2-0.5B'

>ollama list
NAME                    ID              SIZE    MODIFIED
Qwen2-0.5B:latest       6f48b936a09f    352 MB  4 seconds ago
qwen2:0.5b              6f48b936a09f    352 MB  29 minutes ago
qwen2:7b                e0d4e1163c58    4.4 GB  10 days ago

四、 模型库

library (ollama.com)

五、运行模型

模型要求

 这里我们运行一个要求最小的0.5B的qwen模型。

注意这是在容器内部运行的: 

ollama run qwen2:0.5b
root@535ec4243693:/# ollama run qwen2:0.5b
pulling manifest 
pulling 8de95da68dc4... 100% ▕████████████████████████████████████▏ 352 MB                         
pulling 62fbfd9ed093... 100% ▕████████████████████████████████████▏  182 B                         
pulling c156170b718e... 100% ▕████████████████████████████████████▏  11 KB                         
pulling f02dd72bb242... 100% ▕████████████████████████████████████▏   59 B                         
pulling 2184ab82477b... 100% ▕████████████████████████████████████▏  488 B                         
verifying sha256 digest 
writing manifest 
removing any unused layers 
success 
>>> 你是谁
我是来自阿里云的超大规模语言模型——通义千问。我能够理解、生产、传播各种语言和文字,可以回答您在任
何语言或任何问题的问题。

>>> Send a message (/? for help)

六、API服务

curl --location --request POST 'http://127.0.0.1:11435/api/generate' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--data-raw '{
    "model": "qwen2:0.5b",
    "prompt": "你知道麦克斯韦吗"
}'
curl --location --request POST 'http://127.0.0.1:11435/api/chat' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--data-raw '{
    "model": "qwen2:0.5b",
    "messages": [
        {
            "role": "system",
            "content": "你是一个历史专家"
        },
        {
            "role": "user",
            "content": "东北三省是哪三个?"
        },
        {
            "role": "assistant",
            "content": "东北三省是指中国东北地区(不含内蒙古)。它包括吉林省的延边朝鲜族自治州、黑龙江省的黑河市和哈尔滨市,以及辽宁省的抚顺市、本溪市、丹东市。其中,延边州包括临山子、龙沙等13个县市。"
        },
        {
            "role": "user",
            "content": "张作霖的势力是在这里兴起的吗"
        }
    ],
    "stream": false
}'

① system 代表系统设定(也就是告诉chatGPT他的角色)

② user 表示用户

③ assistant 表示GPT的回复

七、python调用

  • temperature:用于调整生成结果的创造性程度,设置越高,生成的文本越新颖、越独特,设置越低,结果更集中。
  • stream:默认false,是否流式传输回部分进度。
  • format: 转录输出的格式,可选项包括json、str等。

ollama库调用
pip install ollama
import ollama

host = "127.0.0.1"
port = "11434"
client = ollama.Client(host=f"http://{host}:{port}")
res = client.chat(model="qwen2:0.5b",
                  messages=[{"role": "user", "content": "你是谁"}],
                  options={"temperature": 0})

print(res)
langchain调用 
pip install langchain
pip install langchain_community
from langchain_community.llms import Ollama
host="127.0.0.1"
port="11434" #默认的端口号为11434
llm=Ollama(base_url=f"http://{host}:{port}", model="qwen2:0.5b",temperature=0)
res=llm.invoke("你是谁")
print(res)
requests调用
pip install requests
host="127.0.0.1"
port="11434"
url = f"http://{host}:{port}/api/chat"
model = "qwen2:0.5b"
headers = {"Content-Type": "application/json"}
data = {
        "model": model, #模型选择
        "options": {
            "temperature": 0.  #为0表示不让模型自由发挥,输出结果相对较固定,>0的话,输出的结果会比较放飞自我
         },
        "stream": False, #流式输出
        "messages": [{
            "role": "system",
            "content":"你是谁?"
        }] #对话列表
    }
response=requests.post(url,json=data,headers=headers,timeout=60)
res=response.json()
print(res)

aiohttp调用
pip install aiohttp

Welcome to AIOHTTP — aiohttp 3.10.5 documentation

import asyncio
import json
import aiohttp

host = "127.0.0.1"
port = "11434"
url = f"http://{host}:{port}/api/chat"

headers = {
    'Content-Type': 'application/json'
}

payload = json.dumps({
    "model": "qwen2:0.5b",
    "options": {
        "temperature": 0.  # 为0表示不让模型自由发挥,输出结果相对较固定,>0的话,输出的结果会比较放飞自我
    },
    "messages": [
        {"role": "system", "content": "你是一个历史砖家,专门胡说八道,混淆历史"},
        {"role": "user", "content": "吕雉和吕不韦是啥关系?汉朝是大秦帝国的延续吗?"}
    ],
    "stream": False
})


async def main():
    start_time = asyncio.get_event_loop().time()
    async with aiohttp.ClientSession() as session:
        try:
            async with session.post(url, headers=headers, data=payload, timeout=60) as response:
                if response.status == 200:
                    data = await response.text()
                    print(data)
                    end_time = asyncio.get_event_loop().time()
                    elapsed_time = end_time - start_time
        except asyncio.TimeoutError:
            print("请求超时了")

        finally:
            print(f"耗时:0.0570秒")


if __name__ == '__main__':
    asyncio.run(main())

八、模型添加方式

1.线上pull(推荐

即上述教程采用的方式。

2.导入 GGUF 模型文件(推荐

示例:

从 HF 或者 ModeScope 下载了 GGUF 文件:qwen2-0_5b-instruct-q4_0.gguf

新建一个文件夹来存放GGUF文件,例如我存放在E:\huggingface_models\qwen2-05b-q4中,在GGUF文件的同级,创建一个文件名为Modelfile的文件,该文件的内容如下:

FROM ./qwen2-0_5b-instruct-q4_0.gguf

打开终端,执行命令导入模型文件:

ollama create 模型名称 -f ./Modelfile

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

3.导入 safetensors 模型文件(不推荐,操作过程太慢了)

示例

https://huggingface.co/Qwen/Qwen2.5-0.5B/tree/main

从 HF 或者 ModeScope 下载了 safetensors 文件(文件目录为:Mistral-7B

git lfs install
 
git clone https://www.modelscope.cn/rubraAI/Mistral-7B-Instruct-v0.3.git Mistral-7B

然后,我们转换模型(结果:Mistral-7B-v0.3.bin):

python llm/llama.cpp/convert.py ./Mistral-7B --outtype f16 --outfile Mistral-7B-v0.3.bin

接下来,进行量化量化:

llm/llama.cpp/quantize Mistral-7B-v0.3.bin Mistral-7B-v0.3_Q4.bin q4_0

最后,通过 Ollama 导入到本地磁盘,创建Modelfile模型文件:

FROM Mistral-7B-v0.3_Q4.bin

执行导入命令,导入模型文件:ollama create 模型名称 -f ./Modelfile

>ollama create Mistral-7B-v0.3 -f ./Modelfile
transferring model data
using existing layer sha256:647a2b64cbcdbe670432d0502ebb2592b36dd364d51a9ef7a1387b7a4365781f
creating new layer sha256:459d7c837b2bd7f895a15b0a5213846912693beedaf0257fbba2a508bc1c88d9
writing manifest
success

九、部署Open WebUI

 🏡 Home | Open WebUI

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

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

相关文章

HCIA--实验十九:配置接口DCHP

一、实验内容 1.需求/要求: 通过一台5700交换机和一台PC,通过在交换机的接口上配置接口DHCP来实现PC自动获取ip地址。 二、实验过程 1.拓扑图: 2.步骤: 1.给vlan10配置ip地址,进入vlan10开启接口的DHCP&#xff1…

药用植物的空间多组学:从生物合成途径到工业应用-文献精读51

Spatial multi-omics in medicinal plants: from biosynthesis pathways to industrial applications 药用植物的空间多组学:从生物合成途径到工业应用 摘要 随着分子测序和成像技术的快速发展,药用植物的多组学研究进入了单细胞时代。我们讨论了空间多…

EMT-LTR--学习任务间关系的多目标多任务优化

EMT-LTR–学习任务间关系的多目标多任务优化 title: Learning Task Relationships in Evolutionary Multitasking for Multiobjective Continuous Optimization author: Zefeng Chen, Yuren Zhou, Xiaoyu He, and Jun Zhang. journal: IEE…

2024最新windows 11系统 PHP或者idea编译器-配置Git环境和使用教程

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 确保电脑上已安装到git,如下图所示:-是已安装好: 安装git教程: Git安装使用教程_git安装教程-CSDN博客 安装流程 点击左上角如图所示: 需要验证git本地 …

认识URL

目录 url定义 定义 实例 url组成 组成 大家看到这时是否会有疑问:我们常用的端口号8080和http默认端口号有什么关系? url定义 定义 url就是统一资源定位符,简称网址。目的是使用url用于访问网络上的资源 实例 url组成 组成 实例&a…

Python 连接mysql数据库,并且执行查询

之前一直在写Java,但是随着python的崛起,自己也被慢慢的带入到了这样的一个阵营,学习python,了解机器学习 曾经有一个.... 不谈曾经,现在的我是一个小菜鸟,用学习Java实现业务的需求来学习python 项目的目…

Python文件读取

文件操作的步骤 打开文件读写文件关闭文件 open()打开函数 使用open()可以打开一个已经存在的文件,或者创建一个新文件 open(name,mode,encoding)name:打开文件的文件名,也可以包含具体路径 mode:设置打开文件的模式:只读、写入、追加等…

【高并发内存池】基本框架 + 固定长度内存池实现 1

高并发内存池 1. 基本框架2. 定长内存池的实现2.1 介绍定长内存池2.2 T* New()2.3 void Delete(T* obj) 3. 源码(附赠测试)4. 总结 1. 基本框架 高并发内存池主要由三个部分构成: 1.thread cache:用于小于256KB的内存的分配。线程缓存是每个…

解决element plus报错ResizeObserver loop completed with undelivered notifications.

1、问题描述 在使用动态数据切换渲染el-table表格过程中,报错如下: ResizeObserver loop completed with undelivered notifications. 2、解决方案 在网上找了很多办法,包括: 为每一列指定宽度,试了,问题…

【AcWing】基础算法

目录 1、快速排序 1.1 快速排序 1.2 第k个数 2、归并排序 2.1 归并排序 2.2 逆序对的数量 3、二分 3.1 数的范围 3.2 数的三次方根 4、高精度 4.1 高精度加法 4.2 高精度减法 4.3 高精度乘法 4.4 高精度除法 5、前缀和与差分 5.1 前缀和 5.2 子矩阵的和 5.3 …

0.设计模式总览——设计模式入门系列

在现代软件开发中,设计模式为我们提供了优秀的解决方案,帮助我们更好地组织代码和架构。本系列专栏将对设计模式的基本思想、原则,以及常用的分类、实现方式,案例对比、以及使用建议,旨在提高开发者对设计模式的理解和…

数据库的学习

第一章 绪论 基本概念 数据---描述事物的符号 数据库DB---长期存在在计算机内、有组织的、可共享的 大量数据的集合 数据库管理系统DBMS---位于用户和操作系统之间的一层数据管理软件 数据库系统DBS---由数据库、数据库管理系统(及其应用开发工具)、…

VBA技术资料MF201:添加简单的右键菜单

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

Linux bash特性:

命令别名: 命令行定义命令别名: alias cdt‘cd’ alias 别名‘完整命令’ unlias----删除别名 但是断开连接后,再次链接,命令别名会失效,不同窗口别名也不生效 配置文件内更改命令别名: 在对应用户的…

导入时,Excel模板不被下载

问题描述 提示:这里描述项目中遇到的问题: 这是个SSM项目,以前经常遇到这个问题,今天有幸记录下来 [ERROR][o.a.s.r.StreamResult] Can not find a java.io.InputStream with the name [downLoadFile] in the invocation stack…

【计算机网络篇】计算机网络概述

本文主要介绍计算机网络第一章节的内容,文中的内容是我认为的重点内容,并非所有。参考的教材是谢希仁老师编著的《计算机网络》第8版。跟学视频课为河南科技大学郑瑞娟老师所讲计网。 文章目录 🎯一.计算机网络的组成 ✨主要内容 1.边缘部…

操作系统笔记三

进程 把一个静态程序通过OS在内存中让cpu执行起来的动态执行过程叫进程 写代码都是用户态,而进程在执行过程中需要完成特定的功能,这些功能呢只有操作系统能提供,比如说读写文件,读写文件的过程是与硬盘打交道,这个过程…

106.游戏安全项目-机制插件分析技巧-指针扫描

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:易道云信息技术研究院 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信…

【初阶数据结构】详解二叉树 - 树和二叉树(三)(递归的魅力时刻)

文章目录 前言1. 二叉树链式结构的意义2. 手搓一棵二叉树3. 二叉树的遍历(重要)3.1 遍历的规则3.2 先序遍历3.3 中序遍历3.4 后序遍历3.5 遍历的代码实现3.5.1 先序遍历代码实现3.5.2 中序遍历代码实现3.5.3 后序遍历代码实现 4. 统计二叉树结点的个数5.…

Python 函数用法与底层分析

在编写函数时,函数体中的代码写法和我们前面讲述的基本一致,只是对代码实现了封装,并增加了函数调用、传递参数、返回计算结果等内容。 函数简介函数(function)的基本概念 1:一个程序由一个一个的任务组成;函数就是代…