0
点赞
收藏
分享

微信扫一扫

k8s自动清理节点服务

系列篇章💥

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模型推理

目录


概述

在这个信息爆炸的时代,人工智能技术正逐渐渗透到我们生活的方方面面。特别是在自然语言处理领域,大型语言模型如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

输出:

流式输出

当对话内容较长或需要实时更新时,流式传输模式就显得尤为重要。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应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

举报

相关推荐

0 条评论