基于ollama和CPU运行本地gguf量化模型

news2024/11/25 14:29:58

前言

本文先以Windows电脑运行为例,Linux同理
本案运行配置:
Win11/CPU i5/RAM 32G (实际运行使用约占用10G)

假设你已经下载好了需要的xxx.gguf模型文件,本案:
wizardcoder-python-13b-v1.0.Q5_K_M.gguf
下载地址:https://huggingface.co/TheBloke/WizardCoder-Python-13B-V1.0-GGUF

一、安装ollama

  1. ollama官方GitHub下载安装包:
    https://github.com/ollama/ollama/releases/tag/v0.1.31
    下载 OllamaSetup.exe 和 ollama-windows-amd64.exe
  2. 安装 OllamaSetup.exe,运行点击即可完成

二、创建ollama模型

在 wizardcoder-python-13b-v1.0.Q5_K_M.gguf 同目录下创建Modelfile.txt文件
本案模型地址:D:\develop\model\wizardcoder-python-13b\wizardcoder-python-13b-v1.0.Q5_K_M.gguf
创建文件:D:\develop\model\wizardcoder-python-13b\Modelfile.txt
Modelfile.txt 内容如下(仅一行)
FROM D:\develop\model\wizardcoder-python-13b\wizardcoder-python-13b-v1.0.Q5_K_M.gguf
进入ollama-windows-amd64.exe所在目录,命令行打开终端cmd
运行如下命令
ollama-windows-amd64.exe create wizardcoder-13b-Q5 -f D:\develop\model\wizardcoder-python-13b\Modelfile.txt
create 后面紧跟的一个参数是创建模型名称,可以自定义

三、运行模型

# 使用python3.10 清华源安装ollama
pip install ollama -i https://pypi.tuna.tsinghua.edu.cn/simple

python 代码如下

import ollama

stream = ollama.chat(
    model='wizardcoder-13b-Q5:latest',
    messages=[{'role': 'user', 'content': 'what is 1 plus 1. show me python code. \nresponse:'}],
    stream=True,
)

for chunk in stream:
  print(chunk['message']['content'], end='', flush=True)

在这里插入图片描述
流式输出结果如上图,运行时 RAM 大约增加 10G

下面也写一个非流式输出代码,供参考

import ollama

response = ollama.chat(model='wizardcoder-13b-Q5:latest', messages=[
  {
    'role': 'user',
    'content': 'what is 1 plus 1. show me python code. \nresponse:',
  },
])
print(response['message']['content'])

整体内容到这里就结束了,接下来就可以自己尝试各种量化模型,并再自己封装成API使用了

四、编写API
如果想做个API集成,接下来这里使用 flask 创建一个 API (假设你会安装和使用 flask),非最佳实践,仅供测试参考

pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple
import time

from flask import Flask, request, Response, stream_with_context, jsonify
import ollama

app = Flask(__name__)


def call_ollama(content):
    response = ollama.chat(
        model='wizardcoder-13b-Q5:latest',
        messages=[{'role': 'user', 'content': content}],
        stream=False,
    )
    return response


def generate(content):
    result = ollama.chat(
        model='wizardcoder-13b-Q5:latest',
        messages=[{'role': 'user', 'content': content}],
        stream=True,
    )
    for chunk in result:
        print(chunk['message']['content'], end='', flush=True)
        yield f"data: {chunk['message']['content']}\n\n"


@app.route('/chat', methods=['POST'])
def chat():
    data = request.get_json()
    if data is None or 'content' not in data:
        return jsonify({'error': 'Missing content field'}), 400
    content = data['content']
    stream = data.get('stream', False)
    if stream:
        # 创建流式响应对象
        return Response(generate(content=content), mimetype='text/event-stream')
    else:
        # 使用非流式输出
        response = call_ollama(content=content)
        return response


if __name__ == '__main__':
    app.run(debug=True)

在这里插入图片描述

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

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

相关文章

【Ubuntu】远程连接乌班图的方式-命令行界面、图形界面

​​​​​​系统环境:ubuntu-22.04.2-amd64.iso 连接工具:MobaXterm、windows自带远程桌面mstsc.exe 重置root密码:Ubuntu默认root密码是随机的,需要使用命令sudo passwd 进行重置。 一、命令行界面-SSH连接 1.1 SSH服务安装 …

实现多文件合并和去重的MapReduce作业

实现多文件合并和去重的MapReduce作业 问题描述 我们有多个文本文件,每个文件包含一些文本行。我们的目标是将这些文件合并成一个文件,并去除重复的行,最终得到一个去重后的文本文件。 输入文件A数据如下: 输入文件B数据如下&…

完全可定制的富文本编辑器:逻辑清晰,插件赋能 | 开源日报 No.218

ianstormtaylor/slate Stars: 28.8k License: MIT slate 是一个完全可定制的框架,用于构建富文本编辑器。 可以构建类似 Medium、Dropbox Paper 或 Google Docs 的富文本编辑器通过一系列插件实现所有逻辑,避免代码复杂度受到 Draft.js、Prosemirror 和…

行锁升级表锁如何避免?表锁后如何排查?

一、那些场景会造成行锁升级表锁 说明: InnoDB引擎3种行锁算法(Record Lock、Gap Lock、Next-key Lock)都是锁定的索引。 当触发X锁(写锁)的where条件 无索引 或 索引失效 时,查询的方式就变成全表扫描&…

