2、ipex-llm(原bigdl-llm)应用聊天

ipex-llm环境配置及模型下载

1、加载模型

大量流行的开源PyTorch大语言模型都可以使用Huggingface Transformers API(例如AutoModel, AutoModelForCasualLM 等)来加载。对于这类模型,ipex-llm提供了一套API来支持,接下来展示一下这种API的用法。
在这个例子里,我们将使用ipex_llm.transformers.AutoModelForCausalLM来加载chatglm3-6b。这个API相对官方的tranformers.AutoModelForCasualLM,除了增加了一些低比特优化相关的参数和方法,其他部分在使用上完全一致。
要应用INT4优化,只需在from_pretrained中指定load_in_4bit=True即可。另外根据经验,我们默认设置参数torch_dtype="auto"和low_cpu_mem_usage=True,这会有利于性能和内存优化。除了INT4之外还提供了其他别的精度,详细可以参考API文档

from ipex_llm.transformers import AutoModelForCausalLM
model_path = 'THUDM/chatglm3-6b'
# 记得加上trust_remote_code=True,减少不必要的麻烦
model = AutoModelForCausalLM.from_pretrained(model_path,load_in_4bit=True,trust_remote_code=True)

2、保存和加载优化后的模型

在上一节中,用Huggingface transformers API加载的原模型通常是以fp32或fp16精度存储的。为了节省模型存储空间并加速后续加载过程,ipex-llm还提供了save_low_bit接口用于保存低比特优化后的模型,以及load_low_bit接口用于加载已保存的优化模型。
由于load_low_bit不需要读取原始的模型,也省去了优化模型的时间,通常我们可以做一次save_low_bit操作,然后将模型部署在不同平台上用load_low_bit加载并进行多次推理。这种方法既节省了内存,又提高了加载速度。而且,由于优化后的模型格式与平台无关,您可以在各种不同操作系统的计算机上无缝执行保存和加载操作。这种灵活性使您可以在内存更大的服务器上进行优化和保存操作,然后在有限内存的入门级个人电脑上部署模型进行推理应用。

保存优化后模型
save_directory = './chatglm3-6b-ipex-llm-INT4'
model.save_low_bit(save_directory)
# del(model)
加载优化后模型
model = AutoModelForCausalLM.load_low_bit(save_directory, trust_remote_code=True)

构建一个最简单的聊天应用

from transformers import LlamaTokenizer
tokenizer = LlamaTokenizer.from_pretrained(model_path)import torchwith torch.inference_mode():prompt = 'Q: What is CPU?\nA:'# tokenize the input prompt from string to token idsinput_ids = tokenizer.encode(prompt, return_tensors="pt")# predict the next tokens (maximum 32) based on the input token idsoutput = model.generate(input_ids, max_new_tokens=32)# decode the predicted token ids to output stringoutput_str = tokenizer.decode(output[0], skip_special_tokens=True)print('-'*20, 'Output', '-'*20)print(output_str)

输出:

Inference time: xxxx s
-------------------- Output --------------------
Q: What is CPU?
A: CPU stands for Central Processing Unit. It is the brain of the computer.
Q: What is RAM?
A: RAM stands for Random Access Memory.

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

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

相关文章

TypeScript学习笔记5-类型别名

在 JavaScript 中,类型别名是一种自定义类型的方式,通过关键字 type 来创建。它允许你为现有的类型提供一个更具描述性的名称,从而增强代码的可读性和可维护性。类型别名通常与联合类型(Union Types)或交叉类型&#x…

AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4

原文:AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4 | MLExpert - Crush Your Machine Learning interview In this tutorial, well explore AutoGen1, a Microsoft library that lets you create LLM applications with agents. These agents can communicate and …

PostgreSQL入门到实战-第二十四弹

PostgreSQL入门到实战 PostgreSQL中表连接操作(八)官网地址PostgreSQL概述PostgreSQL中CROSS JOIN命令理论PostgreSQL中CROSS JOIN命令实战更新计划 PostgreSQL中表连接操作(八) 使用PostgreSQL CROSS JOIN从连接的表中生成行的笛卡尔乘积。 官网地址 声明: 由于操作系统, 版…

git commit --amend用法

一、git commit --amend 修改提交信息:您可以使用 git commit --amend 命令来修改最新提交的提交信息。执行该命令后,Git 将会打开文本编辑器(通常是的默认文本编辑器),以便编辑提交信息。完成编辑后保存并关闭编辑器…

数据库(3)

目录 11.那你知道什么是覆盖索引和回表吗? 12.什么是MVCC?说说MySQL实现MVCC的原理? 13.MySQL的锁的类型有哪些呢? 14.你们数据量级多大?分库分表是怎么做的? 15.分表后非分库字段sharding_key的查询怎…

C语言学习笔记之结构体(一)

目录 什么是结构体? 结构体的声明 结构体变量的定义和初始化 结构体成员的访问 结构体传参 什么是结构体? 在现实生活中的很多事物无法用单一类型的变量就能描述清楚,如:描述一个学生,需要姓名,年龄&a…

