一、资源选型
在天翼云官网开通海量文件服务(OceanFS)或弹性文件服务(SFS)。
注意
创建 OceanFS 时,需开启 “终端节点” 创建开关。
在天翼云官网开通弹性高性能计算服务,具体配置如下:
- 1 台昇腾 910B NPU 物理机,作为master管理节点 
- 7 台昇腾 910B NPU 物理机,作为compute计算节点 
注意
在集群创建过程中,“队列与计算节点” 页面的队列名称需设置为 batch(默认值)。
二、环境准备
2.1 配置管理节点参与计算任务
设置管理节点提供计算资源,可按以下步骤手动配置:
- 在管理节点修改调度器配置文件,在文件末尾添加以下信息(其中[管理节点名]需替换为集群管理节点的 hostname): 
$ vim /opt/galaxy/scheduler/slurm/22.05.9.1/etc/slurm.conf
...
NodeName=[管理节点名] CPUs=192 Boards=2 SocketsPerBoard=2 CoresPerSocket=48 ThreadsPerCore=1 RealMemory=1546544 Gres=gpu:910b2:8- 在队列配置文件中,将集群管理节点的 hostname 添加到 Nodes 列表首位: 
$ vim /opt/galaxy/scheduler/slurm/22.05.9.1/etc/queue_config
PartitionName=batch Default=yes MaxTime=-1 State=UP PriorityTier=40000 Nodes=[管理节点名],compute001,compute002,compute003,compute004,compute005,compute006,compute007- 将任意一台计算节点的/etc/default/gres.conf文件拷贝到管理节点的/etc/default/目录,示例命令如下(在管理节点执行): 
$ scp compute0001:/etc/default/gres.conf /etc/default/- 在管理节点重启 slurm 服务: 
$ systemctl start slurmd
$ systemctl enable slurmd
$ systemctl restart slurmctld- 检查管理节点是否已加入计算队列(例如查看 master001 是否在 batch 队列中,已加入的示例如下): 
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
batch*       up   infinite      8  idle compute[001-007],master0012.2 本地 NVME 分区
需将节点的 nvme1n1 和 nvme0n1 两块 NVME 盘分别挂载至/mnt/nvme1n1和/mnt/nvme0n1目录,可通过以下脚本实现:
#!/bin/bash
# 设备列表
devices=("/dev/nvme0n1" "/dev/nvme1n1")
mount_points=("/mnt/nvme0n1" "/mnt/nvme1n1")
fs_type="xfs"
# 确保 root 权限
if [[ $EUID -ne 0 ]]; then
    echo "请使用 root 运行此脚本!"
    exit 1
fi
for i in "${!devices[@]}"; do
    device="${devices[$i]}"
    mount_point="${mount_points[$i]}"
    # 创建挂载目录
    mkdir -p "$mount_point"
    # 获取设备的文件系统类型
    current_fs=$(blkid -s TYPE -o value "$device")
    if [[ -z "$current_fs" ]]; then
        echo "设备 $device 没有文件系统,正在格式化为 $fs_type..."
        mkfs.xfs -f "$device"
    else
        echo "$device 已格式化为 $current_fs,跳过格式化"
    fi
    # 确保设备未被挂载后再尝试挂载
    umount "$device" 2>/dev/null
    mount -t "$fs_type" "$device" "$mount_point"
    if [[ $? -ne 0 ]]; then
        echo "错误:无法挂载 $device 到 $mount_point,请检查设备或文件系统!"
        exit 1
    fi
    echo "$device 已成功挂载到 $mount_point"
    # 获取 UUID 并更新 /etc/fstab,避免重复添加
    uuid=$(blkid -s UUID -o value "$device")
    if ! grep -q "$uuid" /etc/fstab; then
        echo "UUID=$uuid  $mount_point  $fs_type  defaults  0 0" >> /etc/fstab
        echo "$device (UUID=$uuid) 已添加到 /etc/fstab"
    else
        echo "$device 已存在于 /etc/fstab,无需添加"
    fi
