【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人

news2024/12/23 4:12:44

系列篇章💥

No.文章
1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践
2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人
3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用
4【Qwen2部署实战】Ollama上的Qwen2-7B:一键部署大型语言模型指南
5【Qwen2部署实战】llama.cpp:一键部署高效运行Qwen2-7b模型
6【Qwen2部署实战】部署高效AI模型:使用vLLM进行Qwen2-7B模型推理

目录

  • 系列篇章💥
  • 概述
  • 基本用法
    • 加载预训练模型
    • 加载分词器模型
    • 定义提示message
    • 模版格式化消息
    • 根据输入ID获取生成ID
    • 解码生成ID获取内容
  • 流式输出
  • 结语


概述

在这个信息爆炸的时代,人工智能技术正逐渐渗透到我们生活的方方面面。特别是在自然语言处理领域,大型语言模型如Qwen2正以其卓越的对话能力,为用户带来前所未有的交互体验。本文将详细介绍如何利用强大的transformers库与Qwen2-7B-Instruct模型进行智能对话,无论是在流式模式还是非流式模式下,都能轻松实现。

基本用法

与Qwen2-Instruct的对话非常简单。通过transformers库,仅需数行代码,即可构建起与这位智能伙伴沟通的桥梁。我们首先通过from_pretrained方法加载预训练的tokenizer和模型,随后通过generate方法,在tokenizer所提供的聊天模板辅助下,轻松启动对话流程。以下示例将展示如何与Qwen2-7B-Instruct进行一场生动的对话:

加载预训练模型

from transformers import AutoModelForCausalLM, AutoTokenizer

# 设置设备参数
device = "cuda"  # 指定使用CUDA作为计算设备

# 加载预训练模型,使用自动推断数据类型和自动选择设备
model = AutoModelForCausalLM.from_pretrained(
    "/root/autodl-tmp/qwen/Qwen2-7B-Instruct",  # 模型路径
    torch_dtype="auto",  # 数据类型自动选择
    device_map="auto"  # 设备自动选择
)

加载分词器模型

# 加载与模型配套的分词器
tokenizer = AutoTokenizer.from_pretrained("/root/autodl-tmp/qwen/Qwen2-7B-Instruct")

定义提示message

# 准备提示文本,这里我们直接使用model.generate()方法生成文本
# 需要使用tokenizer.apply_chat_template()来格式化输入,如下所示
prompt = "请简单介绍一下大型语言模型。"  # 提示文本
messages = [
    {"role": "system", "content": "你是一个智能AI助手"},  # 系统角色消息
    {"role": "user", "content": prompt}  # 用户角色消息
]

模版格式化消息

# 使用分词器的apply_chat_template方法来格式化消息
text = tokenizer.apply_chat_template(
    messages,  # 要格式化的消息
    tokenize=False,  # 不进行分词
    add_generation_prompt=True  # 添加生成提示
)

根据输入ID获取生成ID

# 将格式化后的文本转换为模型输入,并转换为PyTorch张量,然后移动到指定的设备
model_inputs = tokenizer([text], return_tensors="pt").to(device)

# 使用model.generate()方法直接生成文本
# 通过设置max_new_tokens参数控制输出的最大长度
generated_ids = model.generate(
    model_inputs.input_ids,  # 模型输入的input_ids
    max_new_tokens=512  # 最大新生成的token数量
)

# 从生成的ID中提取新生成的ID部分
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

解码生成ID获取内容

# 使用分词器的batch_decode方法将生成的ID解码回文本,并跳过特殊token
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

执行效果
在这里插入图片描述
查看响应内容

response

输出:

