基于香橙派AIpro+MindSpore实现Qwen聊天机器人
发表于 2025/04/24
基于香橙派AIpro+MindSpore实现Qwen聊天机器人
01引言
通义千问Qwen是阿里云自主研发的大语言模型,Qwen-1.5-0.5B 为其轻量版,拥有5亿参数,具备低成本和高效文本生成能力。适用于文字创作、文本处理、编程辅助、翻译服务和对话模拟等场景。
在本次任务中,我们将基于昇思MindSpore在香橙派开发板上运行通义千问Qwen-1.5-0.5B模型,体验和模型的对话互动,完成和聊天机器人对话。
02环境准备
开发者拿到香橙派开发板后,首先需要进行硬件资源确认,镜像烧录及 CANN 和 MindSpore 版本的升级,才可运行该案例,具体如下:
- 硬件:香橙派 AIpro 16G 8-12T 开发板
- 镜像:香橙派官网 Ubuntu 镜像
- CANN:8.0.RC3.alpha002
- MindSpore:2.4.10
1、镜像烧录
运行该案例需要烧录香橙派官网 Ubuntu 镜像,烧录流程参考 昇思 MindSpore 官网--香橙派开发专区--环境搭建指南--镜像烧录 章节。注意官网链接示例镜像与本案例镜像有所区别,以本案例要求为准,注意区分。
2、CANN 升级
CANN 升级参考 昇思 MindSpore 官网--香橙派开发专区--环境搭建指南--CANN 升级 章节。本案例的 CANN 版本要求是 8.0.RC3.alpha002,注意官网链接示例升级版本与本案例所需版本有所区别,以本案例要求为准,注意区分。
3、MindSpore 升级
MindSpore 升级参考 昇思 MindSpore 官网--香橙派开发专区--环境搭建指南--MindSpore 升级 章节。本案例的 MindSpore 版本要求是 2.4.10,注意官网链接示例升级版本与本案例所需版本有所区别,以本案例要求为准,注意区分。
03实验过程
1、权重加载
使用mindnlp套件加载Qwen/Qwen1.5-0.5B-Chat模型权重,该套件包含了许多自然语言处理的常用方法,可以方便地加载和使用huggingface的模型权重。注意,首次运行时请耐心等待模型下载。
(1)mindnlp安装
!pip install mindnlp
(2)下载模型
import mindspore
from mindnlp.transformers import AutoModelForCausalLM, AutoTokenizer
# Loading the tokenizer and model from Hugging Face's model hub.
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-0.5B-Chat", ms_dtype=mindspore.float16)
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen1.5-0.5B-Chat", ms_dtype=mindspore.float16)
2、模型推理
模型加载完成后定义聊天机器人所需处理的事务:加载与处理聊天历史,转换成适合模型输入的格式;并通过流式生成器的推理模式逐步生成聊天机器人的回复。
from mindnlp.transformers import TextIteratorStreamer
from threading import Thread
system_prompt = "You are a helpful and friendly chatbot"
def build_input_from_chat_history(chat_history, msg: str):
messages = [{'role': 'system', 'content': system_prompt}]
for user_msg, ai_msg in chat_history:
messages.append({'role': 'user', 'content': user_msg})
messages.append({'role': 'assistant', 'content': ai_msg})
messages.append({'role': 'user', 'content': msg})
return messages
# Function to generate model predictions.
def predict(message, history):
# Formatting the input for the model.
messages = build_input_from_chat_history(history, message)
input_ids = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="ms",
tokenize=True
)
streamer = TextIteratorStreamer(tokenizer, timeout=300, skip_prompt=True, skip_special_tokens=True)
generate_kwargs = dict(
input_ids=input_ids,
streamer=streamer,
max_new_tokens=1024,
do_sample=True,
top_p=0.9,
temperature=0.1,
num_beams=1,
)
t = Thread(target=model.generate, kwargs=generate_kwargs)
t.start() # Starting the generation in a separate thread.
partial_message = ""
for new_token in streamer:
partial_message += new_token
if '</s>' in partial_message: # Breaking the loop if the stop token is generated.
break
yield partial_message
3、启动聊天机器人
下面我们将启动一个基于Gradio的聊天界面,用于与聊天机器人进行交互。在浏览器中打开链接 http://127.0.0.1:7860/,开始与聊天机器人的交互。您可以在页面下方的消息输入框中输入任何问题,或者点击页面下方 Examples 中预设的问题,然后点击 Submit 按钮与聊天机器人进行对话。注意,第一次回答需要较长时间的加载(约1~2分钟),请耐心等待。
04实验视频
本实验配套视频,供参考学习。
05实验总结
本实验在OrangePi AIpro开发板上基于MindSpore框架实现Qwen-1.5-0.5B模型,体验和模型的对话互动,完成和聊天机器人对话。通过本案例的学习,您可以掌握香橙派AIpro开发板的使用及Qwen模型在开发板部署的流程。