AES200物理机部署DeepSeek-R1蒸馏模型

AES200物理机部署DeepSeek-R1模型

华为官方官宣自己的NPU支持DeepSeek-R1模型部署,华为的大模型推理部署依托于其大模型推理引擎:MindIE,但是根据MindIE的文档,其只支持以下硬件:

表1 MindIE支持的硬件列表

类型配置参考
服务器Atlas 800I A2 推理产品
Atlas 200T A2 Box16 异构子框
推理卡Atlas 300I Duo 推理卡+Atlas 800 推理服务器(型号:3000)

而且根据华为官方发布的支持DeepSeek的docker 镜像,也需要以下硬件配置:

硬件要求

部署DeepSeek-V3模型用BF16权重进行推理至少需要4台Atlas 800I A2(864G)服务器,用W8A8量化权重进行推理则至少需要2台Atlas 800I A2 (864G)

今天我们就尝试一下,凌华智能科技有限公司发布的基于华为Ascend310P处理芯片的AES200边缘推理服务器能不能拉动DeepSeek这两大车! 开搞!!

1. 安装MindIE推理引擎

虽然根据MindIE的文档,MindIE只支持Atlas 300I Duo推理卡以上的设备,但是由于AES200采用的Ascend310P处理芯片是和Atlas 300I Duo卡采用的芯片是同一系列的芯片,按理来说MindIE也是应该能跑起来的,我们不防试试,走起!

注意:本次安装为了简单方便,我们的安装用户和运行用户都采用root账号!!!

1.1 安装方案

此次我们采用如下图所示的物理机部署方案,完成MindIE开发环境的安装。

img

1.2 准备AES200环境

这次我们在AES200上安装OpenEuler 22.03的系统版本,固件和驱动的版本如下:

软件名称分类发布日期说明
Ascend-hdk-310p-npu-firmware-soc_7.3.0.1.231.runNPU2024/07/19Atlas 200I SOC A1产品固件包(run格式)
Ascend-hdk-310p-npu-driver-soc-oe2203_24.1.rc2_linux-aarch64.runNPU2024/07/19Atlas 200I SOC A1产品ARM架构支持OpenEuler 22.03驱动包(run格式)
+--------------------------------------------------------------------------------------------------------+
| npu-smi 24.1.rc2                                 Version: 24.1.rc2                                     |
+-------------------------------+-----------------+------------------------------------------------------+
| NPU     Name                  | Health          | Power(W)     Temp(C)           Hugepages-Usage(page) |
| Chip    Device                | Bus-Id          | AICore(%)    Memory-Usage(MB)                        |
+===============================+=================+======================================================+
| 0       310P1                 | OK              | NA           27                0     / 0             |
| 0       0                     | NA              | 80           NA / 43173                              |
+===============================+=================+======================================================+

1.3 安装开发环境

MindIE与CANN版本必须配套使用,其版本配套关系如下表所示。

MindIE版本配套CANN版本
1.0.08.0.0

软件安装前,请下载下表MindIE依赖的软件包,各软件包版本号需要保持一致。

依赖软件包软件说明
CANNAscend-cann-toolkit*_{version}_linux-{arch}*.run开发套件包。
Ascend-cann-kernels-{chip_type}_{version}_linux-{arch}.run二进制算子包。
Ascend-cann-nnal*_{version}_linux-{arch}*.run加速库软件包。
ATB ModelsAscend-mindie-atb-models_{version}_linux-{arch}py*xxxtorchx.x.x*-{abi}.tar.gz模型库安装包。使用MindIE Service和MindIE LLM组件时,需要安装。
Ascend Extension for PyTorchtorch_npu-{torch_version}.post{post_id}-cpxxx-cpxxx-manylinux_{arch}.whltorch_npu插件whl包。
apex-{apex_version}_ascend-cpxxx-cpxxx-{arch}.whlApex模块的whl包。请参见《Ascend Extension for PyTorch 配置与安装》中的“(可选)安装APEX模块”章节,根据Python3.10版本自行编译。
torch-{torch_version}+cpu-cpxxx-cpxxx-linux_{arch}.whlPyTorch框架whl包。说明当前只支持1.11.0和2.1.0版本。请从《Ascend Extension for PyTorch 配置与安装》中的“安装PyTorch框架”章节获取。
1.3.1 安装依赖

