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

系列篇章💥

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_idsmax_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.mzph.cn/diannao/39245.shtml

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

相关文章

从任意用户注册到任意密码重置

写在最前面一句话 To be or not to be ,it‘s a question . 哎呀,放错台词了,应该是 true or false , 在最近的测试中遇到了一个很有趣的点 “将 false 改为true ”就可以成功绕过验证码了。 T rue or false ??? …

「51媒体」企业举行新闻发布会,如何邀请媒体到场报道

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体宣传加速季,100万补贴享不停,一手媒体资源,全国100城线下落地执行。详情请联系胡老师。 企业举行新闻发布会时,邀请媒体到场报道是一个…

MySQL常用操作命令大全

文章目录 一、连接与断开数据库1.1 连接数据库1.2 选择数据库1.3 断开数据库 二、数据库操作2.1 创建数据库2.2 查看数据库列表2.3 删除数据库 三、表操作3.1 创建表3.2 查看表结构3.3 修改表结构3.3.1 添加列3.3.2 删除列3.3.3 修改列数据类型 3.4 删除表 四、数据操作4.1 插入…

day62--若依框架(基础应用篇)

若依搭建 若依版本 官方 若依官方针对不同开发需求提供了多个版本的框架,每个版本都有其独特的特点和适用场景: 前后端混合版本:RuoYi结合了SpringBoot和Bootstrap的前端开发框架,适合快速构建传统的Web应用程序,其…

Qt加载SVG矢量图片,放大缩小图片质量不发生变化。

前言: 首先简单描述下SVG: SVG 意为可缩放矢量图形(Scalable Vector Graphics)。 SVG 使用 XML 格式定义图像。 给界面或者按钮上显示一个图标或背景图片,日常使用.png格式的文件完全够用,但是有些使用场景需要把图…

QChartView显示实时更新的温度曲线图(二)

文章目录 参考图说明1. 项目结构2. TempChartView.pro3. main.cpp4. TemperatureSeries.qml5. main.qml详细说明 参考图 说明 Qt Charts 提供了一系列使用图表功能的简单方法。它使用Qt Graphics View Framework 图形视图框架,因此可以很容易集成到用户界面。可以使…

基于小波分析的纹理和颜色反射对称性检测(MATLAB R2018A)

对称物体在自然图像和合成图像中普遍存在。作为对称物体最重要的全局特征之一,对称性检测长期以来都是计算机视觉领域的研究热点,并在图片的语义提取、图像语义理解以及情感识别等任务上具有广泛的应用。对称物体的检测技术,就是将图片中所蕴…

【前端】HTML+CSS复习记录【3】

文章目录 前言一、from(表单)二、style属性1、标签中直接定义(内联样式)2、定义在head中3、外部链接引用 四、 class 选择器系列文章目录 前言 长时间未使用HTML编程,前端知识感觉忘得差不多了。通过梳理知识点&#…

qq文件传输助手在哪里?详细图文教程告诉你(2024新版)

QQ作为一款功能强大的社交软件,不仅提供了聊天、语音、视频等多种通讯方式,还内置了文件传输助手这一实用工具。通过文件传输助手,用户可以在不同设备之间轻松传输文件,实现跨平台的便捷操作。 那么,qq文件传输助手在…

【@AutoWired和@Resource的区别】

AutoWired和Resource的区别 这两个我们在项目中,经常去使用。很少有人知道他们有什么区别。下面我们将从 来源依赖查找顺序支持的参数依赖注入的用法支持 这四个方面来说明他们俩个的区别 来源 Autowired: 这是Spring框架自带的注解,用于实现自动依…

绝区零 Mac 下载安装详细教程(MacOS IPA 砸壳包 playCover 完美运行)

绝区零 7.4 号开始公测,但刚刚就可以开始下载了,我也是第一时间就迫不及待的安装到了我的 Mac 电脑上,感兴趣的朋友可以跟我一起安装试试 我这里是通过 playCover 的形式在 Mac 上安装运行的,根据之前原神的经验所以这次还是同样…

惠海 H6912 升压恒流芯片IC 支持2.6-40V升12V24V36V48V60V100V 10A 摄影灯 太阳能灯 UV灯 杀菌灯

1.产品描述 H6912是一款外围电路简洁的宽调光比升压调光LED恒流驱动器,可适用于2.6-40V输入 电压范围的LED恒流照明领域。H6912可以实现高精度的恒流效果,输出电流恒流精度≤士3%,电压工作范围为2.6-40V.可以轻松满足锂电池及中低压的应用需…

嵌入式Linux系统编程 — 6.1 信号的基本概念

目录 1 信号的概念和作用 1.1 什么是信号 1.2 信号的目的 1.3 信号如何处理 2 信号的分类 2.1 可靠信号与不可靠信号 2.2 实时信号与非实时信号 3 常见信号与默认行为 3.1 信号本质上是 int 类型数字编号 3.2 常见信号 1 信号的概念和作用 1.1 什么是信号 信号是一…

艾体宝干货 | 解析Redis企业版的多租户技术

在多租户架构中,一个软件实例为多个不同的用户组(或“租户”)提供服务。每个租户的数据都被安全地隔离,确保它们对其他租户不可见且无法访问。可以将其想象为一栋公寓大楼,每个人都住在共享建筑中独立且隔离的单元中。…

大模型时代的基础架构,大模型算力中心建设指南重磅来袭!

什么是最畅销商品?什么是高毛利商品? 我们来看一个例子: 一件T恤使用成本为100元的原料,价格为140元。另一件T恤使用成本为80元的原料,但在样式、颜色、图案的设计上比较有特色,价格也为140元。 当这两件…

【JVM-04】线上CPU100%

【JVM-04】线上CPU100% 1. 如何排查2. 再举一个例子 1. 如何排查 ⼀般CPU100%疯狂GC,都是死循环的锅,那怎么排查呢?先进服务器,⽤top -c 命令找出当前进程的运⾏列表按⼀下 P 可以按照CPU使⽤率进⾏排序显示Java进程 PID 为 2609…

苏东坡传-读书笔记七

苏堤和西湖之与杭州,正如美女花容月貌上的双眸。我常想,倘若西湖之是空空的一片水——没有苏堤那秀美的修眉和虹彩般的仙岛,一画龙点睛增其神韵,那西湖该望之如何?几百年来的中国游客,春季到来之时,向西湖…

如何在Python中实现一个简单的爬虫程序

如何在Python中实现一个简单的爬虫程序 随着互联网的发展,数据已成为当今社会最宝贵的资源之一。而爬虫程序则成为了获取互联网数据的重要工具之一。本文将介绍如何在Python中实现一个简单的爬虫程序,并提供具体的代码示例。 确定目标网站 在开始编写爬…

【Python】已解决:urllib.error.HTTPError: HTTP Error 403: Forbidden

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:urllib.error.HTTPError: HTTP Error 403: Forbidden 一、分析问题背景 在使用Python的urllib库中的urlopen或urlretrieve函数下载文件时,有时会遇到…

全国30省份各省资本存量数据固定资本形成总额永续盘存法(2000-2023年)

各省资本存量数据通过永续盘存法进行了详细的计算,这一方法覆盖了中国30个省份(不包括西藏),提供从2000年起直至2023的资本存量数据集。包括原始数据、测算过程、最终的资本存量结果。 以2000年作为基期年份,依据…