diff --git "a/doc/deepseek/DeepSeek-V3&R1\351\203\250\347\275\262\346\214\207\345\215\227.md" "b/doc/deepseek/DeepSeek-V3&R1\351\203\250\347\275\262\346\214\207\345\215\227.md"
index 1726edccafbf4ac340a2bbda70883deb36ce3056..dd60db33b5b28dd7fbfa98d3bdca08a864ab95e2 100644
--- "a/doc/deepseek/DeepSeek-V3&R1\351\203\250\347\275\262\346\214\207\345\215\227.md"
+++ "b/doc/deepseek/DeepSeek-V3&R1\351\203\250\347\275\262\346\214\207\345\215\227.md"
@@ -1,8 +1,13 @@
# DeepSeek-V3&R1部署指南
## 1. 硬件要求及组网
+本文以DeepSeek-R1为主进行介绍,DeepSeek-V3与R1的模型结构和参数量一致,部署方式与R1相同。
-部署DeepSeek-R1量化模型至少需要2台Atlas 800I A2(8\*64G)服务器。本文以DeepSeek-R1为主进行介绍,DeepSeek-V3与R1的模型结构和参数量一致,部署方式与R1相同。
+### 1.1 单机部署
+部署DeepSeek-R1量化模型(A16W4)需要1台Atlas 800I A2(8\*64G)服务器。
+
+### 1.2 多机部署
+部署DeepSeek-R1量化模型(W8A8)至少需要2台Atlas 800I A2(8\*64G)服务器。
组网结构推荐使用npu直连模式,即两台服务器的**所有npu卡通过交换机连接,网络端口UP**
@@ -12,14 +17,16 @@
| 序号 | 检查项 | 详细说明 |
| ---- | ------------------------ | ------------------------------------------------------------ |
-| 2.A | W8A8权重存储空间 | 下载W8A8权重时,需确保机器内/挂载盘中有大于700G的存储空间。 |
-| 2.B | CPU侧内存 | 需确保CPU侧内存能够放下对应权重。
例:w8a8权重需要大约500G左右的内存,可通过free -h指令查看空闲cpu内存。
计算方式:free_mem >= (权重大小 / 机器数) * 1.3 (该计算方式待验证,但需要确保内存足够) |
+| 2.A | 模型权重存储空间 | 下载A16W4/W8A8权重时,需确保机器内/挂载盘中有大于400G/700G的存储空间。 |
+| 2.B | CPU侧内存 | 需确保CPU侧内存能够放下对应权重。
例:W8A8权重需要大约500G左右的内存,可通过free -h指令查看空闲cpu内存。
计算方式:free_mem >= (权重大小 / 机器数) * 1.3 (该计算方式待验证,但需要确保内存足够) |
| 2.C | 根据权重大小选择推理卡数 | W8A8至少需要2台800I/T A2 64G。 |
| 2.D | 权重正确性检查 | 请确保权重的正确性,对比权重/tokenizer等文件与源文件的MD5或SHA256值。 |
-### 2.1 量化W8A8权重下载
+### 2.1 量化模型权重下载
+
+ A16W4:modelers.cn [IPADS/DeepSeek-R1-A16W4 \| 魔乐社区](https://modelers.cn/models/IPADS/DeepSeek-R1-A16W4)
- modelers.cn [MindSpore-Lab/DeepSeek-R1-W8A8 \| 魔乐社区](https://modelers.cn/models/MindSpore-Lab/DeepSeek-R1-W8A8)
+ W8A8:modelers.cn [MindSpore-Lab/DeepSeek-R1-W8A8 \| 魔乐社区](https://modelers.cn/models/MindSpore-Lab/DeepSeek-R1-W8A8)
@@ -90,11 +97,11 @@ sh mindspore-deepseek/workspace/roles/prepare/files/lib/ascend_prepare.sh
| 4.B | 驱动固件检查 | 4.1 step2章节,运行一键部署前,请确保已经在所有宿主机上安装Ascend HDK driver & firemare。如未安装,参考3.1.2章节 |
| 4.C | 组网联通检查 | 4.1 step2章节,运行一键部署前,请确保组网联通性,建议参考5.3章节检测网络 |
-使用一键式部署脚本,可根据配置,一键部署双节点集群,并且拉起deepseek服务。
+使用一键式部署脚本,可根据配置,一键部署单节点/双节点集群,并且拉起deepseek服务。
### 4.1 部署脚本使用
-一键式部署脚本推荐在**单独控制节点**执行,控制节点需要可以使用ssh访问各个推理节点
+一键式部署脚本推荐在**单独控制节点**执行,控制节点需要可以使用ssh访问各个推理节点,**注意:单机部署需要根据注释调整Step2中配置文件**
**Step1:下载oedeploy工具(下载到控制节点)**
@@ -124,7 +131,7 @@ all:
ansible_user: root # 必须用root启动或者有权限
ansible_password: "密码" # 主节点密码
- workers:
+ workers: #单机部署,无需workers节点,请注释或删去workers内容
hosts:
worker1:
ansible_host: 1.2.3.5 # 从节点ip
@@ -133,28 +140,28 @@ all:
ansible_password: "密码" # 从节点密码
vars:
-# 容器镜像
-# 如果本地docker上已加载镜像,改成docker image的image_name和image_tag
-image_name: hub.oepkgs.net/oedeploy/openeuler/aarch64/deepseek_hyperinfer
+ # 容器镜像
+ # 如果本地docker上已加载镜像,改成docker image的image_name和image_tag
+ image_name: hub.oepkgs.net/oedeploy/openeuler/aarch64/deepseek_hyperinfer
image_tag: openeuler22.03-py3.11
# 将要拉起的推理容器的名称
container_name: openeuler_ds # 启动之后的docker name,不能和已有镜像重名
# 模型路径
-model_path: /workspace/deepseekv3 #根据实际模型文件及权重路径修改(2.2.1章节放权重的路径)
+ model_path: /workspace/deepseekv3 #根据实际模型文件及权重路径修改(2.2.1章节放权重的路径)
# ray 开放的端口
ray_port: 6379 # 脚本从这里读端口
- # 节点个数
+ # 节点个数,如单机部署,请修改为1
node_num: 2
# 拉起服务前是否停止其他容器
is_stop_other_container: 0 # 0:不停止其他容器;1:停止其他容器
# 推理服务端口
-llm_port: 8000 # 需确保该端口空闲
-# ray集群使用的网卡
-ray_device: enp67s0f0np0 # ifconfig查找ip对应网卡的网卡名
-# 模型权重类型
-model_type: safetensors
-# 跳过 ssh 校验(如需禁用此功能,请注释以下配置项)
-ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
+ llm_port: 8000 # 需确保该端口空闲
+ # ray集群使用的网卡
+ ray_device: enp67s0f0np0 # ifconfig查找ip对应网卡的网卡名
+ # 模型权重类型
+ model_type: safetensors
+ # 跳过 ssh 校验(如需禁用此功能,请注释以下配置项)
+ ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
```
启动master为主节点,worker为从节点,进行部署前,需要调整对应节点的ip地址,用户名,以及密码。
@@ -209,7 +216,7 @@ cp example_config config.cfg
在启动容器前会检测环境,若环境上有同名容器(无论是运行态还是停止态),均会使用已存在的容器
-### 5.3 网络检查
+### 5.3 网络检查(单机部署可忽略本步骤)
可在各个节点调用网络检测脚本
@@ -323,7 +330,7 @@ npu-smi set -t reset -i $id -c $chip_id
该脚本运行时,会将环境变量写入/root/.bashrc,若该文件中已有openeuler_deepseek_env_config字段,则视为环境变量已存在,会跳过环境变量设置流程。
-### 5.5 ray集群启动
+### 5.5 ray集群启动(单机部署可忽略本步骤)
该步骤在容器内执行,需在所有节点执行
@@ -408,6 +415,8 @@ Oedp兼容性bug,原因为环境上安装了多个py,互相干扰,建议
请确保各个节点根目录有足够空间
+### 7.4 模型推理时显示CUDA Paged Attrntion kernel only supports block sizes up to 32.
+MindSpore向后兼容性约束,早期限制block size为32大小,25年3月30号后已去除该限制。建议使用tag时间点在250330后的容器镜像。
## 附录
@@ -435,18 +444,16 @@ Oedp兼容性bug,原因为环境上安装了多个py,互相干扰,建议
.
├── config.yaml
├── main.yaml
+├── README.md
└── workspace
├── install.yml
└── roles
- ├── post
- │ └── tasks
- │ └── main.yml
├── prepare
│ ├── files
│ │ ├── lib
│ │ │ ├── ascend_prepare.sh
- │ │ │ ├── even-iso.py
│ │ │ ├── example_config
+ │ │ │ ├── fine-grained-bind-cann.py
│ │ │ ├── net_check.sh
│ │ │ ├── npu_net_config_simple.sh
│ │ │ ├── ray_start.sh
@@ -468,6 +475,6 @@ Oedp兼容性bug,原因为环境上安装了多个py,互相干扰,建议
└── ray-worker
└── tasks
└── main.yml
-16 directories, 19 files
+14 directories, 19 files
```