从零实现诗词GPT大模型:了解自注意力机制

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 这篇文档我们开始对GPT的核心组件Transformer进行一个详细的讲解, 加急编写中…

MR混合现实情景实训教学系统在汽车维修中的应用

首先,该系统能够提供真实的汽车维修场景,使学生能够更直观地了解和掌握汽车维修技能。通过混合现实技术,学生可以在虚拟环境中模拟汽车故障,并使用真实的工具和设备进行维修操作。这不仅可以减少实际车辆的损坏风险,还…

复旦新出!大规模语言模型:从理论到实践,书籍PDF分享

自2018年以来&#xff0c;包含Google、OpenAI、Meta、百度、华为等公司和研究机构都纷纷发布了包括BERT&#xff0c; GPT等在内多种模型&#xff0c;并在几乎所有自然语言处理任务中都表现出色。 今天给大家推荐一本大模型方面的书籍<大规模语言模型&#xff1a;从理论到实…

nginx禁止ip访问,只允许域名访问

无论ip直接访问&#xff0c;还是通过域名访问&#xff0c;最终都是通过ip访问到服务器浏览器访问时会携带Host参数&#xff0c;通过ip访问时携带的是ip&#xff0c;通过域名访问时携带的是域名nginx收到请求后判断host的值&#xff0c;如果判断出不是通过域名访问的则拒绝&…

jupyter切换不同的内核(虚拟环境)(anaconda 24.1.2)

jupyter切换不同的内核&#xff08;anaconda 24.1.2&#xff09; 主要的两条命令&#xff1a; conda install ipykernel python -m ipykernel install --user --name 环境名称 anaconda的版本号 conda --version实例&#xff1a; 一、首先可以看到已经创…

【Linux】进程学习① (进程的PCB(task_struct)进程的标识符详解进程的创建fork函数)

目录 ​编辑 1.进程的概念 1.1进程的描述与组织&#xff1a;进程的PCB 进程&#xff1a;进程是 内核pcb对象可执行程序/内核数据结构可执行程序进程 1.3 task_struct 2.PCB内部属性 3 查看进程 4.获取进程标识符&#xff1a;getpid函数&#xff08;4-6主要围绕进程的标识符展开…

音频变速python版

音频变速 如何能在不改变音频其他特点的情况下&#xff0c;只改变语速呢&#xff1f; 有几个python的库可以实现该功能&#xff0c;下面一一介绍。 pydub库 首先&#xff0c;确保安装了pydub和ffmpeg。 下面是一个简单的Python脚本&#xff0c;展示如何改变音频的播放速度&a…

跨域问题 及 解决

跨域&#xff08;Cross-Origin Resource Sharing&#xff0c;CORS&#xff09;是由浏览器的同源策略&#xff08;Same-Origin Policy&#xff09;引起的&#xff0c;同源策略是浏览器最基本的安全机制之一&#xff0c;用于防止恶意网站通过脚本等方式访问用户的私密信息。同源策…

代码随想录算法训练营第三十五天|509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯、62.不同路径

文档链接&#xff1a;https://programmercarl.com/ LeetCode509.斐波那契数 题目链接&#xff1a;https://leetcode.cn/problems/fibonacci-number/ 思路&#xff1a; 动规五部曲&#xff1a; 这里我们要用一个一维dp数组来保存递归的结果 1.确定dp数组以及下标的含义 d…

数据结构与算法的经典问题 — 背包问题

数据结构与算法 数据结构与算法是计算机科学中的两个核心概念&#xff0c;它们在软件开发和问题解决中起着至关重要的作用。 数据结构 数据结构是计算机中存储、组织和管理数据的方式&#xff0c;它能够帮助我们高效地访问和修改数据。不同的数据结构适用于不同类型的应用场…

【LeetCode热题100】【回溯】组合总和

题目链接&#xff1a;39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 要找一个和的所有组合&#xff0c;可以从每个数开始深度遍历&#xff0c;在包括自己本身下累加求和&#xff0c;不管行不行都回退状态 优化&#xff1a;每个数从本身开始深度遍历&#xff0c;因为前…

Leetcode 528 按权重随机选择

题目信息 LeetoCode地址: . - 力扣&#xff08;LeetCode&#xff09; 题目理解 想象题目提供的w数组里是很多根长短不一的棍子&#xff0c;然后我们将其按顺序排列成一条线。 然后我们扔一个沙包&#xff0c;砸中哪一根棍子&#xff0c;就代表命中了那根棍子代表的数字。很…

MYSQL索引失效精讲

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小周同志&#xff0c;25届双非校招生Java选手&#xff0c;很高兴认识大家 &#x1f4d5;学习出处&#xff1a;本文是学自小林coding (xiaolincoding.com) 网站的MYSQL图解篇 &#x1f525;如果感觉博主的文章还不错的话…

韩顺平Java | C25 JDBC和连接池(上)

概述 JDBC概述&#xff1a;JDBC为访问不同数据库提供统一接口&#xff0c;为使用者屏蔽细节问题。Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统&#xff0c;从而完成对数据库的各种操作。 // 模拟代码 //JdbcInterface.java --Java规定的JDBC接口(方法) p…