当前位置: 首页 > news >正文

【昇腾开发者训练营:Dify大模型部署实战】MindIE + Dify + DeepSeek + Embedding模型 + Rerank模型

文章目录

  • 部署 Dify
    • 1. Dify 适配 ARM
    • 2. 安装 docker
    • 3. 启动 Dify
  • MindIE+Dify 实操手册
    • 1. 基础环境搭建
      • 1.1 环境检查
      • 1.2 下载模型权重
      • 1.3 获取MindIE镜像
    • 2. 启动容器
    • 3. 纯模型推理测试
      • 3.1 纯模型对话测试
      • 3.2 性能测试
    • 4. 服务化部署
      • 4.1 MindIE 配置
      • 4.2 MindIE 服务化
      • 4.3 发起测试请求
    • 5. 接入 Dify
      • 5.1 访问 Dify
      • 5.2 配置大模型
      • 5.3 创建聊天助手
  • 进阶实操
    • 1. 环境部署
      • 1.1 下载模型权重
      • 1.2 获取镜像
    • 2. 启动容器
    • 3. 推理测试
    • 4. 接入 Dify
      • 4.1 配置模型
      • 4.2 创建知识库
    • 5. 创建聊天助手

本次我负责【昇腾开发者训练营】的【DeepSeek+Dify大模型推理部署实践】部分的讲解,需要完成PPT、实操手册、8台服务器的环境部署~

机器:Atlas800 9000 即昇腾上一代芯片 910A,8卡32G,裸金属。

可能的卡点:ARM架构上部署Dify、910A上跑MindIE、910A上跑BGE向量模型和重排序模型。

注:本文档同样适用于 Atlas800T A2(910B)、Duo卡等设备。

更好的阅读体验:点击传送门

image-20250523204934168 image-20250523204954253

部署 Dify

1. Dify 适配 ARM

git clone https://github.com/langgenius/dify.git
cd dify
git checkout 0.15.3
cd docker/
cp .env.example .env

1. 修改配置文件

vim docker-compose.yaml
# 在redis的command后添加:
--ignore-warnings ARM64-COW-BUG

image-20250523202730365

2. 修改sandbox版本

将sandbox版本从0.2.10修改为0.2.1。0.2.10版本会出现新增模型失败的情况,修改后不使用插件式的方式,可以正常添加。

2. 安装 docker

# 使用下面命令一键安装 docker 和 docker-composesudo yum install -y docker-engine docker-engine-selinux && sudo bash -c 'cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://docker.1ms.run","https://docker.xuanyuan.me"]
}
EOF' && sudo systemctl restart docker && sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose

3. 启动 Dify

cd dify/docker
docker-compose up -d# 停止服务并删除容器
cd dify/docker
docker-compose down

MindIE+Dify 实操手册

本文档以 Atlas 800-9000 服务器和 DeepSeek-R1-Distill-Qwen-32B-W8A8 模型为例,让开发者快速开始使用MindIE进行大模型推理流程。

MindIE(Mind Inference Engine,昇腾推理引擎)是基于昇腾硬件的运行加速、调试调优、快速迁移部署的高性能AI推理引擎。

1. 基础环境搭建

注:本次昇腾开发者训练营提供的服务器基础环境已配置完毕,本章节可忽略。

1.1 环境检查

物理机部署场景,需要在物理机安装NPU驱动固件以及部署Docker,执行如下步骤判断是否已安装NPU驱动固件和部署Docker。

执行以下命令查看NPU驱动固件是否安装。

npu-smi info

image-20250521153440553

1.2 下载模型权重

权重已下载,路径:/home/aicc/models/DeepSeek-R1-Distill-Qwen-32B-W8A8

1.3 获取MindIE镜像

昇腾镜像仓库地址:https://www.hiascend.com/developer/ascendhub/detail/af85b724a7e5469ebd7ea13c3439d48f

进入昇腾官方镜像仓库,根据设备型号选择下载对应的MindIE镜像。该镜像已具备模型运行所需的基础环境,包括:CANN、FrameworkPTAdapter、MindIE与ATB Models,可实现模型快速上手推理。

容器内各组件安装路径:

组件安装路径
CANN/usr/local/Ascend/ascend-toolkit
CANN-NNAL-ATB/usr/local/Ascend/nnal/atb
MindIE/usr/local/Ascend/mindie
ATB Models/usr/local/Ascend/atb-models

image-20250521153010845

2. 启动容器

镜像已下载,执行以下命令启动容器。

本次课程已提供8卡服务器,建议每台服务器启动4个容器,小组内自由分配,每个容器可以使用双卡进行模型推理。

# 注:命令执行前请修改 [容器名称]
# 启动容器
docker run -itd --privileged  --name=m2 --net=host \--shm-size 500g \--device=/dev/davinci0  \--device=/dev/davinci1  \--device=/dev/davinci2  \--device=/dev/davinci3  \--device=/dev/davinci4  \--device=/dev/davinci5  \--device=/dev/davinci6  \--device=/dev/davinci7  \--device=/dev/davinci_manager \--device=/dev/hisi_hdc \--device /dev/devmm_svm \-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \-v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \-v /usr/local/sbin:/usr/local/sbin \-v /etc/hccn.conf:/etc/hccn.conf \-v /home/aicc:/home/aicc \swr.cn-central-221.ovaijisuan.com/wh-aicc-fae/mindie:910A-ascend_24.1.rc3-cann_8.0.t63-py_3.10-ubuntu_20.04-aarch64-mindie_1.0.T71.05  \bash# 进入容器
docker exec -it [容器名称] /bin/bash

参数说明:

参数参数说明
–privileged特权容器,允许容器访问宿主机的所有设备。
–name设置容器名称。
–device表示映射的设备,可以挂载一个或者多个设备。需要挂载的设备如下:/dev/davinciX:NPU设备,X是ID号,如:davinci0。
/dev/davinci_manager:davinci相关的管理设备。
/dev/hisi_hdc:hdc相关管理设备。
/dev/devmm_svm:内存管理相关设备。
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro将宿主机目录“/usr/local/Ascend/driver”挂载到容器,请根据驱动所在实际路径修改。
-v /usr/local/sbin:/usr/local/sbin:ro将宿主机工具“/usr/local/sbin/”以只读模式挂载到容器中,请根据实际情况修改。
-v /path-to-weights:/path-to-weights:ro设定权重挂载的路径,需要根据用户的情况修改。说明请将权重文件和数据集文件同时放置于该路径下。

环境检查:

进入容器后,使用 npu-smi info 检查NPU驱动固件是否正常挂载。

3. 纯模型推理测试

参考文档

ATB Modelsrun_pa.py脚本用于纯模型快速测试,脚本中未增加强校验,出现异常情况时,会直接抛出异常信息,常用于快速验证模型的可用性。

3.1 纯模型对话测试

例如:使用/home/aicc/models/DeepSeek-R1-Distill-Qwen-32B-W8A8路径下的权重,使用2卡推理"What's deep learning?""Hello World.",推理时batch size为2。

pip install pandas # 测试前安装依赖
export ASCEND_RT_VISIBLE_DEVICES=1,2 # 设置使用的卡编号
cd ${ATB_SPEED_HOME_PATH}
torchrun --nproc_per_node 2  \--master_port 20030  \-m examples.run_pa  \--model_path /home/aicc/models/DeepSeek-R1-Distill-Qwen-32B-W8A8  \--input_texts "What's deep learning?" "Hello World."  \--max_batch_size 2# 参数说明
--nproc_per_node 使用的卡数
--input_texts 推理文本或推理文本路径,多条推理文本间使用空格分割。省略则使用默认值:"What's deep learning?"
--max_batch_size 模型推理最大batch size。

启动测试

image-20250521173349203

测试成功

image-20250521173450568

3.2 性能测试

安装依赖

pip install tiktoken  fuzzywuzzy jieba rouge # 测试前安装依赖

测试脚本

batch=1, 输入长度256, 输出长度256用例的2卡并行性能测试命令为:

export ASCEND_RT_VISIBLE_DEVICES=1,2 # 设置使用的卡编号
cd $ATB_SPEED_HOME_PATH/tests/modeltest/
bash run.sh pa_fp16 performance [[256,256]] 1 \
qwen /home/aicc/models/DeepSeek-R1-Distill-Qwen-32B-W8A8 2

耗时结果会显示在Console中,并保存在./benchmark_result/benchmark.csv文件里。

image-20250522133144671

屏幕截图 2025-05-22 114527

4. 服务化部署

4.1 MindIE 配置

参考文档

修改MindIE配置:

vim /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json

主要参数

"ipAddress" : "192.168.0.10",  改为本机内网地址
"managementIpAddress" : "192.168.0.10",  改为本机内网地址()
"port" : 1025, 推理端口,请保证端口号无冲突
"managementPort" : 1026, 管理面端口,请保证端口号无冲突
"metricsPort" : 1027, 服务监控指标接口,请保证端口号无冲突
"npuDeviceIds" : [[0,1]], 表示启用哪几张卡。对于每个模型实例分配的npuIds
"modelName" : "DeepSeek-R1-Distill-Qwen-32B-W8A8", 模型名称
"modelWeightPath" : "/home/aicc/models/DeepSeek-R1-Distill-Qwen-32B-W8A8/", 模型权重路径
"worldSize" : 2, 启用几张卡推理。本模型启用两卡推理即可

注:小组内多个MindIE服务请保证 port 不同、modelName不同

image-20250521185214880

image-20250521184923787

4.2 MindIE 服务化

首先进入mindie-service目录:

cd /usr/local/Ascend/mindie/latest/mindie-service
  • 方式一(推荐):使用后台进程方式启动服务。后台进程方式启动服务后,关闭窗口后进程也会保留。

    nohup ./bin/mindieservice_daemon > output.log 2>&1 &
    

    使用 tail 实时跟踪日志

    tail -f output.log
    

    打印如下信息说明启动成功。

    Daemon start success!
    
  • 方式二:直接启动服务。

    ./bin/mindieservice_daemon
    

    回显如下则说明启动成功。

    Daemon start success!
    

4.3 发起测试请求

参考文档

image-20250521190056832

重开一个窗口,使用以下命令发送请求:

# OpenAI 接口
curl -H "Accept: application/json" -H "Content-type: application/json" \
-X POST -d '{"model": "DeepSeek-R1-Distill-Qwen-32B-W8A8","messages": [{"role": "user","content": "You are a helpful assistant."}],"stream": false,"presence_penalty": 1.03,"frequency_penalty": 1.0,"repetition_penalty": 1.0,"temperature": 0.5,"top_p": 0.95,"top_k": 10,"seed": null,"stop": ["stop1", "stop2"],"stop_token_ids": [2, 13],"include_stop_str_in_output": false,"skip_special_tokens": true,"ignore_eos": false,"max_tokens": 20
}' http://192.168.0.10:1025/v1/chat/completions

image-20250521185820980

5. 接入 Dify

5.1 访问 Dify

根据 弹性公网IP:Dify端口 访问本机的Dify前端页面

用户名/密码:atlas@hw.com / 0atlas@hw.com

image-20250521193057237

5.2 配置大模型

  1. 点击右上角用户头像,点击“设置”
image-20250521193307435
  1. 点击“模型提供商”,搜索OpenAI-API-compatible,点击“添加模型”

image-20250521193417055

  1. 添加MindIE模型。

    模型名称:填写MindIE配置的modelName

    API endpoint URL:填写本机内网IP:MindIE配置的port/v1

image-20250521193743499

  1. 新增OpenAI-API-compatible模型

添加过OpenAI-API-compatible模型后,可在弹窗上方看到已添加的模型列,可以点击“添加模型”继续添加。添加时请避免模型名称相同。

image-20250521194346367

5.3 创建聊天助手

  1. 点击“工作室”、“创建空白应用”

image-20250521194506139

  1. 选择 “聊天助手”,输入名称,点击 “创建”

image-20250521194559695

  1. 选择模型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 对话测试

输入内容进行对话测试,接收到响应即为正确。

image-20250521194836351

进阶实操

本文档以 Atlas 800-9000 服务器为例,让开发者快速开始使用TEI进行文本嵌入(Embedding)和重排序(Reranker)模型推理流程。

TEI(全称:Text Embeddings Inference)是由Huggingface推出的高性能推理框架,旨在简化和加速文本嵌入(Embedding)和重排序(Reranker)模型在生产环境中的部署。

TEI支持基于HTTP和gRPC协议的服务接口,能够高效处理文本嵌入的生成和基于文本相关性的重排序等任务;TEI框架同时也支持多种嵌入模型和重排序模型,并提供了灵活的请求批处理、模型管理和动态调度功能。通过TEI,开发者可以轻松地扩展和优化文本嵌入和重排序服务,以满足实时应用和批量处理的需求,特别适用于自然语言处理相关的在线推理任务,能够满足RAG(全称:Retrieval-Augmented Generation)、信息检索 (IR)、自然语言理解 (NLU)、文本分类以及个性化推荐系统等下游应用场景。

原生TEI仅支持GPU硬件环境,且Python后端接口仅支持Embedding模型的embed服务。昇腾实现了基于MindIE Torch与ATB的组图优化,拓展其Python后端功能、将其适配到昇腾环境。

本次使用以下模型:

模型名说明
BAAI/bge-large-zh-v1.5稠密向量模型
BAAI/bge-m3稠密和稀疏向量模型
BAAI/bge-reranker-large排序模型

1. 环境部署

注:本次昇腾开发者训练营提供的服务器基础环境已配置完毕,本章节可忽略。

1.1 下载模型权重

权重已下载,路径:/home/aicc/bge_model

mkdir /home/aicc/bge_model
pip install modelscopemodelscope download --model  BAAI/bge-large-zh-v1.5 --local_dir /home/aicc/bge_model/bge-large-zh-v1.5
modelscope download --model  BAAI/bge-reranker-large --local_dir /home/aicc/bge_model/bge-reranker-large 
modelscope download --model  BAAI/bge-m3 --local_dir /home/aicc/bge_model/bge-m3

修改模型数据类型

修改每一个模型内部的配置项torch_dtypefloat16Atlas800 9000/300I Duo/300V Pro设备需修改。Atlas 800T A2等设备不用修改。

cd /home/aicc/bge_model
vim bge-reranker-large/config.json
vim bge-large-zh-v1.5/config.json
vim bge-m3/config.json# 修改为:
torch_dtype": "float16",

1.2 获取镜像

昇腾镜像仓库:https://www.hiascend.com/developer/ascendhub/detail/07a016975cc341f3a5ae131f2b52399d

进入昇腾官方镜像仓库,根据设备型号选择下载对应的TEI镜像,该镜像已具备模型运行所需的基础环境。

image-20250521215709556

因为本次实验的机器为910A,所以需要根据官方镜像手动修改或重新构建。本次采用的是华为山东AICC的一位老哥的镜像,下载方式:docker pull crpi-8ew3ouqcvy9yujug.cn-hangzhou.personal.cr.aliyuncs.com/sxj731533730/mis-tei_atlas_800_9000:v0

2. 启动容器

注意:

  1. 请修改本机 IP 和 端口,以下命令采用IP为192.168.0.10,端口为9000、9001、9002
  2. 修改推理卡编号:TEI_NPU_DEVICE=0 表示使用0卡推理,请修改为合适的卡号
# 启动 BAAI/bge-m3  推理容器
docker run -itd  -u root -e ENABLE_BOOST=True --privileged=true \
-e TEI_NPU_DEVICE=0 --name=bge-m3 --net=host \
-v /home/aicc/bge_model:/home/HwHiAiUser/model \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--device=/dev/davinci0  \
--device=/dev/davinci1  \
--device=/dev/davinci2  \
--device=/dev/davinci3  \
--device=/dev/davinci4  \
--device=/dev/davinci5  \
--device=/dev/davinci6  \
--device=/dev/davinci7  \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
-v /usr/local/sbin:/usr/local/sbin:ro \
mis-tei_atlas_800_9000:v0  
# 启动服务
docker exec -it bge-m3 bash
export HOME=/home/HwHiAiUser
bash start.sh BAAI/bge-m3 192.168.0.10 9000# 启动 BAAI/bge-large-zh-v1.5  推理容器
docker run -itd  -u root -e ENABLE_BOOST=True --privileged=true \
-e TEI_NPU_DEVICE=0 --name=bge-large-zh-v1.5 --net=host \
-v /home/aicc/bge_model:/home/HwHiAiUser/model \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--device=/dev/davinci0  \
--device=/dev/davinci1  \
--device=/dev/davinci2  \
--device=/dev/davinci3  \
--device=/dev/davinci4  \
--device=/dev/davinci5  \
--device=/dev/davinci6  \
--device=/dev/davinci7  \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
-v /usr/local/sbin:/usr/local/sbin:ro \
mis-tei_atlas_800_9000:v0  
# 启动服务
docker exec -it bge-large-zh-v1.5 bash
export HOME=/home/HwHiAiUser
bash start.sh BAAI/bge-large-zh-v1.5 192.168.0.10 9001# 启动 BAAI/bge-reranker-large  推理容器
docker run -itd  -u root -e ENABLE_BOOST=True --privileged=true \
-e TEI_NPU_DEVICE=0 --name=bge-reranker-large --net=host \
-v /home/aicc/bge_model:/home/HwHiAiUser/model \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--device=/dev/davinci0  \
--device=/dev/davinci1  \
--device=/dev/davinci2  \
--device=/dev/davinci3  \
--device=/dev/davinci4  \
--device=/dev/davinci5  \
--device=/dev/davinci6  \
--device=/dev/davinci7  \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
-v /usr/local/sbin:/usr/local/sbin:ro \
-v /usr/local/sbin:/usr/local/sbin:ro \
mis-tei_atlas_800_9000:v0  
# 启动服务
docker exec -it bge-reranker-large bash
export HOME=/home/HwHiAiUser
bash start.sh BAAI/bge-reranker-large 192.168.0.10 9002# 对于800TA2、300I Duo设备无需进入容器手动启动服务。将模型名称、IP、端口作为容器启动参数,例如:
docker run -itd  -u root -e ENABLE_BOOST=True --privileged=true \
-e TEI_NPU_DEVICE=0 --name=bge-m3 --net=host \
-v /home/aicc/bge_model:/home/HwHiAiUser/model \-e POOLING=splade \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
-v /usr/local/sbin:/usr/local/sbin:ro \
swr.cn-south-1.myhuaweicloud.com/ascendhub/mis-tei:7.0.RC1-800I-A2-aarch64   BAAI/bge-m3 127.0.0.1 9000

关键参数解释

  • user: 容器运行用户,可配置为root或HwHiAiUser,如果不配置默认使用HwHiAiUser,建议以普通用户HwHiAiUser运行降低容器运行相关安全风险
  • -e ASCEND_VISIBLE_DEVICES: 挂载指定的npu卡到容器中,只有宿主机安装了Ascend Docker Runtime,此环境变量才会生效,如果未安装Ascend Docker Runtime,可参考配置如下参数挂载指定的卡到容器
    --device=/dev/davinci_manager \--device=/dev/hisi_hdc \--device=/dev/devmm_svm \--device=/dev/davinci0 \--device=/dev/davinci1 \-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \-v /usr/local/sbin:/usr/local/sbin:ro \
  • -e ENABLE_BOOST: 使能bert、roberta、xml-roberta类模型推理加速
  • model dir: 模型存放的上级目录,如/home/data,不能配置为/home和/home/HwHiAiUser容器内的挂载目录/home/HwHiAiUser/model不可更改
  • image id:从ascendhub网上拉取镜像后的镜像ID
  • model id:从modelscope上获取的模型ID:例如:BAAI/bge-base-zh-v1.5, BAAI/bge-reranker-large等,如需运行时下载模型,请确保网络可访问modelscope网站
  • listen ip:TEI服务的监听IP,例如:127.0.0.1
  • listen port:TEI服务的监听端口,例如:8080
  • 稀疏向量模型添加(本次实践无需添加): -e POOLING=splade,请求接口采用embed_sparse

3. 推理测试

使用以下命令进行推理测试:

curl 192.168.0.10:9000/embed \-X POST \-d '{"inputs":"What is Deep Learning?"}' \-H 'Content-Type: application/json'curl 192.168.0.10:9001/embed \-X POST \-d '{"inputs":"I like you."}' \-H 'Content-Type: application/json'curl 192.168.0.10:9002/rerank \-X POST \-d '{"query":"What is Deep Learning?", "texts": ["Deep Learning is not...", "Deep learning is..."]}' \-H 'Content-Type: application/json'

本镜像接口规范(符合TEI):
image-20250521220658643

4. 接入 Dify

4.1 配置模型

在“模型供应商”中查询Text Embedding Inference,依次添加以下参数:

API Key 需要填写,随意填写即可。

模型名称服务器URLAPI Key
bge-m3http://192.168.0.10:90001
bge-large-zh-v1.5http://192.168.0.10:90011
bge-reranker-largehttp://192.168.0.10:90021

image-20250522145103572

image-20250522145816708

4.2 创建知识库

  1. 点击“知识库”,点击“创建知识库”

image-20250522145857215

  1. 从本地选择一个文件导入:

选择文件后,点击“下一步”

image-20250522145956225

  1. 配置分段:使用默认配置无需修改

保证Embedding模型和Rerank模型设置正确,下滑到底部点击“保存并处理”

image-20250522150127643

点击“前往文档”

image-20250522150227229

  1. 可查看处理后的文件状态

image-20250522150301195

5. 创建聊天助手

  1. 点击 “创建”点击“工作室”、“创建空白应用”
  2. 选择 “聊天助手”,输入名称,

image-20250522150417770

  1. 点击添加上下文

image-20250522150526779

  1. 选择处理好的知识库

image-20250522150547478

  1. 提问

image-20250522150650686

回答正确:
image-20250522150801672

相关文章:

  • springboot集成日志配置文件
  • 信息学奥赛及各种程序设计竞赛中常见的名词解释
  • 通过contenteditable实现仿豆包智能输入框
  • 生成模型——PixelRNN与PixelCNN
  • 常见算法题目2 - 给定一个字符串,找出其中最长的不重复子串
  • MySQL慢日志——动态开启
  • (15)关于窗体的右键菜单的学习与使用,这关系到了信号与事件 event
  • 《C 语言内存函数超详细讲解:从 memcpy 到 memcmp 的原理与实战》
  • vue——v-pre的使用
  • 安装openEuler操作系统
  • 强者的本质是什么?
  • Leetcode 2792. 计算足够大的节点数
  • mysql语句执行流程
  • Femap许可证升级说明
  • LTSPICE仿真电路:(二十九)T型反馈比例器
  • VirtualBox 4.3.10 经典版安装教程 - Windows 7/10 下载与设置指南
  • ASUS华硕ROG枪神9P笔记本G815LP(G615LW,G635LR,G835LX)原装出厂Win11系统,开箱状态oem系统
  • CAU人工智能class4 批次归一化
  • leetcode3434. 子数组操作后的最大频率-medium
  • JavaSE核心知识点03高级特性03-01(集合框架)
  • 中国最好网站建设公司/上海最专业的seo公司
  • wordpress登陆链接/seo站内优化
  • 微商做百度推广发哪个网站收录高/谷歌seo是什么职业
  • 网站推广怎么优化/网站建设关键词排名
  • 遵义市做网站的地方/搜索引擎广告图片
  • 香港主机网站充值/企业管理软件