基于香橙派AIpro+MindSpore实现MiniCPM聊天机器人
发表于 2025/07/02
基于香橙派AIpro+MindSpore实现MiniCPM聊天机器人
01引言
MiniCPM3-4B 是 MiniCPM 系列的第三代模型,具备40亿参数,它使用了包含大规模中英文语料的训练数据,支持 32k 长度上下文,并通过 LLMxMapReduce 技术实现理论上的无限上下文处理。MiniCPM 3.0,相比 MiniCPM1.0/2.0,功能更加全面,综合能力大幅提升,多数评测集上的效果比肩甚至超越众多 7B-9B 模型。
02环境准备
1.硬件
香橙派AIpro 20T、24G 开发板
显示器、鼠标、键盘等
2.软件
CANN版本:8.0.0.beta1
MindSpore版本: 2.5.0
Python版本:3.9
3.网络连接
连接互联网
03实验过程
本文以开发板连接显示器、键盘、鼠标实现,开发者也可自行尝试远程登录方式实现。实验代码在Jupyter notebook下运行,notebook 启动参考MindSpore 升级参考 昇思 MindSpore 官网--香橙派开发专区--模型在线推理章节 。
1.连接开发板
香橙派开发板通过HDMI口连接显示屏,香橙派USB3.0接口连接键盘和鼠标,DC口连接电源线
开发板开机成功后登录帐号HwHiAiUser,密码Mind@123
单击下方菜单栏的终端图标,或使用Ctrl+Alt+T快捷键,打开终端窗口,执行Linux命令
2.开发板环境检查
1)检查CANN版本
cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info
输出如下信息OK
否则,需参考:CANN升级指南 进行CANN升级或者降级。
2)检查MindSpore
pip show mindspore
若输出如下,则OK
否则,需按照下面命令进行MindSpore2.5安装。
pip uninstall mindspore -y
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.5.0/MindSpore/unified/aarch64/mindspore-2.5.0-cp39-cp39-linux_aarch64.whl--trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple
3)Swap检查
free -m
正常输出结果
若swap没有配置,需要执行下面命令,配置swap 16G
sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
配置好后,可再次运行进行检查,确保swap成功
free -m
4)gradio安装
pip uninstall gradio -y
pip install gradio==4.44.0
5)mindnlp 0.4安装
!pip install git+https://github.com/mindspore-lab/mindnlp.git@0.4
%env TE_PARALLEL_COMPILER=1
%env MAX_COMPILE_CORE_NUMBER=1
3.MiniCPM推理部署
以下代码需要拷贝到jupyter notebook中运行,也可以从链接下载代码文件,打开运行。
步骤1:权重加载
此处使用mindnlp套件加载MindSpore-Lab/MiniCPM3-4B-FP16模型权重,该套件包含了许多自然语言处理的常用方法,可以方便地加载和使用modelers的模型权重。注意,首次运行时请耐心等待模型下载。
import mindspore
from mindnlp.transformers import MiniCPM3ForCausalLM, MiniCPM3Tokenizer
from mindspore._c_expression import disable_multi_thread
disable_multi_thread()
# Loading the tokenizer and model from Modelers's model hub.
model_id = "MindSpore-Lab/MiniCPM3-4B-FP16"
tokenizer = MiniCPM3Tokenizer.from_pretrained(model_id, mirror='modelers', ms_dtype=mindspore.float16)
model = MiniCPM3ForCausalLM.from_pretrained(model_id, mirror='modelers', ms_dtype=mindspore.float16, low_cpu_mem_usage=True)
步骤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",
tokenizer=True
)
streamer = TextIteratorStreamer(tokenizer, timeout=180, 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.7,
temperature=0.7,
)
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分钟),请耐心等待。
import gradio as gr
# Setting up the Gradio chat interface.
gr.ChatInterface(predict,
title="MiniCPM3",
description="问几个问题",
examples=['推荐5个北京的景点。']
).launch() # Launching the web interface.