Ollama 本地CPU部署开源大模型

Ollama可以在本地CPU非常方便地部署许多开源的大模型。

如 Facebook的llama3, 谷歌的gemma, 微软的phi3,阿里的qwen2 等模型。

完整支持的模型列表可以参考:https://ollama.com/library

它基于llama.cpp实现,本地CPU推理效率非常高(当然如果有GPU的话,推理效率会更高), 还可以兼容 openai的接口。

本文将按照如下顺序介绍Ollama的使用方法~

⚫️ 下载安装Ollama

⚫️ 命令行交互

⚫️ python接口交互

⚫️ jupyter魔法命令交互

公众号算法美食屋后台回复关键词:ollama,获取本文notebook完整源代码~

一,下载安装 Ollama

可以从官网下载Ollama: https://ollama.com/

mac版本的压缩文件大概180M多,正常网速大概下载几分钟就下完了。

支持mac,linux, win 操作系统,跟正常的软件一样安装 。

安装好后就可以在命令行中进行交互了。

以下是一些常用的命令。

ollama run qwen2 #跑qwen2模型,如果本地没有,会先下载

ollama pull llama3 #下载llama3模型到本地

ollama list #查看本地有哪些模型可用

ollama rm #删除本地的某个模型

ollama help #获取帮助
!ollama help
Large language model runner

Usage:
  ollama [flags]
  ollama [command]

Available Commands:
  serve       Start ollama
  create      Create a model from a Modelfile
  show        Show information for a model
  run         Run a model
  pull        Pull a model from a registry
  push        Push a model to a registry
  list        List models
  ps          List running models
  cp          Copy a model
  rm          Remove a model
  help        Help about any command

Flags:
  -h, --help      help for ollama
  -v, --version   Show version information

Use "ollama [command] --help" for more information about a command.

二, 命令行交互

可以在命令行中用 ollama run qwen2 运行一个模型,然后在命令行中和它对话。

下面的gif动画没有做任何加速。这个回复速度还是非常的感人的~

bebb7939fc692bb589b4d384380a3626.gif

三,Python接口交互

在命令行运行 诸如 ollama run qwen2,实际上就会在后台起了一个qwen2的模型服务。

我们就可以用Python代码和qwen2做交互了。

我们可以选择ollama官方出的 ollama-python的库的接口进行交互,也可以使用openai这个库的接口进行交互。

import subprocess
#后台启动一个qwen2模型服务,相当于 在命令行中运行 `ollama run qwen2`
cmd = ["ollama","run qwen2"]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

1,使用ollama-python 库进行交互

#!pip install ollama
import ollama
response = ollama.chat(model='qwen2',
                       stream=False,
    messages=[{'role': 'user',
            'content': '段子赏析:我已经不是那个当年的穷小子了,我是今年的那个穷小子。'}]
)
print(response['message']['content'])
这个段子通过幽默的方式表达了对于个人经济状况的自嘲和幽默看待。在日常生活中,人们经常会遇到相似的自我调侃,尤其是在讨论个人财务或生活阶段变化时。这段话中的“已经不是当年的穷小子”暗示了过去某个时间点上的经济状况不佳,而“我是今年的那个穷小子”则将当前的情况与过去的困境相比较,强调了现在依然处于类似的经济挑战中。

通过这种自我调侃的方式,人们可以减轻对于自身困境的关注和压力。幽默不仅是一种释放紧张情绪的手段,也是增进人际关系、建立共鸣的有效工具。在面对生活中的不如意时,以轻松幽默的态度去看待问题,不仅可以帮助个人保持乐观的心态,还能够使对话氛围更加和谐有趣。

这样的段子也提醒我们,在追求物质财富的同时,保持内心的平和与对生活的积极态度同样重要。通过分享类似的经历或自我调侃,可以增进人们之间的理解和支持,构建一个更包容、更乐观的社会环境。

2, 使用openai接口交互

#!pip install openai

ollama还支持非常热门的openai接口,简简单单,本地就mock了一个chatgpt。

这样许多基于openai接口开发的工具(如lanchain,pandasai)就可以使用 ollama支持的免费开源模型替代chatgpt了。

我们这里演示其流式输出模式。

from openai import OpenAI
client = OpenAI(
    base_url='http://localhost:11434/v1/',
    api_key='ollama', #实际上本地模型不需要api_key
)

completion = client.chat.completions.create(
    messages=[
        {
            'role': 'user',
            'content': '段子赏析:爱一个人的眼神是藏不住的,爱两个人就一定要藏住。',
        }
    ],
    model='qwen2',
    stream=True  # add this line to enable streaming output
)
from IPython.display import display,clear_output 
response = ""
for chunk in completion:
    response += chunk.choices[0].delta.content
    print(response)
    clear_output(wait=True)