大型语言模型(Large Language Model)是人工智能领域的一种深度学习模型,主要用于生成与给定输入相关的自然语言文本。这类模型通过大量文本数据进行训练,能够学习到语言的复杂结构、语法、语义以及上下文关系等,从而在各种自然语言处理任务中表现出色。
基本原理
神经网络架构:大型语言模型通常基于循环神经网络(RNN)、长短期记忆网络(LSTM)或更先进的Transformer架构构建。这些模型能够处理序列数据,并在训练过程中学习到输入文本序列之间的依赖关系。
自回归性质:许多大型语言模型具有自回归性质,意味着它们生成的每个词都是基于之前生成的所有词的条件概率分布来预测的。
大规模训练:这些模型往往需要训练在海量的数据集上,例如包含数亿甚至数十亿字的文本数据。大规模的数据集有助于模型学习更广泛的语言模式和表达。
多用途性:大型语言模型因其强大的表示能力,可以应用于多种自然语言处理任务,包括但不限于文本生成、问答系统、代码生成、文本摘要、对话系统、翻译等。
应用场景

  • 文本生成:创建故事、文章、诗歌、代码等。
  • 问答系统:回答问题,提供信息检索服务。
  • 对话系统:构建聊天机器人,实现与用户的自然对话。
  • 自动文摘:从长篇文章中生成简洁的摘要。
  • 机器翻译:将文本从一种语言翻译成另一种语言。
  • 代码生成:根据指令生成特定功能的代码片段。

代表模型

  • GPT系列(由OpenAI开发):包括GPT-2、GPT-3等,以生成高质量文本而闻名。
  • 通义千问(阿里云开发):专注于中文领域的大型语言模型。
  • Mistral(由EleutherAI开发):一个开源的大型语言模型。
  • Qwen(由阿里云开发):另一个面向中文的大型语言模型。
    大型语言模型的发展极大地推动了自然语言处理技术的进步,为人类提供了更高效、更智能的交互方式和信息处理工具。

流式输出

当对话内容较长或需要实时更新时,流式传输模式就显得尤为重要。TextStreamer类允许我们将对话过程无缝切换至流式模式,从而实现更加流畅和动态的交互体验。以下示例将展示如何利用TextStreamer实现与Qwen2的流式对话:

# Reuse the code before `model.generate()` in the last code snippet
from transformers import TextStreamer
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
generated_ids = model.generate(
    model_inputs.input_ids,
    max_new_tokens=512,
    streamer=streamer,
)

代码测试如下:

from transformers import AutoModelForCausalLM, AutoTokenizer

# 设置设备参数
device = "cuda"  # 指定使用CUDA作为计算设备

# 加载预训练模型,使用自动推断数据类型和自动选择设备
model = AutoModelForCausalLM.from_pretrained(
    "/root/autodl-tmp/qwen/Qwen2-7B-Instruct",  # 模型路径
    torch_dtype="auto",  # 数据类型自动选择
    device_map="auto"  # 设备自动选择
)

# 加载与模型配套的分词器
tokenizer = AutoTokenizer.from_pretrained("/root/autodl-tmp/qwen/Qwen2-7B-Instruct")

# 准备提示文本,这里我们直接使用model.generate()方法生成文本
# 需要使用tokenizer.apply_chat_template()来格式化输入,如下所示
prompt = "请简单介绍一下Qwen-2B。"  # 提示文本
messages = [
    {"role": "system", "content": "你是一个智能AI助手"},  # 系统角色消息
    {"role": "user", "content": prompt}  # 用户角色消息
]

# 使用分词器的apply_chat_template方法来格式化消息
text = tokenizer.apply_chat_template(
    messages,  # 要格式化的消息
    tokenize=False,  # 不进行分词
    add_generation_prompt=True  # 添加生成提示
)

# 将格式化后的文本转换为模型输入,并转换为PyTorch张量,然后移动到指定的设备
model_inputs = tokenizer([text], return_tensors="pt").to(device)

# 使用model.generate()方法直接生成文本
# 通过设置max_new_tokens参数控制输出的最大长度
# generated_ids = model.generate(
#     model_inputs.input_ids,  # 模型输入的input_ids
#     max_new_tokens=512  # 最大新生成的token数量
# )
from transformers import TextStreamer
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
generated_ids = model.generate(
    model_inputs.input_ids,
    max_new_tokens=512,
    streamer=streamer,
)

# 从生成的ID中提取新生成的ID部分
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

# 使用分词器的batch_decode方法将生成的ID解码回文本,并跳过特殊token
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

输出:

Qwen-2B并不是一个广泛认可或已知的实体,可能是特定情境下的称呼或者某个内部项目的代号。在公开信息中,并没有关于“Qwen-2B”的详细描述或定义。如果“Qwen-2B”与人工智能、技术产品、学术研究或某一具体领域相关,那么它可能指的是某个特定的模型、项目、版本或是实验。例如,在人工智能领域,“Qwen”可能是阿里云推出的一种大语言模型系列的名称,而“-2B”可能代表的是该系列中的某个特定版本或迭代。

通常情况下,对于不常见或非主流的术语,了解其准确含义需要查阅相关组织、公司或研究机构的官方资料或发布的信息。如果你是在特定上下文中遇到“Qwen-2B”,建议查看该上下文的原始来源或联系相关的开发者或团队以获取更准确的信息。

在这里插入图片描述

结语

通过本文的介绍,相信您已经对如何使用transformers库与Qwen2-7B-Instruct进行对话有了更深入的了解。无论是基础的对话功能,还是高级的流式输出模式,transformers库都提供了强大而灵活的工具来满足不同场景下的需求。随着技术的不断进步,我们有理由相信,像Qwen2这样的智能对话模型将在未来扮演更加重要的角色,为我们的生活和工作带来更多便利。让我们拭目以待,AI技术将如何进一步改变我们的世界。

在这里插入图片描述
🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。
💘精心准备📚500本编程经典书籍、💎AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

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

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

相关文章

java 程序、进程 、线程,cpu,并行、并发、启动线程两种方式

