昇腾社区首页
中文
注册
基于香橙派AIpro+MindSpore实现MiniCPM聊天机器人

基于香橙派AIpro+MindSpore实现MiniCPM聊天机器人

香橙派AIpro

发表于 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.


本页内容