根据MindIE的文档,MindIE依赖下表中的软件包

软件版本要求
glibc>=2.34,(openEuler22.03系统中glibc版本满足要求)。
gcc、g++>=11.4.0,(OpenEuler22.03系统找那个gcc,g++不满足要求),可以通过conda环境安装,或者编译安装,我这里采用Conda虚拟一个环境进行安装。
Python3.10*.x*、3.11.x,OpenEuler22.03默认带的python版本为3.9,我们这里用Conda来创建一个虚拟环境来满足对Python版本的要求。建议执行命令pip3 install --upgrade pip进行升级(pip版本需 ≤ 24.0),避免因pip版本过低导致安装失败。
gevent22.10.2
python-rapidjson>=1.6
geventhttpclient2.0.11
urllib32.1.0
greenlet3.0.3
zope.event5.0
zope.interface6.1
prettytable3.5.0
jsonschema4.21.1
jsonlines4.0.0
thefuzz0.22.1
pyarrow>=15.0.0
pydantic2.6.3
sacrebleu2.4.2
rouge_score0.1.2
pillow10.3.0
requests2.31.0
matplotlib>=1.3.0
text_generation0.7.0
numpy1.26.3
pandas2.1.4
transformers>=4.30.2,请用户根据模型选择对应版本。
tritonclient[all]-
colossalai0.4.0

安装Miniconda

$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
$ ./Miniconda3-latest-Linux-aarch64.sh #安装时选择缺失配置安装就行

创建虚拟环境

$ conda create -n mindie python=3.10
$ conda activate mindie
$ pip3 install --upgrade pip==24
$ conda install -c conda-forge gcc=11.4.0 gxx=11.4.0
$ gcc --version #检查gcc版本
$ pip3 --version #检查pip3版本呢

安装依赖pip包

将以下内容添加安装文件requirements.txt中,样例如下所示。

gevent==22.10.2
python-rapidjson>=1.6
geventhttpclient==2.0.11
urllib3>=2.1.0
greenlet==3.0.3
zope.event==5.0
zope.interface==6.1
prettytable~=3.5.0
jsonschema~=4.21.1
jsonlines~=4.0.0
thefuzz~=0.22.1
pyarrow~=15.0.0
pydantic~=2.6.3
sacrebleu~=2.4.2
rouge_score~=0.1.2
pillow~=10.3.0
requests~=2.31.0
matplotlib>=1.3.0
text_generation~=0.7.0
numpy~=1.26.3
pandas~=2.1.4
transformers>=4.30.2
tritonclient[all]
colossalai==0.4.0

在创建的mindie虚拟环境中执行以下命令进行安装

$ pip3 install -r requirements.txt
1.3.2 安装CANN

详细过程,请参照华为的《CANN 软件安装指南》中的“安装CANN软件包”章节,依据设备情况及操作系统支持情况,安装CANN开发套件包Ascend-cann-toolkit*_{version}_linux-{arch}*.run。

安装CANN依赖

在创建的conda 虚拟环境mindie下安装CANN依赖包

$ pip3 install attrs cython numpy==1.24.0 decorator sympy cffi pyyaml pathlib2 psutil protobuf==3.20 scipy requests absl-py cloudpickle  ml-dtypes tornado

安装toolkit

$ ./Ascend-cann-toolkit_8.0.0_linux-aarch64.run --install --install-for-all
# 环境变量设置
$ source /usr/local/Ascend/ascend-toolkit/set_env.sh

根据安装成功后的提示,添加source /usr/local/Ascend/ascend-toolkit/set_env.sh到/root/.bashrc中, 设置永久环境变量

安装二进制算子包

详细过程,请参照华为的《CANN 软件安装指南》中的“安装CANN软件包”章节,依据设备情况及操作系统支持情况,安装CANN二进制算子包Ascend-cann-kernels-{chip_type}_{version}_linux-{arch}.run。

$ ./Ascend-cann-kernels-310p_8.0.0_linux-aarch64.run --install --install-for-all

安装加速库

NNAL软件包中提供了面向大模型领域的ATB(Ascend Transformer Boost)加速库,实现了基于Transformer结构的神经网络推理加速引擎库,提供昇腾亲和的融合算子、通信算子、内存优化等,作为算子的公共底座提升了大模型推理性能。

$ ./Ascend-cann-nnal_8.0.0_linux-aarch64.run --install  --install-for-all
# 环境变量设置
$ source /usr/local/Ascend/nnal/atb/set_env.sh

source /usr/local/Ascend/nnal/atb/set_env.sh添加到/root/.bashrc文件中的最后一行, 设置永久环境变量

1.3.3 安装Pytorch
  • 请参见《Ascend Extension for PyTorch 配置与安装》中的“安装PyTorch框架”章节安装PyTorch框架。
  • 请参见《Ascend Extension for PyTorch 配置与安装》中的“安装torch_npu插件”章节安装torch_npu插件。

MindIE中各组件依赖PyTorch框架和torch_npu插件,依赖情况如下表所示,请用户依据实际使用需求安装。

组件名称是否需要安装PyTorch框架是否需要安装torch_npu插件
MindIE Torch必装可选
MindIE Service必装必装
MindIE LLM必装必装
MindIE SD必装必装

安装pytorch

# 下载软件包
$ wget https://download.pytorch.org/whl/cpu/torch-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
# 安装命令
$ pip3 install torch-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

安装pytorch扩展

# 下载插件包
$ wget https://gitee.com/ascend/pytorch/releases/download/v6.0.0-pytorch2.1.0/torch_npu-2.1.0.post10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
# 安装命令
$ pip3 install torch_npu-2.1.0.post10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

执行如下命令,若返回True 则说明安装成功。

python3 -c "import torch;import torch_npu;print(torch_npu.npu.is_available())"
1.3.4 安装ATB Models

详细过程,请参照华为的《MindIE安装指南》中的“安装ATB Models”章节。

ATB Models软件包是集成到了华为提供的MindIE推理镜像包里面,需要下载推理镜像包,运行docker启动镜像后,从/opt/package目录提取对应版本的ATB Models包。注意包有两类接包:abi0,abi1,请在你的mindie虚拟环境中使用以下指令查看abi是0还是1

python -c "import torch; print(torch.compiled_with_cxx11_abi())"

若输出结果为True表示abi1,False表示abi0,根据输出结果选择对应的abi包

$ mkdir /usr/local/Ascend/llm_model
$ tar -xzf Ascend-mindie-atb-models_1.0.0_linux-aarch64_py310_torch2.1.0-abi0.tar.gz -C /usr/local/Ascend/llm_model
# 环境变量设置
$ source /usr/local/Ascend/llm_model/set_env.sh

source /usr/local/Ascend/llm_model/set_env.sh添加到/root/.bashrc文件中的最后一行, 设置永久环境变量

安装atb-llm

$ pip3 install /usr/local/Ascend/llm_model/atb_llm-0.0.1-py3-none-any.whl

1.4 安装MindIE

1.4.1 准备安装包

MindIE软件包

名称软件包说明
MindIE软件包Ascend-mindie*_{version}_linux-{arch}*.run推理引擎软件包,主要用于用户开发基于MindIE的应用。

执行安装前请确保安装环境满足硬件环境支持的操作系统要求,并已参照安装驱动和固件安装开发环境章节完成开发环境的安装。执行MindIE软件包的安装,会依次安装MindIE RT、MindIE Torch、MindIE Service、MindIE LLM和MindIE SD各组件,组件包的路径在MindIE的子路径下。

1.4.2 安装步骤

执行安装程序

$ ./Ascend-mindie_1.0.0_linux-aarch64.run --install
# 环境变量设置
$ source /usr/local/Ascend/mindie/set_env.sh

source /usr/local/Ascend/mindie/set_env.sh添加到/root/.bashrc文件中的最后一行, 设置永久环境变量

1.5 配置MindIE Server

详细配置项介绍,请参照华为的《MindIE安装指南》中的“配置MindIE Server”章节的单机推理。

MindIE Server 对于Python的环境要求为Python3.10. 或者Python3.11. 此处以我的虚拟环境中Python3.10.16为例,如果环境中的Python3.10.16不是默认版本,需要参考如下方法添加环境变量到/root/.bashrc文件中(Python路径根据实际路径进行修改)。

conda activate mindie #默认激活虚拟环境
export export LD_LIBRARY_PATH=${HOME}/miniconda3/envs/mindie/lib:${HOME}/miniconda3/envs/mindie/lib/python3.10:$LD_LIBRARY_PATH

在此,我只是添加了Python的环境变量,并没有更改MindIE Server的配置项文件:config.json。这个文件可以根据不同的模型修改,我们放在模型部署时修改此文件。

2 部署DeepSeek模型

由于AES200的资源有限,肯定是不可能推理满血的DeepSeek模型的,我们采用一个蒸馏过的模型: DeepSeek-R1-Distill-Qwen-7B测试一下。

2.1 下载模型

由于模型是从huggingface官网下载,我们需要安装官方的下载工具huggingface_hub,这样更快的下载模型,注意:这里可能需要科学上网

 $ pip3 install -U huggingface_hub

下载模型文件

$ huggingface-cli download --resume-download deepseek-ai/DeepSeek-R1-Distill-Llama-8B  --local-dir /home/data/datasets/DeepSeek-R1-Distill-Llama-8B 

修改模型权重config.json中torch_dtype字段为float16

修改文件的属性:

$ chmod 750 /home/data/datasets/DeepSeek-R1-Distill-Llama-8B/config.json

2.2 服务化推理

打开配置文件

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

更改配置文件

{
...
"ServerConfig" :
{
...
"port" : 1040, #自定义
"managementPort" : 1041, #自定义
"metricsPort" : 1042, #自定义
...
"httpsEnabled" : false, #测试阶段可以用开启https
...
},

"BackendConfig": {
...
"npuDeviceIds" : [[0]], #因为AES200只有一个NPU
...
"ModelDeployConfig":
{
"truncation" : false,
"ModelConfig" : [
{
...
"modelName" : "qwen",
"modelWeightPath" : "/home/data/datasets/DeepSeek-R1-Distill-Llama-8B",
"worldSize" : 1, #这里的数字应和NPU的数量对应,我的测试结果结果是:如果不设置成1,执行报错。
...
}
]
},
}
}

拉起服务化

cd /usr/local/Ascend/mindie/latest/mindie-service/bin
./mindieservice_daemon

当出现Daemon start success!, 表示成功拉起服务

2025-02-09 14:27:32,109 [INFO] standard_model.py:155 - >>>rank:0 done ibis manager to device
2025-02-09 14:27:32,117 [INFO] npu_compile.py:20 - 310P,some op does not support
2025-02-09 14:27:32,118 [INFO] standard_model.py:172 - >>>rank:0: return initialize success result: {'status': 'ok', 'npuBlockNum': '2602', 'cpuBlockNum': '731', 'maxPositionEmbeddings': '131072'}
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Daemon start success!

2.3 推理请求

当服务化推理成功后,我们就可以通过curl发送推理求来测试是否可以正常推理。

开启一个新的终端, 并运行一下命令

 time curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{
 "model": "llama",
 "messages": [{
  "role": "user",
  "content": "我有三天的假期,我想去长沙玩玩,主要看看橘子洲头、岳麓山、博物馆,请给我做一个攻略"
 }],
 "max_tokens": 512,
 "presence_penalty": 1.03,
 "frequency_penalty": 1.0,
 "seed": null,
 "temperature": 0.5,
 "top_p": 0.95,
 "stream": false
}' http://127.0.0.1:1040/v1/chat/completions     #其中127.0.0.1以实际ip地址为准

大致的结果如下,但是感觉结果没有输出全,估计是curl请求的问题,待确认:

{"id":"endpoint_common_2","object":"chat.completion","created":1739086214,"model":"llama","choices":[{"index":0,"message":{"role":"assistant","content":"<think>\n好,我现在要帮用户制定一个三天的长沙游攻略,用户想去橘子洲头、岳麓山和博物馆。首先,我得了解这几个景点的地理位置和大致门票情况。\n\n橘子洲头在长沙市中心附近,应该不需要太多时间,可以安排第一天去那里,然后顺便看看周边的商业街,比如IFS城花园,这样比较充实。第二天可以考虑岳麓山,那里距离市区有点远,可能需要半程停车,然后坐公交或者打车前往山内景点。第三天可以集中在博物馆,比如湖南地方法院旧址和文化宫,这些都是比较著名的地方,而且都靠近市中心,方便安排。\n\n交通方面,长沙的公共交通很发达,但有些景点离市区较远的话可能需要自驾或包车。我得提醒用户注意这一点。另外,每个景点的开放时间也要确认,如果有特殊展览的话会不会影响行程。\n\n住宿的话,如果是短期旅行,可以推荐一些经济型酒店或民宿,特别是如果预算有限的话,还可以给出一些选择建议。不过,也有可能用户希望更高档,所以我就简单提一下选项吧。\n\n餐饮部分,每个地方都有一些特色美食,比如湘菜火锅、烧烤等,要让用户知道能吃到当地特色,这样他们会更满意行程。此外,还应告知他们安全带好风衣,因为四季变换时节气变化较大,不同季节防护措施不同。\n\n最后,把这些内容整合成一份清晰的攻略,让每一天都有明确的活动安排,并且尽量紧凑时间,以满足三天之内尽可能多地点游玩。\n</think>\n\n好的!以下是一个详细的大纲,将帮助你规划三日之旅:\n\n---\n\n### **第一 天:橘子洲头与城市体验**\n**上午:橘子洲头(Yueh-Lung Mountain)**\n1. **门票价格**:约60-80元  \n2. **游览路线**:\n   - 从入口进入后,可骑电车环岛观光,或步行登山至望云楼(免费)。\n","tool_calls":null},"finish_reason":"length"}],"usage":{"prompt_tokens":39,"completion_tokens":512,"total_tokens":551},"prefill_time":140,"decode_time_arr":[97,103,97,96,96,95,98,96,95,95,102,100,96,96,96,96,95,96,98,95,97,95,97,95,95,96,95,99,97,96,95,96,97,96,97,98,100,101,100,100,100,100,102,100,101,100,101,100,101,101,100,100,99,99,101,95,97,97,95,96,95,96,95,95,96,98,97,97,95,95,96,95,95,96,97,95,95,95,96,95,96,96,102,96,97,97,96,95,98,99,95,99,104,96,95,95,95,98,95,95,96,96,95,95,96,96,95,95,96,96,95,99,95,95,95,97,95,97,96,96,97,95,96,95,95,96,96,95,95,95,95,103,95,96,97,95,97,96,96,95,96,97,97,96,95,97,95,95,95,96,95,97,97,99,97,96,96,96,95,95,100,99,96,95,95,95,95,95,95,96,113,96,96,96,104,95,96,95,97,96,95,96,95,95,95,95,96,96,95,95,104,96,98,95,95,95,96,95,95,95,103,95,95,96,95,96,96,96,96,97,95,95,97,97,95,97,96,98,96,95,95,97,98,95,96,97,96,95,95,97,96,95,95,95,96,95,95,95,95,103,102,96,96,102,97,95,96,95,96,107,95,95,95,99,99,108,99,100,101,103,102,100,100,102,100,102,100,100,102,102,100,100,101,99,101,100,102,100,102,100,95,97,95,95,96,95,96,95,95,95,97,95,96,97,96,100,95,95,97,96,95,96,95,95,95,97,95,95,103,95,96,96,100,97,95,95,97,95,95,95,95,95,102,96,95,95,95,103,96,96,95,103,100,95,95,95,96,95,96,96,95,96,95,96,95,98,96,96,97,96,96,96,96,103,95,95,95,96,95,95,95,96,96,96,96,97,96,95,96,95,96,97,96,95,97,95,95,96,96,97,97,96,96,98,97,96,96,96,95,95,95,97,95,96,98,96,95,95,96,95,96,95,95,107,98,95,95,95,95,95,106,95,97,106,96,96,96,96,96,96,95,97,96,95,95,98,95,95,95,96,95,103,95,96,96,96,96,95,95,96,96,97,95,95,95,95,96,96,95,103,95,96,96,96,95,103,97,96,96,95,96,95,96,96,96,95,95,98,103,96,96,97,96,98,96,96,95,95,95,95,95,95,103,96,95,95,103,96,98,96,95,100,102,95,103,96,95,95,95,95,95,95,95,95,96,96,96,96,97,96,96]}
real    0m49.998s
user    0m0.011s
sys     0m0.017s