1、重写 Thread 父类方法 后创建实例调用 start 方法 2、将创建自实现 Runable 接口后的实例 作为参数传递给 Thread 的构造方法 两个条件同时存在,那个生效? new Thread(/* condition 1 */threadTest2) {Override/* condition 2 */public void run() {T…

如何查看xpf文件

xpf文件是什么 XPF文件是“XML Paper Specification File”的缩写,它是一种文件保存格式,具有以下特点和相关信息: 一、定义与用途 定义:XPF文件用于保留文档的固定布局,包括文本、图片以及其他文档元素的确切位置。…

【HarmonyOS NEXT】鸿蒙如何动态添加组件(NodeController)

NodeController用于实现自定义节点的创建、显示、更新等操作的管理,并负责将自定义节点挂载到NodeContainer上。 说明 本模块首批接口从API version 11开始支持 当前不支持在预览器中使用NodeController。 导入模块 import { NodeController } from "ohos…

23种设计模式之装饰者模式

深入理解装饰者模式 一、装饰者模式简介1.1 定义1.2 模式类型1.3 主要作用1.4 优点1.5 缺点 二、模式动机三、模式结构四、 装饰者模式的实现4.1 组件接口4.2 具体组件4.3 装饰者抽象类4.4 具体装饰者4.5 使用装饰者模式4.6 输出结果: 五、 应用场景5.1 图形用户界面…

嵌入式Linux系统编程 — 6.2 signal和 sigaction信号处理函数

目录 1 信号如何处理 2 signal()函数 2.1 signal()函数介绍 2.2 示例程序 3 sigaction()函数 3.1 sigaction()函数介绍 3.2 示例程序 1 信号如何处理 信号通常是发送给对应的进程,当信号到达后, 该进程需要做出相应的处理措施,可以通…

ROS——Server、Client的编程实现,服务数据的定义与使用,参数的使用和编程方法

客户端 创建功能包 创建客户端、创建服务、配置请求数据、请求调用、等待应答 设置编译规则 编译运行客户端 服务端 创建服务器 编译成目标执行文件、相关库的连接 add_executable(turtle_command_server src/turtle_command_server.cpp) target_link_libraries(turtle_comman…

第2章 寄存器

第2章 寄存器 一个 CPU 由运算器,控制器,寄存器等器件构成,这些器件靠内部总线进行相连。简单的说 CPU 中: 运算器进行信息处理寄存器进行信息存储控制器控制各种器件进行工作内部总线连接各个器件,在他们之间进行各种…

工业交换机端口统计功能

工业交换机端口统计功能不仅是一项技术手段,更是一双透视企业网络健康状态的慧眼。通过这一功能,企业能够实时捕捉到网络中每一个端口的流量情况,这不仅仅是数据的积累,更是对网络脉搏的精准把握。当网络的每一个脉动都被记录在案…

git基本使用(一):git的基本概念

Git 是一种分布式版本控制系统,最初由 Linus Torvalds 于 2005 年为 Linux 内核开发。它主要用于跟踪文件的更改,特别是在软件开发过程中,可以帮助团队成员协同工作。它在实际项目开发中,应用非常广泛,我们这一节来掌握…

第2章.现场设备的物联网模式--设备管理

2.3 设备管理 设备的作用及其管理方式是物联网和非物联网部署之间的关键区别。设备生命周期管理的阶段包括设备供应(注册、激活和调试)到取消供应。本书中用于设备管理的注释如下图所示: 图2.6——设备管理模式的符号 设备管理包括现场设备的…

Power Platform功能管理实战课程重点学什么?怎么学?

Power Platform 由 Power BI、Power Apps、Power Automate、Power Virtual Agents 四大模块组成。 这几个模块单独应用都具有强大的功能,而微软把它们放在一起,相互协作、相得益彰,形成了强大的生态系统。而这也是Power Platform的核心理念—…

Java案例实现双色球

一问题&#xff1a; 二具体代码&#xff1a; package 重修;import java.util.Random; import java.util.Scanner;public class first {public static void main(String[] args) {int []usersnumbersusernumslect();System.out.println("用户");for (int i 0; i <…

springboot个人证书管理系统-计算机毕业设计源码16679

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了个人证书管理系统的开发全过程。通过分析个人证书管理系统管理的不足&#xff0c;创建了一个计算机管理个人证书管理系统的方案。文章介绍了个人证书管理系统的系…

计算机系统基础(二)

1.数值数据的表示 为什么采用二进制&#xff1f; 二进制只有两种基本状态&#xff0c;两个物理器件就可以表示0和1二进制的编码、技术、运算规则都很简单0和1与逻辑命题的真假对应&#xff0c;方便通过逻辑门电路实现算术运算 数值数据表示的三要素 进位记数制&#xff08;十…

开发数字药店APP实战:互联网医院系统源码详解

本篇文章&#xff0c;笔者将深入探讨如何开发一个功能完善的数字药店APP&#xff0c;并详细解析互联网医院系统的源码实现。 一、数字药店APP的需求分析 应具备以下基本功能&#xff1a; 用户注册与登录 药品搜索与浏览 在线下单与支付 订单管理 健康咨询与远程医疗 个人…

发电机保护屏组成都有哪些,如何选择

发电机保护屏组成都有哪些&#xff0c;如何选择 发电机是电力系统中最常用的一种电力设备。例如水力发电机&#xff0c;柴油发电机&#xff0c;风力发电机&#xff0c;火力发电等等。发电机保护是保证发电机安全、稳定运行的重要手段之一。对于一些小型机组的发电机&#xff0c…

Mysql部署MHA高可用

部署前准备&#xff1a; mysql-8.0.27下载地址&#xff1a;https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.27-1.el7.x86_64.rpm-bundle.tar mha-manager下载地址&#xff1a;https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-mana…

因为自己淋过雨所以想给嵌入式撑把伞

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;新手学嵌入式&#xff0c;…

PHP验证日本固定电话号码

日本电话号码格式众多&#xff0c;验证起来比较头大&#xff0c;现在咱们来一个简单的总结哈 为了简单起见&#xff0c;使用PCRE 函数preg_match通过匹配正则表达式来实现验证。 function checkGdTelLandline(string $str): int|false {return preg_match("/\A0(\d{1}[-…

积鼎CFD:基于Virtualflow在溃坝洪水演进数值仿真分析

近期&#xff0c;多地遭受了前所未有的洪水侵袭&#xff0c;每一次灾害都如同警钟长鸣&#xff0c;提醒我们水库大坝安全的重要性&#xff0c;超标准暴雨的突袭让大坝的安全防线面临前所未有的考验。面对这一挑战&#xff0c;CFD技术可为溃坝洪水的预测与管理开辟新的路径。凭借…