【机器学习】科学库使用第4篇:Matplotlib,学习目标【附代码文档】

机器学习(科学计算库)完整教程(附代码资料)主要内容讲述:机器学习(常用科学计算库的使用)基础定位、目标,机器学习概述定位,目标,学习目标,学习目标,1 人工智能应用场景,2 人工智能小…

AI实时换天解决方案:重塑汽车与旅行拍摄新视界

在汽车拍摄与旅行摄影领域,天空作为画面中的重要元素,往往决定着整体视觉效果的成败。美摄科技作为业界领先的AI视觉技术提供商,近日推出了全新的AI实时换天解决方案,为用户带来了前所未有的创意空间与效率提升。 传统的换天技术…

【简单讲解下WebView的使用与后退键处理】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

分布式文件系统——MinIo

1. 文件系统和分布式文件系统 1.1 文件系统 文件系统是负责管理和存储文件的系统软件,操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件。 1.2 分布式文件系统 一个计算机无法存储海量的文件,通过网络将若干计算…

Xshell连接CentOS7教程

一、在CentOS7中单击右键,打开命令行终端: 二、输入ifconfig命令之后,找到CentOS的ip地址: 三、打开Xshell,命令行中输入 “ssh 用户名上述查到的ip地址 ”,之后输入密码即可连接成功: 四、测试…

【鸿蒙开发】组件状态管理@Prop,@Link,@Provide,@Consume,@Observed,@ObjectLink

1. Prop 父子单向同步 概述 Prop装饰的变量和父组件建立单向的同步关系: Prop变量允许在本地修改,但修改后的变化不会同步回父组件。当父组件中的数据源更改时,与之相关的Prop装饰的变量都会自动更新。如果子组件已经在本地修改了Prop装饰…

嵌入式开发绝招:状态机+事件驱动框架

生活中有很多事件驱动的例子,上自习瞒着老师偷睡觉就是很生动的一个。在开始前我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无…

第十四届蓝桥杯C/C++大学B组题解(二)

6、岛屿个数 #include <bits/stdc.h> using namespace std; const int M51; int T,m,n; int vis[M][M],used[M][M]; int dx[]{1,-1,0,0,1,1,-1,-1}; int dy[]{0,0,1,-1,1,-1,1,-1}; string mp[M]; struct node{//记录一点坐标 int x,y; }; void bfs_col(int x,int y){ qu…

基于BP神经网络的时间序列预测模型matlab代码

整理了基于BP神经网络的时间序列预测模型matlab代码&#xff0c;包含数据集。采用了四个评价指标R2、MAE、MBE、MAPE对模型的进行评价。BP模型在数据集上表现优异。 代码获取链接&#xff1a;基于BP神经网络的时间序列预测模型matlab代码 训练效果&#xff1a; 训练集数据的R…

(学习日记)2024.04.11:UCOSIII第三十九节:软件定时器

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

一体式I/O模块与RS485串口联动,实现工业网络无缝对接

在现代工业自动化领域中&#xff0c;一体化I/O模块和RS485串口的联动应用已经成为实现工业设备高效、稳定通信的关键技术手段之一。这种联动机制能够有效地将各种现场设备的数据实时、准确地传输到上位机系统&#xff0c;从而实现工业网络的无缝对接。 一体化I/O模块&#xff…

HarmonyOS 开发-Grid和List内拖拽交换子组件位置

介绍 本示例分别通过onItemDrop()和onDrop()回调&#xff0c;实现子组件在Grid和List中的子组件位置交换。 效果图预览 使用说明&#xff1a; 拖拽Grid中子组件&#xff0c;到目标Grid子组件位置&#xff0c;进行两者位置互换。拖拽List中子组件&#xff0c;到目标List子组件…

python|sort_values()排序

sort_value()可以用来对值&#xff08;比如说年龄&#xff09;进行排序 根据 ‘Age’ 列进行升序排序&#xff0c;如果 ‘Age’ 相同则根据 ‘Name’ 列进行降序排序 df_sorted_multi df.sort_values(by[Age, Name], ascending[True, False]) print(df_sorted_multi)

拍立淘API助力阿里巴巴1688平台:图片搜索商品更精准,实现个性化推荐新高度

在电子商务的浪潮中&#xff0c;搜索引擎一直扮演着至关重要的角色。然而&#xff0c;随着技术的不断发展和用户需求的多样化&#xff0c;传统的文本搜索方式已逐渐难以满足市场的需要。在此背景下&#xff0c;阿里巴巴1688平台引入拍立淘API&#xff0c;通过图片搜索技术&…

stress-ng ——linux下多功能压测工具,让你的服务器汗流浃背!

关于压力测试&#xff0c;主要就是模拟在 linux 上的高负载情况&#xff0c;包括 cpu、内存、磁盘、网络等&#xff0c;在这种情况下来观察高负载情况下的系统表现&#xff0c; 简单的压测&#xff0c;可以写一些计算的脚本&#xff0c;来让 cpu 和内存维持高使用率&#xff0c…

羊大师家长如何有效应对孩子游戏成瘾与未授权充值问题

在数字时代&#xff0c;青少年沉迷于网络游戏已成为家庭教育中的一大挑战。近期&#xff0c;一位父亲因未能有效监管孩子使用手机玩游戏和偷偷充值而给自己扇了十个耳光的事件在社会上引发了广泛讨论&#xff0c;凸显了青少年网络游戏成瘾和家庭教育之间的矛盾。 面对这一问题…