这个段子以幽默的方式探讨了爱情中的微妙之处。它指出当爱一个人时,人们很容易在眼神、言语和行动中流露出这份情感,而这种直接表达是无心之失,却也容易被察觉或误解。

“爱一个人的眼神是藏不住的”,这句话强调了爱情中的热情与自然流露,当我们深爱某人时,哪怕试图掩饰,那份炽热的情感还是会在我们的眼睛里反映出来。这可能是不经意间的微笑、温柔的目光或是无法抗拒的关心与注意。人们往往在无意识中用身体语言表达出自己的感情,尤其是在真正爱一个人的时候。

然而,“爱两个人就一定要藏住”,则可能暗示了对爱情的不同层次或更复杂的考量。这里可能是指,在某些情境下,为了维护关系的平衡、隐私或是避免多头恋等复杂情感关系带来的困扰,需要在行为和表达上更加谨慎或保守。“藏住”可能意味着要控制自己的公开表现、减少与第二个人过于亲密的行为以及降低自己情绪上的直接暴露。

这个段子通过对比单恋情和双恋情在眼神或情感流露方面的不同态度,提出了爱情中的多重考量和策略。它既体现了对直接表达情感的欣赏,也提醒了人们在复杂情感关系中可能需要考虑的因素。

四,jupyter魔法命令交互

就我个人而言,我非常喜欢在jupyter notebook 中开发调试代码。

如果能够在notebook中就直接和ollama交互,并且自动把对话结果加入到history上下文,从而实现多轮对话交互,那是非常的美妙。

通过自定义一个jupyter 魔法命令,我们可以非常方便地实现上述功能。

完整定义代码见notebook源码。

import sys 
class Ollama:
    def __init__(self,
                 model='qwen2',
                 max_chat_rounds=20,
                 stream=True,
                 system=None,
                 history=None
                ):
        ...
             
    @classmethod
    def build_messages(cls,query=None,history=None,system=None):
        ...
        return messages

    def chat(self, messages, stream=True):
        ...
        return completion
        
        
    def __call__(self,query):
        ...
        return response 
    
    def register_magic(self):
        import IPython
        from IPython.core.magic import (Magics, magics_class, line_magic,
                                        cell_magic, line_cell_magic)
        ...
        magic = ChatMagics(ipython,self)
        ipython.register_magics(magic)

03d81e4f6d0f3d9cf734e54846b8db3d.png

91f2c7877cadf0419668f6ed430e95a7.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Postman简介

目录 1.概述 2.诞生背景 3.历史版本 4.安装和卸载 5.菜单和菜单项 6.使用 7.应用场景 8.示例 8.1.简单的GET请求 8.2.POST请求提交数据 8.3.查询参数 9.未来展望 10.总结 1.概述 Postman是一款用于API开发、测试和文档管理的综合性工具。允许开发者和测试人员创建…

leetcode刷题记录42-1584. 连接所有点的最小费用

问题描述 给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] [xi, yi] 。 连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 :|xi - xj| |yi - yj| ,其中 |val| 表示 val 的绝对值。 请你返回将所有点连…

建议收藏 | IT运维体系合集(附PPT下载)

现如今,IT运维工作的重要性日益凸显。对于构建IT运维管理系统而言,进行系统的运维建设以确保运维服务工作正常、有序、高效、协调地进行尤为重要。 很多人对运维建设停留在传统的认知层面,缺乏系统的培训。因此本篇文章分享一套IT运维体系合…

LLM大语言模型算法特训,带你转型AI大语言模型算法工程师(完结)

LLM大语言模型算法 与AI大语言模型算法工程师的联系 LLM(Large Language Model)大语言模型是指像GPT这样的大型自然语言处理模型,而AI大语言模型算法工程师则是负责开发和优化这些模型的专业人士。它们之间的联系可以从以下几个方面来理解&a…

MySQL概述——DDL

1.SQL通用语法 1.SQL语句可以单行或多行书写,以分号结尾。 2. SQL语句可以使用空格/缩进来增强语句的可读性。 3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。 4.注释: (1)单行注释:--注释内容或#注释内容(MySQL特…

MoCo v3(ICCV 2021)

paper:An Empirical Study of Training Self-Supervised Vision Transformers official implementation:https://github.com/facebookresearch/moco-v3 出发点 本文并没有提出一种新的方法,而是对计算机视觉领域最近进展中的一个重要且基础…

MySQL 日志(一)

本篇主要介绍MySQL日志的相关内容。 目录 一、日志简介 常用日志 一般查询日志和慢查询日志的输出形式 日志表 二、一般查询日志 三、慢查询日志 四、错误日志 一、日志简介 常用日志 在MySQL中常用的日志主要有如下几种: 这些日志通常情况下都是关闭的&a…

我用AI绘画Stable Diffusion 一个月后,竟然能做出惊艳所有人的效果!

大家好,我是设计师阿威 如今要拍摄一组写真,需要服装、道具、灯光、场地、布景、拍摄、后期等过程。整个过程需要统一才能形成好的写真效果。现在有了AI绘图技术,我们可以实现通过AI绘图,只用计算机计算就得到一组接近真实的写真照…

Python 中国象棋游戏【含Python源码 MX_011期】

简介: 中国象棋是一种古老而深受喜爱的策略棋类游戏,也被称为中国的国粹之一。它在中国有着悠久的历史,起源可以追溯到几个世纪以前。Python 中国象棋游戏是一个用Python编程语言编写的软件程序,旨在模拟和提供中国象棋的游戏体验…

Github 2024-06-10开源项目周报 Top15

根据Github Trendings的统计,本周(2024-06-10统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目8Jupyter Notebook项目2Go项目2C++项目1Shell项目1Lua项目1JavaScript项目1MDX项目1C项目1HTML项目1Python - 100天从新手到大师 创建…

Maven 项目的创建(导入依赖、仓库、maven的配置、配置国内源、以及可能遇到的问题)

一、创建Maven项目 使用的编译软件:idea 软件版本: 社区版 2021.1 - 2022.4(为什么选择这个版本,因为只有这个版本里有一些插件是可以安装的) 专业版不限制(专业版功能是最全的,但是收费&am…

【会议征稿,ACM出版】2024年云计算与大数据国际学术会议(ICCBD 2024,7月26-28)

2024年云计算与大数据国际学术会议(ICCBD 2024)将于2024年7月26-28日在中国大理召开。ICCBD 2024将围绕“云计算与大数据”的最新研究领域, 旨在为从事研究的专家、学者、工程师和技术人员提供一个国际平台,分享科研成果和尖端技术,了解学术发展趋势&…

能耗分析与远程抄表是什么?

一、引言 在21世纪的数字化时代,能耗分析和远程抄表已成为现代能源管理的重要组成部分。这两项技术不仅提高了能源效率,还为企业和个人提供了更精细的能源使用数据,从而实现更科学的节能减排。 二、能耗分析的深度洞察 能耗分析是通过收集…

Python保姆级教程 数据类型—新手小白入门必看

python学习资料,下方已打包好 一、基本数据类型与变量(上) 2.1 注释 优点: 代码说明 没注释的代码 有注释的代码 不让解释器执行注释的那句话 2.2 单行注释 单行注释快捷键:ctrl ? 2.3多行注释 …

【Java】内部类、枚举、泛型

目录 1.内部类1.1概述1.2分类1.3匿名内部类(重点) 2.枚举2.1一般枚举2.2抽象枚举2.3应用1:用枚举写单例2.4应用2:标识常量 3.泛型3.1泛型认识3.2泛型原理3.3泛型的定义泛型类泛型接口泛型方法 3.4泛型的注意事项 1.内部类 1.1概述 内部类:指…

大模型:原理、进展及其影响

大模型:原理、进展及其影响---中国人民大学人工智能学院 一、大模型的背景和原理 二、大模型的飞速发展及趋势 三、大模型的深刻影响

1_常见指令【Linux中常见30个指令的学习和使用】【万字长文】

常见指令以及权限理解 开始学习linux前的注意事项 在学习linux之前,我们要知道linux是一个操作系统。 那操作系统是什么呢?(这里只做大概了解) 操作系统就是一个管理软硬件的软件。 它对上提供良好(稳定、高效、安…

服务器数据恢复—热备盘未完全启用导致raid5阵列崩溃的数据恢复案例

服务器存储故障: 一台EMC某型号存储由于存储中raid5阵列出现故障导致服务器崩溃,由于数据涉密,需要工程师到现场恢复数据。 服务器数据恢复工程师到现场后对数据进行检测,经过检测发现服务器崩溃是由于raid中某些硬盘掉线所导致。…

力扣hot100:75. 颜色分类(双指针)

75.颜色分类 本题是经典的「荷兰国旗问题」,由计算机科学家 Edsger W. Dijkstra 首先提出。 75. 颜色分类 1、遍历两遍 遍历两遍,第一遍放置0的位置,第二遍放置1的位置,我们只需要维护一个当前放置位置即可。 class Solution…

图片转Excel表格:提升数据处理效率的利器

在日常工作和生活中,我们经常遇到各种数据和信息以图片的形式存在。有时,这些数据图片中包含了重要的表格信息,例如财务报告、统计数据或调研结果。为了对这些数据进行进一步的分析和处理,我们需要将其转换为可编辑的电子表格格式…