硬件要求
部署DeepSeek-R1模型用BF16权重进行推理至少需要4台Atlas 800I A2(864G)服务器,用W8A8量化权重进行推理则至少需要2台Atlas 800I A2 (864G)
权重下载
modelscope download --model cognitivecomputations/DeepSeek-R1 --local_dir ./DeepSeek-R1
高峰期不中断情况大概需要下一天
权重转换
git clone https://gitee.com/ascend/ModelZoo-PyTorch.git
cd ModelZoo-PyTorch\MindIE\LLM\DeepSeek\DeepSeek-V2\NPU_inference
python fp8_cast_bf16.py --input-fp8-hf-path /home/weight/DeepSeek-R1 --output-bf16-hf-path /home/weight/deepseek-R1-bf16
DeepSeek官方没有针对DeepSeek-R1提供新的权重转换脚本,所以复用DeepSeek-V3的权重转换脚本
- 由于模型权重较大,请确保您的磁盘有足够的空间放下所有权重,例如DeepSeek-R1在转换前权重约为640G左右,在转换后权重约为1.3T左右
准备镜像
mindie:2.0.T3-800I-A2-py311-openeuler24.03-lts-aarch64
各组件版本配套如下:
暂时无法在飞书文档外展示此内容
启动容器
docker run -itd --privileged --name=容器名称 --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 /权重路径:/权重路径 \
mindie:1.0.0-XXX-800I-A2-arm64-py3.11(根据加载的镜像名称修改) \
bash
纯模型测试
精度测试
cd /usr/local/Ascend/atb_llm/tests/modeltest/
bash run.sh pa_bf16 full_CEval 5 16 deepseekv2 /path/to/weights/DeepSeek-R1 /path/to/xxx/ranktable.json 32 4 0 {主节点IP}
# 0 代表从0号卡开始推理,之后的机器依次从8,16,24。
性能测试
bash run.sh pa_bf16 performance [[256,256]] 16 deepseekv2 /path/to/weights/DeepSeek-R1 /path/to/xxx/ranktable.json 32 4 0 {主节点IP}
# 0 代表从0号卡开始推理,之后的机器依次从8,16,24。
服务化测试
# 配置服务化环境变量
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export MIES_CONTAINER_IP=容器ip地址
export RANKTABLEFILE=rank_table_file.json路径
修改服务化参数
cd /usr/local/Ascend/mindie/latest/mindie-service/
————————————————————————————————————————————————————————
### 拉起服务
# 解决权重加载过慢问题
export OMP_NUM_THREADS=1
# 设置显存比
export NPU_MEMORY_FRACTION=0.95
# 拉起服务化
cd /usr/local/Ascend/mindie/latest/mindie-service/
./bin/mindieservice_daemon
注意:
1、关闭防火墙
2、正确配置权重及rank_table的权限
3、驱动固件、toolkit、镜像等注意版本配套
4、rank_table_file.json的正确性,务必每台机器一致
5、MindIE-Service的conf/config.json的配置,通过该json文件调参
Curl测试
curl http://172.16.0.21:1025/v1/completions -H "Content-Type: application/json" -d '{
"model": "deepseekr1",
"prompt": "你是谁",
"max_tokens": 100,
"temperature": 0.9
}'
性能测试数据
context batch TTFT ms TPS (without prefill) TPS (with prefill)
128+1024 1 131.173 15.044 15.029
128+1024 8 237.365 14.309 14.274
128+1024 16 256.646 11.083 7.35
128+1024 32 426.948 7.771 3.70
128+1024 64 762.593 4.925 1.81
appendix
rank_table_file设置
功能描述:此环境变量用于控制是否通过ranktable file进行集合通信域建链。
· 未配置时,通过默认的协商流程进行集合通信域建链。
· 配置且文件全路径有效时,通过ranktable file进行集合通信域建链。
配置方法:
首先在每台机器下载生成rank_table_file的和merge的脚本
生成json文件的脚本
wget https://gitee.com/mindspore/mindformers/raw/r1.0/mindformers/tools/hccl_tools.py
merge 脚本
wget https://gitee.com/mindspore/mindformers/raw/r1.0/mindformers/tools/merge_hccl.py
在两台机器上分别执行 python hccl_tools.py 会分别生成当前机器的npu信息的json脚本。
将json文件传入一台机器后使用python merge_hccl $1.json $2.json 生成两台机器的json脚本,随后传分发到两台机器中,执行export RANKTABLEFILE=/home/ranktable.json 加入环境变量。