done
echo "所有磁盘已成功挂载并配置为开机自动挂载!"执行完成后,可通过以下命令查看磁盘分区情况:
$ lsblk
NAME               MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                  8:0    0 446.6G  0 disk 
|-sda1               8:1    0   122M  0 part 
|-sda2               8:2    0 976.6M  0 part /boot/efi
|-sda3               8:3    0   1.9G  0 part /boot
`-sda4               8:4    0 443.7G  0 part 
  |-system-lv_swap 253:0    0    16G  0 lvm  [SWAP]
  `-system-lv_root 253:1    0 427.7G  0 lvm  /
nvme0n1            259:0    0   2.9T  0 disk /mnt/nvme0n1
nvme1n1            259:1    0   2.9T  0 disk /mnt/nvme1n1galaxy 集群启动后,/home和/opt目录为各节点的共享目录,可通过以下命令查看:
$ df -h
Filesystem                  Size  Used Avail Use% Mounted on
devtmpfs                    4.0M     0  4.0M   0% /dev
tmpfs                       756G  419M  755G   1% /dev/shm
tmpfs                       303G  1.8G  301G   1% /run
tmpfs                       4.0M     0  4.0M   0% /sys/fs/cgroup
/dev/mapper/system-lv_root  428G   20G  408G   5% /
tmpfs                       756G  200K  756G   1% /tmp
/dev/sda3                   1.9G  148M  1.7G   9% /boot
/dev/sda2                   975M  6.4M  969M   1% /boot/efi
tmpfs                       152G     0  152G   0% /run/user/0
/dev/nvme0n1p1              3.0T   21G  2.9T   1% /mnt/nvme0n1
/dev/nvme1n1p1              3.0T  654G  2.3T  22% /mnt/nvme1n1
master001:/data/nfs/home    428G   20G  408G   5% /home
master001:/data/nfs/opt     428G   20G  408G   5% /opt注意
上述示例中使用 master001 作为 NFS 服务节点,实际部署时也可根据需求使用 OceanFS 作为共享存储。
本文档部署方案中,模型和 MindIE 容器镜像将存储在各节点的/mnt/nvme1n1目录,/home目录仅用于服务启动及存放日志文件,轻量化设计可减少共享存储压力。
2.3 下载脚本
需将脚本包下载并解压至/home目录:
$ cd /home
$ wget https://jiangsu-10.zos.ctyun.cn/galaxy/deployment/lsep_8node_v20250901.tar
$ tar -xvf lsep_8node_v20250901.tar解压完成后,可通过以下命令查看目录结构:
$ ll
total 840
-rw-r--r-- 1 root root 860160 Sep  1 17:55 lsep_8node_v20250901.tar
drwxr-xr-x 8 root root    255 Sep  1 17:52 lsep_deepseek2.4 下载 MindIE
需将 MindIE 容器存放至各节点的/mnt/nvme1n1目录,操作步骤如下:
$ mkdir -p /mnt/nvme1n1/apptainer/
$ cd /mnt/nvme1n1/apptainer/
$ wget https://jiangsu-10.zos.ctyun.cn/galaxy/apptainer/mindie/mindie_2.1.RC1-800I-A2-py311-openeuler24.03-lts-fix.sif下载完成后,可通过以下命令查看文件:
$ ll /mnt/nvme1n1/apptainer/
total 5032820
-rw-r--r-- 1 root root 5153607680 Sep  1 10:54 mindie_2.1.RC1-800I-A2-py311-openeuler24.03-lts-fix.sif为方便后续调用,需在/home/lsep_deepseek目录下创建软链接:
$ cd /home/lsep_deepseek
$ ln -s /mnt/nvme1n1/apptainer/mindie_2.1.RC1-800I-A2-py311-openeuler24.03-lts-fix.sif .2.5 下载模型文件
需将模型文件下载并存储在各节点的/mnt/nvme1n1/model/目录,以下以量化版 DeepSeek-R1 模型为例展示目录结构:
$ ll /mnt/nvme1n1/model/DeepSeek-R1-0528-W8A8/
total 658940180
-rwxr-x--- 1 root root        1802 Jul  7 10:49 config.json
-rwxr-x--- 1 root root          48 Jun  5 10:58 configuration.json
-rwxr-x--- 1 root root       14707 Jun  5 10:58 md5sums.txt
-rwxr-x--- 1 root root 10712695936 Jun  5 14:22 mtp_float-1.safetensors
-rwxr-x--- 1 root root 10716492808 Jun  5 14:22 mtp_float-2.safetensors
-rwxr-x--- 1 root root  5497763368 Jun  5 14:22 mtp_float-3.safetensors
-rwxr-x--- 1 root root    10289502 Jun  5 10:58 quant_model_description_w8a8_dynamic.json
-rwxr-x--- 1 root root  4287134112 Jun  5 14:22 quant_model_weight_w8a8_dynamic-00001-of-00158.safetensors
-rwxr-x--- 1 root root  4291084296 Jun  5 14:22 quant_model_weight_w8a8_dynamic-00002-of-00158.safetensors
...
-rwxr-x--- 1 root root  1853358176 Jun  5 14:22 quant_model_weight_w8a8_dynamic-00158-of-00158.safetensors
-rwxr-x--- 1 root root    17224440 Jun  5 10:58 quant_model_weight_w8a8_dynamic.safetensors.index.json
-rwxr-x--- 1 root root        1680 Jun  5 10:58 README.md
-rwxr-x--- 1 root root        3957 Jun  5 10:58 tokenizer_config.json
-rwxr-x--- 1 root root     7847602 Jun  5 10:58 tokenizer.json注意
如需快速完成模型罐装,可联系公有云事业部通过对等连接方式实现。
三、服务起停
3.1 配置 DeepSeek 大 EP 服务
需在/home/lsep_deepseek目录下修改lsep_start.sh脚本,配置 coordinator 与 controller 的执行节点:
$ cd /home/lsep_deepseek
$ vim lsep_start.sh
export IP_COORDINATOR=[IP1]
export IP_CONTROLLER=[IP2]其中:
- [IP1]需替换为部署 coordinator 服务的服务器 IP 地址 
- [IP2]需替换为部署 controller 服务的服务器 IP 地址 
注意
集群推理服务的 API 接口使用的 IP 为[IP1]。
coordinator 与 controller 服务需部署在不同的服务器上。
3.2 启动 DeepSeek 大 EP 服务
执行以下命令即可启动大 EP 服务(启动过程约需 5 分钟):
$ cd /home/lsep_deepseek
$ sh lsep_start.sh
IP_COORDINATOR      = 192.168.0.24
IP_CONTROLLER       = 192.168.0.42
Submitted srun_p.sh, Job ID: 889
Submitted srun_p.sh, Job ID: 890
Submitted srun_d.sh, Job ID: 891
Created symlink: ranktable_p1.json -> ranktable.889.json
Created symlink: ranktable_p2.json -> ranktable.890.json
Created symlink: ranktable_d.json  -> ranktable.891.json
Submitted srun_coordinator.sh, Job ID: 892
Submitted srun_controller.sh, Job ID: 893服务启动后,可查看logs目录下的ms_coordinator_run_log.txt文件,当出现以下信息时,说明服务启动成功:
$ tail -f logs/ms_coordinator_run_log.txt
...
MindIE-MS coordinator is ready!!!可通过以下命令进行服务检测(向 DeepSeek 模型发送提问):
$ curl -i --location 'http://192.168.0.24:3025/v1/chat/completions' --header 'Content-Type: application/json' --data '{ "model": "DeepSeek-R1", "stream": false, "messages": [ {"role": "user", "content": "你是谁"} ] }'
HTTP/1.1 200 OK
Server: MindIE-MS
Content-Type: application/json; charset=utf-8
Content-Length: 4939
{"id":"14721165810121334024","object":"chat.completion","created":1753083070,"model":"DeepSeek-R1","choices":[{"index":0,"message":{"role":"assistant","content":"<think>\n嗯,用户问了一个非常基础但也很关键的问题——“你是谁”。这通常是用户第一次接触助手时的开场白,可能带着好奇或试探的心态。\n\n用户可能刚打开聊天界面,想确认自己在和什么样的AI交流。ta需要快速建立对助手的认知框架:是工具还是伙伴?专业还是亲切?甚至可能隐含“你能帮我到什么程度”的期待。\n\n考虑到这是初遇场景,回复要同时完成三个目标:明确身份(DeepSeek-R1)、传递功能边界(知识截止2024年7月)、建立亲和力(表情符号和开放结尾)。用“小伙伴”的比喻降低距离感,但“知识丰富”又暗示专业性。\n\n最后那句“有什么可以帮你”的开放式提问很重要——既承接了身份介绍,又把主动权交还给用户,避免初遇时单方面输出造成的压迫感。那个笑脸表情应该能缓解新用户的紧张情绪吧?\n</think>\n你好呀!我是 **DeepSeek-R1**,由中国的「深度求索」团队研发的一款智能助手。你可以把我当作一个知识丰富、乐于助人的小伙伴~😊\n\n我的主要能力包括:\n\n- 回答各种知识类问题(历史、科技、文化、生活常识等)  \n- 帮你写作、改文案、写报告、写代码  \n- 阅读和分析你上传的文档(PDF、Word、Excel等)  \n- 陪你聊天、解闷、出主意、做计划  \n\n目前我是**纯文字助手**,还不支持语音或识图,但我会尽力用文字给你最贴心的帮助!  \n📚 我的知识更新到 **2024年7月**,所以对之前的事情了解得比较多~\n\n有什么我可以帮你的吗?😄","tool_calls":null},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":4,"completion_tokens":359,"total_tokens":363,"batch_size":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]}3.3 查看 DeepSeek 大 EP 服务状态
可通过 slurm 命令squeue查看作业运行信息:
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
               892     batch coordina     root  R       2:43      8 hpc-ep-910bcompute[0001-0007],hpc-ep-910bmaster0001
               893     batch controll     root  R       2:43      8 hpc-ep-910bcompute[0001-0007],hpc-ep-910bmaster0001
               889     batch  prefill     root  R       2:46      2 hpc-ep-910bcompute0001,hpc-ep-910bmaster0001
               890     batch  prefill     root  R       2:46      2 hpc-ep-910bcompute[0003,0006]
               891     batch   decode     root  R       2:46      4 hpc-ep-910bcompute[0002,0004-0005,0007]注意
可在/home/lsep_deepseek/logs目录中查看当前作业的日志文件。
3.4 停止 DeepSeek 大 EP 服务
执行以下命令即可停止 DeepSeek 大 EP 服务:
$ sh lsep_stop.sh如需清理历史 DeepSeek 大 EP 服务的所有日志,可执行:
$ sh lsep_clean.sh注意
ascend目录下会生成大量日志文件,可能占用较多磁盘空间,建议定期清理。
四、大模型服务调用
4.1 API 接口调用
当前大 EP 方案中,模型信息端口与推理服务端口分离,默认端口设置如下:
- 模型信息接口:http://[IP1]:1025/v1/models 
- 推理服务端口:3025 
- 推理服务 API 接口:http://[IP1]:3025/v1 
其中,[IP1]为步骤 2.1 中配置的 coordinator 服务部署节点的 IP 地址。
4.2 客户端调用(以 Anything LLM 为例)
以下以 Anything LLM 工具调用大 EP 服务为例,其他客户端的使用方式类似。
首先,需通过 1025 端口获取模型信息:
注意
此时调用模型服务可能会报 400 错误,属于正常现象。
随后,将端口修改为 3025 即可调用推理服务,正常使用模型功能:
