昇腾+ds+dify部署
1、安装npu驱动
查看gpu数量
[root@localhost soft]# lspci | grep d802
01:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d802 (rev 20)
02:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d802 (rev 20)
41:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d802 (rev 20)
42:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d802 (rev 20)
81:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d802 (rev 20)
82:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d802 (rev 20)
c1:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d802 (rev 20)
c2:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d802 (rev 20)
确认系统版本和内核版本
[root@localhost soft]# uname -m && cat /etc/*release
aarch64
openEuler release 22.03 LTS
NAME="openEuler"
VERSION="22.03 LTS"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 LTS"
ANSI_COLOR="0;31"openEuler release 22.03 LTS
[root@localhost soft]# uname -r
5.10.0-60.139.0.166.oe2203.aarch64如果现场服务器连通外网,Ubuntu或openEuler系统(执行yum update)会自动升级内核,内核升级后可能导致NPU驱动不可用,因此需要关闭内核自动更新机制。
执行如下命令关闭内核自动更新:
Ubuntu系统
apt-mark hold linux-image-generic linux-headers-generic $(uname -r)
openEuler系统
yum install yum-plugin-versionlock
yum versionlock add kernel-$(uname -r)
创建驱动运行用户HwHiAiUser(运行驱动进程的用户),安装驱动时无需指定运行用户,默认即为HwHiAiUser。
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
安装驱动源码编译所需依赖。
Ubuntu 22.04操作系统可跳过该步骤。
Kylin V10 SP2、CTyunOS 22.06、CUlinux 3.0、Kylin V10 SP3、BC-Linux 21.10、openEuler 22.03 LTS、openEuler 22.03 LTS SP2、Debian 10.2、Debian 10.13操作系统请参见[安装驱动源码编译所需依赖](https://support.huawei.com/enterprise/zh/doc/EDOC1100471180/170f6b57#ZH-CN_TOPIC_0000002165782958)安装依赖。openEuler操作系统
需要安装make、dkms、gcc、kernel-devel软件包。
请先参见检查源的方法查看是否已设置源。
执行如下命令检查:
make -v
rpm -qa | grep dkms
rpm -qa | grep gcc
rpm -qa | grep kernel-devel-$(uname -r)
若回显相关软件包版本信息,表示已安装;若未安装请执行如下命令安装依赖。
yum install -y make dkms gcc kernel-devel-$(uname -r)BC-Linux操作系统
需要安装make、dkms、gcc、kernel-devel软件包。
请先参见检查源的方法查看是否已设置源。
执行如下命令检查:
make -v
rpm -qa | grep dkms
rpm -qa | grep gcc
rpm -qa | grep kernel-devel-$(uname -r)
若回显相关软件包版本信息,表示已安装;若未安装请执行如下命令安装依赖。
yum install -y make dkms gcc kernel-devel-$(uname -r) --nogpgcheckCTyunOS 22.06
需要安装make、gcc、kernel-devel软件包。
请先参见检查源的方法查看是否已设置源。
执行如下命令检查:
make -v
rpm -qa | grep gcc
rpm -qa | grep kernel-devel-$(uname -r)
若回显相关软件包版本信息,表示已安装;若未安装请执行如下命令安装依赖。
yum install -y make gcc kernel-devel-$(uname -r)CUlinux 3.0
需要安装make、dkms、gcc、kernel-headers、kernel-devel软件包。
请先参见检查源的方法查看是否已设置源。
执行如下命令检查:
make -v
rpm -qa | grep dkms
rpm -qa | grep gcc
rpm -qa | grep kernel-headers-$(uname -r)
rpm -qa | grep kernel-devel-$(uname -r)
若回显相关软件包版本信息,表示已安装;若未安装请执行如下命令安装依赖。
yum install -y make dkms gcc kernel-headers-$(uname -r) kernel-devel-$(uname -r)Debian操作系统
需要安装make 、dkms、gcc、linux-header软件包。
请先参见检查源的方法查看是否已设置源。
执行如下命令检查:
make -v
dpkg-query -s dkms
dpkg-query -s gcc
dpkg-query -s linux-headers-$(uname -r)
若回显相关软件包版本信息,表示已安装;若未安装请执行如下命令安装依赖。
apt-get install -y make dkms gcc linux-headers-$(uname -r)Kylin操作系统
需要安装make、dkms、gcc、kernel-devel软件包。
请先参见检查源的方法查看是否已设置源。
执行如下命令检查:make -v
rpm -qa | grep dkms
rpm -qa | grep gcc
rpm -qa | grep kernel-devel-$(uname -r)
若回显相关软件包版本信息,表示已安装;若未安装请执行如下命令安装依赖。
yum install -y make dkms gcc kernel-devel-$(uname -r)
如果出现dkms安装失败,可执行如下操作步骤解决。
单击dkms-2.7.1-1.el7.noarch.rpm(主要针对使用rpm包的OS如BC-Linux/openEuler/Kylin等)下载软件包。
将软件包上传到服务器后,执行rpm -ivh xxx.rpm命令安装rpm包。
若出现如下报错信息。
error: Failed dependencies:elfutils-libelf-devel is needed by dkms-2.7.1-1.el7.noarch
可执行如下命令安装相关依赖。
yum install -y elfutils-libelf-devel
再执行rpm -ivh xxx.rpm命令安装rpm包。UOS 20 1050e系统
检查默认内核源码路径和make是否存在。
检查默认内核源码路径(以“/lib/modules/`uname -r`/build”为例)。
执行ls /lib/modules/`uname -r`/build命令,查看路径是否存在,如目录下显示类似如下文件,则说明存在内核源码,安装驱动包时则会自动使用内核进行驱动编译。
检查make是否存在。
执行make -v命令,若能查询到make工具的版本,则make已安装。
若未安装,请先参见检查源的方法查看是否已设置源,再执行yum install -y make命令安装make。
将驱动包和固件包上传到服务器任意目录如“/home/soft”,并增加可执行权限。
chmod +x Ascend-hdk-910b-npu-driver_25.0.rc1.1_linux-aarch64.run # 驱动
chmod +x Ascend-hdk-910b-npu-firmware_7.7.0.1.231.run # 固件
首次安装场景,需按照**“驱动 > 固件”的顺序安装驱动固件;覆盖安装场景,需按照“固件** **> 驱动”**的顺序安装固件驱动。
安装驱动:执行以下命令,完成驱动安装。
./Ascend-hdk-910b-npu-driver_25.0.rc1.1_linux-aarch64.run --full --install-for-all
-
若执行上述安装命令出现类似如下回显信息,请通过安装依赖解决解决。
[ERROR]The list of missing tools: lspci,ifconfig # openEuler:yum install -y net-tools pciutils # Ubuntu:apt-get install -y net-tools pciutils
-
若执行上述安装命令出现类似如下回显信息,可能是dkms工具问题导致驱动编译失败后残留,或者gcc版本原因导致驱动编译失败
[ERROR]Dkms install failed, details in : var/log/ascend_seclog/ascend_install.log. [ERROR]Driver_ko_install failed, details in : /var/log/ascend_seclog/ascend_install.log. 解决方法:进入“/var/lib/dkms”目录。cd /var/lib/dkms删除“davinci_ascend”目录。rm -rf davinci_ascend重新安装驱动。若依旧报错,请用户执行如下操作解决。若用户使用的是编译安装的gcc7.3.0,则执行如下命令建立软连接控制gcc版本。备份旧版本软连接。mv /usr/bin/gcc /usr/bin/gcc.bakmv /usr/bin/g++ /usr/bin/g++.bakmv /usr/bin/c++ /usr/bin/c++.bakmv /usr/bin/cc /usr/bin/cc.bak建立新版本软连接。ln -s /usr/local/gcc7.3.0/bin/gcc /usr/bin/gccln -s /usr/local/gcc7.3.0/bin/g++ /usr/bin/g++ln -s /usr/local/gcc7.3.0/bin/c++ /usr/bin/c++ln -s /usr/local/gcc7.3.0/bin/gcc /usr/bin/cc
-
若系统出现如下关键回显信息,则表示驱动安装成功。
Driver package installed successfully!
安装固件
执行以下命令,完成固件安装。
./Ascend-hdk-910b-npu-firmware_7.7.0.1.231.run --full
若系统出现如下关键回显信息,表示固件安装成功。
Firmware package installed successfully! Reboot now or after driver installation for the installation/upgrade to take effect
执行reboot命令重启系统
执行npu-smi info查看驱动加载是否成功。
[root@localhost soft]# npu-smi info
+------------------------------------------------------------------------------------------------+
| npu-smi 25.0.rc1.1 Version: 25.0.rc1.1 |
+---------------------------+---------------+----------------------------------------------------+
| NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page)|
| Chip | Bus-Id | AICore(%) Memory-Usage(MB) HBM-Usage(MB) |
+===========================+===============+====================================================+
| 0 910B4 | OK | 87.4 43 0 / 0 |
| 0 | 0000:C1:00.0 | 0 0 / 0 27498/ 32768 |
+===========================+===============+====================================================+
| 1 910B4 | OK | 86.8 44 0 / 0 |
| 0 | 0000:C2:00.0 | 0 0 / 0 27499/ 32768 |
+===========================+===============+====================================================+
| 2 910B4 | OK | 84.8 44 0 / 0 |
| 0 | 0000:81:00.0 | 0 0 / 0 27498/ 32768 |
+===========================+===============+====================================================+
| 3 910B4 | OK | 88.3 47 0 / 0 |
| 0 | 0000:82:00.0 | 0 0 / 0 27497/ 32768 |
+===========================+===============+====================================================+
| 4 910B4 | OK | 97.9 47 0 / 0 |
| 0 | 0000:01:00.0 | 0 0 / 0 27498/ 32768 |
+===========================+===============+====================================================+
| 5 910B4 | OK | 89.5 48 0 / 0 |
| 0 | 0000:02:00.0 | 0 0 / 0 27497/ 32768 |
+===========================+===============+====================================================+
| 6 910B4 | OK | 89.0 48 0 / 0 |
| 0 | 0000:41:00.0 | 0 0 / 0 27498/ 32768 |
+===========================+===============+====================================================+
| 7 910B4 | OK | 87.1 50 0 / 0 |
| 0 | 0000:42:00.0 | 0 0 / 0 27497/ 32768 |
+===========================+===============+====================================================+
2、部署docker、docker-compose(不能直接安装,需要最新版本)
yum install -y yum-utils device-mapper-persistent-data lvm2 yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce
systemctl start docker
systemctl enable docker
curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.24.7/docker-compose-linux-aarch64" -o /usr/local/bin/docker-compose
Daemon.json配置:
vi /etc/docker/daemon.json{"registry-mirrors": ["https://301dc05233c6419b810bdb22135af9eb.mirror.swr.myhuaweicloud.com"]}
systemctl start docker
systemctl enable docker
上传导入mindie镜像
docker load -i mindie.tar.gz
docker images
3、部署deepseek
要提前下载好deepseek,放到对应目录下: /home/soft/deepseek/DeepSeek-R1-Distill-Qwen-32B
docker run -itd -u root \
--ipc=host \
--network=host \
--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/devmm_svm \
--device=/dev/hisi_hdc \
-v /var/log/npu/:/usr/slog \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
-v /usr/bin/hccn_tool:/usr/bin/hccn_tool \
-v /home/soft/deepseek/DeepSeek-R1-Distill-Qwen-32B:/models \
--name Deepseek-R1-32B \
-p 1025:1025 \
--privileged=true \
--entrypoint=/bin/bash swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.0.T3-800I-A2-py311-openeuler24.03-lts
4、登入容器修改参数:
cd /usr/local/Ascend/mindie/latest/mindie-service/
vim conf/config.json
ipAddress: 177.5.4.2
managementIpAddress: 177.5.4.2
httpEnabled: falsenpuDeviceIds: [[0,1,2,3,4,5,6,7]]
Model name: Qwen-32b
modelWeightPath: /model
worldSize: 8
5、启动服务
nohup ./bin/mindieservice_daemon > /logs70B.log 2>&1
tail -f logs/70B.log
出现success即成功
停止服务:在宿主机执行:pkill -9 mindie_llm_back
6、测试
测试:
curl -H "Accept: application/json" \-H "Content-Type: application/json" \-X POST \-d '{"model": "Qwen-32b","messages": [{"role": "system","content": "你是一个拥有丰富经验的导游,请回答我提出的问题。"},{"role": "user","content": "请帮我介绍一下西湖, 并给一份相关的旅游攻略"}],"max_tokens": 512,"presence_penalty": 1.03,"frequency_penalty": 1,"temperature": 0.5,"top_p": 0.95,"stream": false}' \http://177.5.4.2:1025/v1/chat/completions \-w "响应时间: %{time_total} 秒"
7、部署dify
# 下载并解压dify,进入docker目录修改环境变量文件
cd dify/docker
cp .env.example .env
7、启动docker-compose
docker-compose up -d
8、dify登陆
上一步拉取完镜像后,dify启动成功,通过 http://ip:80登陆配置相关信息