【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_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.mfbz.cn/a/764321.html

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

相关文章

IIC电平转换电路原理

一、电平转换的必要性 在IIC主从设备连接时,由于主从设备可能存在不同的电源电压(如5V、3.3V、1.8V等),导致需要进行电平转换以确保正常通信。 二、电平转换电路的基本组成 电平转换电路通常包括上拉电阻、MOS管(通常…

C++基础(二):C++入门(一)

C是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式 等。熟悉C语言之后,对C学习有一定的帮助,本篇博客主要目标: 1. 补充C语言语法的不足,以及C是如何对C语言设计…

AI与音乐:终极对决,机械混音师将扬弃人类知识!

AI与音乐 一. 引言1.1 AI在音乐创作中的应用1.2 AI在音乐表演与演奏中的应用 二. AI在音乐创作中的应用2.1 AI在音乐创作中的应用技术2.1.1 深度学习2.1.2 遗传算法2.1.3 神经网络 2.2 不同AI算法在音乐创作中的应用2.2.1 使用LSTM神经网络模型生成新的音乐2.2.2 使用基于模板的…

`THREE.LineBasicMaterial` 是 three.js 中用来创建用于绘制线条的基本材质。

demo案例 THREE.LineBasicMaterial 是 three.js 中用来创建用于绘制线条的基本材质。以下是它的入参、出参、方法和属性的详细说明。 入参 (Constructor Parameters) THREE.LineBasicMaterial 构造函数可以接收一个包含多个属性的对象。常用属性如下: const ma…

c++ 构造,析构,拷贝,移动构造函数

文章目录 概述1.构造函数2. 拷贝构造函数3.移动构造函数4.析构函数 例子QTUE4/5 c 小结 概述 对于c来说,最基础的是类。对于一个类来说,主要由以下函数构成。如下: 构造函数拷贝构造函数移动构造函数析构函数 当然,还有一个操作…

做测试/爬虫 selenium 元素定位 谷歌浏览器 插件推荐,提高元素定位效率

注:插件均在谷歌应用商店 下载 1.XPath Helper 插件 作用:用于Html中对目标字段或者属性值进行匹配 快捷启动:ctrl shift x 示例图如下: 2. ChroPath 插件 作用: 提高元素定位效率 启动:谷歌浏览器 按 F12 -&g…

Query Rewriting for Retrieval-Augmented Large Language Models

文章目录 题目摘要方法实验 题目 检索增强大语言模型的查询重写 论文地址:https://arxiv.org/abs/2305.14283 项目地址:https://github.com/xbmxb/RAG-query-rewriting 摘要 大语言模型(LLM)在检索--然后阅读(retriev…

使用 Amazon Bedrock Converse API 简化大语言模型交互

本文将介绍如何使用 Amazon Bedrock 最新推出的 Converse API,来简化与各种大型语言模型的交互。该 API 提供了一致的接口,可以无缝调用各种大型模型,从而消除了需要自己编写复杂辅助功能函数的重复性工作。文中示例将展示它相比于以前针对每…

「ETL趋势」分区支持PostgreSQL、Greenplum、Gauss200, 定时任务支持Kettle

FineDataLink作为一款市场上的顶尖ETL工具,集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具,进行了新的维护迭代。本文把FDL4.1.9最新功能作了介绍,方便大家对比:(产品更新详情:…

学习记录之数学表达式(6)

目录 十二、图与网络12.1 有向图12.2 元组与对象12.3 二元关系与有向图12.4 无向图12.5 有向网络12.6 作业 十三、树13.1 例子13.2 定义13.3 Java代码13.4 作业 十四、 m \mathbf{m} m叉树14.1 预备知识:字符串14.2 m \mathbf{m} m-叉树的定义14.3 Java代码14.4 作…

mysql-sql-第十三周

学习目标: sql 学习内容: 37.查询各科成绩最高分、最低分和平均分: 以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 及格为>60,中等为:70-80,优良为:80-90,优秀…

2024 年江西省研究生数学建模竞赛A题:交通信号灯管理问题分析、实现代码及参考论文

2024 年江西省研究生数学建模竞赛题目交通信号灯管理 1 题目 交通信号灯是指挥车辆通行的重要标志,由红灯、绿灯、 黄灯组成。红灯停、绿灯行,而黄灯则起到警示作用。交通 信号灯分为机动车信号灯、非机动车信号灯、人行横道信号 灯、方向指示灯等。 一…

OpenSSH漏洞扫描(CVE-2024-6387、CVE-2006-5051、CVE-2008-4109)

目录 POC:ssh_poc.py 使用方法 github CVE-2024-6387 漏洞信息 补丁 POC:ssh_poc.py import sys import socket import argparse import threading import queue import os from datetime import datetime from urllib.parse import urlparse from…

LinuxRT启动Veristand项目的配置文件

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

FreeRTOS的任务理论

文章目录 2 FreeRTOS的任务理论2.1 任务及任务优先级2.2 任务状态理论2.2.1 任务状态的转换2.2.2 任务状态改变相关函数2.2.3 调度器相关函数 2.3 FreeRTOS延时2.3.1 vTaskDelay延时2.3.2 vTaskDelayUntil延时2.3.3 pdMS_TO_TICKS(x)宏 2.4 TCB任务控制块…

kafka 实现精确一次性语义实践总结

文章目录 前言幂等生产者幂等生产者的工作原理幂等生产者的局限性如何使用幂等生产者 事务事务的应用场景事务可以解决哪些问题事务是如何保证精确一次性的使用事物 API事物的工作原理 事务的性能 前言 Kafka的精确一次性语义与国际象棋正好相反:要理解它不容易&am…

怎么分区,新买的电脑只有一个C盘

C盘在大多数默认情况下是一台电脑的系统盘,也是创建硬盘分区时,最先被创建的盘。不过在一些特殊情况下,电脑上只有一个C盘。 为什么会出现只有一个C盘这种情况?当我们发现电脑只有一个C盘时,能通过哪些方法去创建其他硬…

Redis 7.x 系列【8】数据类型之哈希(Hash)

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 常用命令2.1 HSET2.2 HGET2.3 HDEL2.4 HEXISTS2.5 HGETALL2.6 HKEYS2.7 HLE…

SMS多表面同步透镜设计

SMS多表面同步透镜设计 一、设计原理 1、Snell定律的矢量形式 折射定律又称Snell定律,主要包括两个方面:一是入射光线、法线和折射光线共面,二是入射角和折射角满足以下关系: n 1 s i n θ 1 n 2 s i n θ 2 n_1 sin{\theta_1…

arm-linux-gnueabihf-gcc:Command not found 解决办法

问题描述 使用虚拟机交叉编译程序,当使用了sudo去编译, 出现arm-linux-gnueabihf-gcc:Command not found的问题。明明已经安装并配置好环境了,发现还是提示找不到编译器。 原因分析: 特意去查了一下sudo方法,我们在sud…