性能方面:

第一次开启新话题比较慢,要思考1分钟多钟,后续基于此话题在继续问问题会快一些,总体而言,也就是AES200也能跑大模型,只是速度方面稍慢,华为的库支持还需要完善!

### 关于Cadence 17.2版本中Pspice的教程 #### 安装指南 对于希望安装Cadence PSpice 17.2版本的用户来说,需注意几个关键步骤。当点击安装Cadence软件时,应指定添加安装包路径以及设定不含空格和汉字字符的安装路径[^1]。完成基础软件部署后,还需通过加入Hotfix文件的方式安装必要的更新补丁。最后,在一切设置妥当之后,务必记得重启计算机以使更改生效。 #### 绘制原理图 一旦上述准备工作就绪,则可以在重新启动后的环境中利用OrCAD Capture CIS工具着手绘制所需的电路原理图。此阶段涉及的具体操作包括但不限于元件的选择、放置及其间的连接构建等动作。 #### 创建自定义电路模块 针对那些想要进一步定制化工作流或者提高效率的技术人员而言,掌握如何基于个人需求创建专属的电路组件显得尤为重要。在Cadence PSpice环境下,这意呸着能够把一系列预设好的子电路打包成独立单元以便重复调用或分享给团队成员。具体实现过程涵盖了从草稿构思到最后成品导出的一系列环节[^2]。 #### 设计流程概览 在整个电子设计自动化领域里,由概念验证直至最终产品成型往往遵循一套既定的工作模式。对于采用Cadence平台开展工作的工程师们来讲,这套方法论通常始于案例研究进而过渡至详尽的设计实施;期间会经历诸如原理图表绘、错误检测修正、性能测试评估等多个重要节点直到所有目标达成为止[^3]。 #### 原理图设计概述 深入探讨一下项目结构的话就会发现,“Design Resources”部分主要负责存储整个项目的配置信息。“Outputs”则用于汇总各类中间产物或是终期报告文档。“Referenced Projects”允许设计师轻松关联其他辅助性的外部资料库从而促进跨部门协作交流活动顺利展开。值得注意的是如果当前任务涉及到仿真的话那么这里还会额外显示出专门用来支持此类作业的相关条目——即所谓的“PSpice Resources”。 ```python # Python代码示例仅作为装饰用途,并不实际参与解释说明逻辑 def example_function(): pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值