You need to enable JavaScript to run this app.
文档中心
GPU云服务器

GPU云服务器

复制全文
下载 pdf
DeepSeek系列模型
GPU-大EP部署DeepSeek-R1/V3.1模型
复制全文
下载 pdf
GPU-大EP部署DeepSeek-R1/V3.1模型
本文以在6台ecs.hpcpni3ln.45xlarge实例中部署DeepSeek-R1模型为例,介绍如何通过大规模专家并行(EP)技术融合SGLang框架,提升集群吞吐性能,实现模型高效推理训练。​
背景信息​
EP​
EP(Expert Parallelism,专家并行)是混合专家(MoE)模型中的核心并行策略,其核心思想是将MoE模型中的专家(Expert)分布到多个计算设备(例如GPU)上,解决单卡内存和算力的瓶颈限制,并通过负载均衡、通信优化和硬件亲和性设计,实现性能与资源效率的平衡。​
DeepSeek-R1​
DeepSeek-R1是基于DeepSeek-V3-Base训练生成的推理模型。相较于DeepSeek-V3模型,DeepSeek-R1更擅长数学、代码和自然语言推理等复杂任务,其凭借模型开源、算法创新、极致性价比吸引全球注意。了解更多。​
DeepSeek-V3.1-Terminus​
DeepSeek-V3.1-Terminus是在V3.1的基础上,优化了语言一致性问题,缓解了中英文混杂、偶发异常字符等情况;提升了Agent能力,进一步优化了Code Agent与Search Agent的表现,模型输出效果相比前一版本更加稳定。了解更多。​
方案架构​
本文基于解耦模式(Disaggregation Mode)与xPyD弹性调度框架,通过6台ecs.hpcpni3ln.45xlarge实例构建高性能分布式推理集群。集群被划分为专用的Prefill预处理节点池与Decode解码生成节点池,分别承载输入Prompt预处理与输出Token生成任务,实现计算资源的定向分配与推理阶段的深度解耦。其中,2台Prefill节点实例采用DP4+EP16部署方案,通过数据并行提升批处理能力,适应Prompt预处理阶段的高带宽需求;4台Decode节点实例采用DP32+EP32部署方案,强化单Token生成阶段的低延迟特性。​
​​​
软件要求​
  • NVIDIA驱动:​
  • GPU驱动:用来驱动NVIDIA GPU的程序。本文以535.161.08为例。​
  • 运行环境:​
  • SGLang框架:SGLang是一个用于大型语言模型和视觉语言模型的快速服务框架,本文以v0.5.2版本为例。​
操作步骤​
步骤一:准备环境​
  1. 创建GPU计算型实例。​
  • ​
    配置项​
    推荐配置​
    基础配置​
    ​
    计算规格​
    ecs.hpcpni3ln.45xlarge​
    说明​
    ecs.hpcpni3ln.45xlarge规格实例正在邀测中,如需试用,请提交工单或联系客户经理申请。​
    镜像​
    Ubuntu 22.04 with GPU Driver 535.161.08 and doca​
    说明​
    若您选用其他发行版本的镜像,需在创建实例后自行安装GPU驱动。​
    实例数量​
    6​
    说明​
    本文创建的6台GPU实例,其中:​
    • 2台作为Prefill节点,分别命名为“Prefill_0”、“Prefill_1”。​
    • 4台作为Decode节点,分别命名为“Decode_0”、“Decode_1”、“Decode_2”、“Decode_3”。​
    存储​
    • 规格:吞吐型SSD TL0云盘​
    • 容量:不低于1 TiB​
    说明​
    本文使用的DeepSeek-R1/DeepSeek-V3.1-Terminus模型参数量为671 B,您可以根据实际部署的模型参数量级,调整云盘容量。​
    网络配置​
    ​
    私有网络​
    6台实例需处于同一私有网络。​
    公网IP​
    勾选“分配弹性公网IP”。​
    ​
  1. 安装依赖的软件、工具。​
  1. 分别登录购买的6台GPU实例。了解更多。​
  1. 在每台实例中分别执行如下命令,安装、配置Docker。​
  • ​
    sudo apt update​
    sudo apt install ca-certificates curl gnupg lsb-release​
    sudo mkdir -p /etc/apt/keyrings​
    curl -fsSL https://mirrors.ivolces.com/docker/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg​
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.ivolces.com/docker/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null​
    sudo apt update​
    sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y​
    ​
  1. 在每台实例中分别执行如下命令,安装NVIDIA Container Toolkit。​
  • ​
    curl -s https://mirrors.ivolces.com/nvidia_all/ubuntu2204/x86_64/3bf863cc.pub | sudo apt-key add -​
    cat <<EOF >/etc/apt/sources.list.d/nvidia.list​
    deb http://mirrors.ivolces.com/nvidia_all/ubuntu2204/x86_64/ /​
    EOF​
    apt update​
    apt install nvidia-container-toolkit -y​
    ​
  1. 在每台实例中分别执行如下命令配置Docker,使容器可以使用实例的GPU资源。​
  • ​
    sudo nvidia-ctk runtime configure --runtime=docker​
    sudo systemctl restart docker​
    ​
  1. (可选)初始化本地盘。​
  • 若您选用的实例规格搭配有本地盘,建议您执行如下命令将本地盘挂载到存储模型的目录“/data00”,提升模型加载速度。​
  1. 执行如下命令,创建GPT分区。​
  • ​
    sudo parted /dev/nvme0n1 --script mklabel gpt​
    sudo parted /dev/nvme0n1 --script mkpart primary ext4 0% 100%​
    ​
说明​
请将/dev/nvme0n1替换为实际本地盘名称。​
  1. 执行如下命令,格式化分区文件系统类型为ext4。​
  • ​
    sudo mkfs.ext4 /dev/nvme0n1p1​
    ​
说明​
请将ext4替换为您期望使用的文件系统。​
  1. 执行如下命令,创建并将分区挂载至“/data00”挂载点。​
  • ​
    sudo mkdir -p /data00​
    sudo mount /dev/nvme0n1p1 /data00​
    ​
步骤二:部署、运行模型​
  1. 分别登录购买的6台GPU实例。了解更多。​
  1. 执行如下命令,下载Docker镜像。​
  • ​
    docker pull iaas-gpu-cn-beijing.cr.volces.com/serving/sglang:v0.5.2.byted.0.0.5.post1.202509291447​
    ​
  1. 执行如下命令,启动Docker容器。​
  • ​
    docker run --runtime=nvidia -itd \​
    --net=host \​
    --ipc=host \​
    --privileged \​
    --shm-size=300g \​
    --ulimit memlock=-1 \​
    --ulimit stack=67108864 \​
    --security-opt seccomp=unconfined \​
    --entrypoint /bin/bash \​
    --cap-add=ALL \​
    --user=root \​
    -v /data00/:/data00 -v /var/run/nvidia-topologyd/:/var/run/nvidia-topologyd/ \​
    iaas-gpu-cn-beijing.cr.volces.com/serving/sglang:v0.5.2.byted.0.0.5.post1.202509291447​
    ​
  1. 在6台实例中分别执行如下命令,通过Docker日志确认容器及模型是否成功启动。​
  1. 查看容器ID。​
  • ​
    docker ps​
    ​
  1. 查看对应容器的运行日志。​
  • ​
    docker logs -f <CONTAINER_ID>​
    ​
说明​
请将<CONTAINER_ID>替换为实际容器ID。 ​
  1. 执行如下命令,进入Docker容器。​
  • ​
    docker exec -it <CONTAINER_ID> bash​
    ​
说明​
请将<CONTAINER_ID>替换为实际容器ID。​
  1. 下载模型文件。​
  1. 执行如下命令,进入存放模型的目录。​
  • ​
    cd /data00​
    ​
说明​
建议您选择容量较大的磁盘目录存放模型文件,本文以/data00为例,请将其替换为实际目录路径。​
  1. 执行如下命令,通过onion工具下载目标模型。​
  • ​
    oniond download model DeepSeek-V3.1-Terminus​
    ​
说明​
  • 请将DeepSeek-V3.1-Terminus替换为您需要下载的模型名称。支持:DeepSeek-R1、DeepSeek-V3.1-Terminus。​
  • 您也可以执行oniond list model命令,查看支持模型列表。​
  1. 请根据实例节点执行对应的命令,启动模型服务。​
  • ​
    Prefill节点实例
    Decode节点实例
    ​
    说明​
    请将192.168.0.2:10240替换为“Prefill_0”实例私网IP地址及节点间通信的端口号。​
    • “Prefill_0”实例​
    • 该实例将作为2台Prefill实例的主节点。​
    • ​
      GLOO_SOCKET_IFNAME=eth0 NCCL_IB_HCA=mlx5_ NCCL_IB_DISABLE=0 NCCL_SOCKET_IFNAME=eth0 NCCL_IB_GID_INDEX=3 \​
      SGL_DISABLE_TP_MEMORY_INBALANCE_CHECK=1 \​
      NCCL_MIN_NCHANNELS=24 \​
      NCCL_IB_QPS_PER_CONNECTION=8 \​
      SGL_ENABLE_JIT_DEEPGEMM=1 \​
      python3 -m sglang.launch_server \​
      --attention-backend flashmla --disaggregation-ib-device "mlx5_1,mlx5_2,mlx5_3,mlx5_4" \​
      --model-path /data00/DeepSeek-V3.1-Terminus/ \​
      --tp 16 --disaggregation-mode prefill \​
      --host 0.0.0.0 --port 30300 --trust-remote-code --dist-init-addr 192.168.0.2:10240 --moe-a2a-backend deepep --deepep-mode normal --disable-radix-cache --max-running-requests 16 --moe-dense-tp-size 1 --chunked-prefill-size 0 \​
      --trust-remote-code --watchdog-timeout 1000000 \​
      --enable-dp-attention --dp-size 16 --ep-num-redundant-experts 32 --enable-two-batch-overlap --mem-fraction-static 0.7 \​
      --nnodes 2 --node-rank 0 --page-size 64 --load-balance-method round_robin --enable-eplb​
      ​
    • “Prefill_1”实例​
    • ​
      GLOO_SOCKET_IFNAME=eth0 NCCL_IB_HCA=mlx5_ NCCL_IB_DISABLE=0 NCCL_SOCKET_IFNAME=eth0 NCCL_IB_GID_INDEX=3 \​
      SGL_DISABLE_TP_MEMORY_INBALANCE_CHECK=1 \​
      NCCL_MIN_NCHANNELS=24 \​
      NCCL_IB_QPS_PER_CONNECTION=8 \​
      SGL_ENABLE_JIT_DEEPGEMM=1 \​
      python3 -m sglang.launch_server \​
      --attention-backend flashmla --disaggregation-ib-device "mlx5_1,mlx5_2,mlx5_3,mlx5_4" \​
      --model-path /data00/DeepSeek-V3.1-Terminus/ \​
      --tp 16 --disaggregation-mode prefill \​
      --host 0.0.0.0 --port 30300 --trust-remote-code --dist-init-addr 192.168.0.2:10240 --moe-a2a-backend deepep --deepep-mode normal --disable-radix-cache --max-running-requests 16 --moe-dense-tp-size 1 --chunked-prefill-size 0 \​
      --trust-remote-code --watchdog-timeout 1000000 \​
      --enable-dp-attention --dp-size 16 --ep-num-redundant-experts 32 --enable-two-batch-overlap --mem-fraction-static 0.7 \​
      --nnodes 2 --node-rank 1 --page-size 64 --load-balance-method round_robin --enable-eplb​
      ​
    ​
    ​
  • 参数说明:​
  • 如上命令以启动DeepSeek-V3.1-Terminus模型为例,您可根据如下说明替换对应运行参数值。​
  • ​
    运行参数​
    说明​
    取值样例​
    --model-path​
    容器内模型存储路径。​
    说明​
    请将/data00/DeepSeek-V3.1-Terminus/替换为实际DeepSeek-R1或DeepSeek-V3.1-Terminus模型模型存储路径。​
    /data00/DeepSeek-V3.1-Terminus/​
    --tp​
    Tensor Parallelism并行度。​
    说明​
    推荐Prefill节点实例为16,Decode节点实例为32。​
    16​
    --disaggregation-mode​
    解耦模式。取值:​
    • prefill:表示该实例用于Prefill(预处理)。​
    • decode:表示该实例用于Decode(解码)。​
    prefill​
    --port​
    服务监听的端口号。​
    30300​
    --dist-init-addr​
    配置访问Rank号为0的节点其IP地址与端口号,格式为IP地址:端口号。​
    • IP地址:建议配置为0号节点的私网地址。​
    • 端口号:节点间通信的端口号。​
    192.168.0.2:10240​
    --nnodes​
    节点总数。​
    2​
    --node-rank​
    当前节点Rank号。​
    0​
    --kv-cache-dtype​
    KV Cache的数据类型。​
    fp8_e4m3​
    ​
  1. 启动代理服务。​
  1. 执行如下命令,进入Docker容器。​
  • ​
    docker exec -it <CONTAINER_ID> bash​
    ​
说明​
请将<CONTAINER_ID>替换为实际容器ID。​
  1. 执行如下命令,启动代理服务。​
  • ​
    python3 -m sgl-router.py_src.sglang_router.launch_router \​
    --pd-disaggregation \​
    --prefill-policy round_robin \​
    --decode-policy round_robin \​
    --prefill "http://<Prefill_Master_IP>:30300" --decode "http://<Decode_Master_IP>:30300" \​
    --port 8000​
    ​
说明​
  • 请将<Prefill_Master_IP>替换为“Prefill_0”实例私网IP地址。​
  • 请将<Decode_Master_IP>替换为“Decode_0”实例私网IP地址。​
  • --port 8000表示代理服务端口号。​
步骤三:生成配置文件并重启服务​
  1. 执行如下命令,获取配置文件。​
说明​
  • 请将{服务监听的端口号}替换为您在启动模型服务时配置的实际端口号,本文为30300。​
  • 生成的配置文件默认存放在容器/tmp目录下,您可以按需将其移动至所需位置。本文将其移动至/sgl-workspace/目录下,完整路径为DeepSeek-R1_prefill_ep16_3500_1500.json。​
  • ​
    response = requests.post(f"http://localhost:{服务监听的端口号}/start_expert_distribution_record")​
    print_highlight(response)​
    ​
    url = f"http://localhost:{代理服务的端口号}/generate"​
    data = {"text": "What is the capital of France?"}​
    ​
    response = requests.post(url, json=data)​
    print_highlight(response.json())​
    ​
    response = requests.post(f"http://localhost:{服务监听的端口号}/stop_expert_distribution_record")​
    print_highlight(response)​
    ​
    response = requests.post(f"http://localhost:{服务监听的端口号}/dump_expert_distribution_record")​
    print_highlight(response)​
    ​
  1. 请根据实例节点执行对应的命令,使用生成的配置文件重启模型服务。​
说明​
--init-expert-location参数表示配置文件路径,请将/sgl-workspace/DeepSeek-R1_prefill_ep16_3500_1500.json替换为您在上一步中生成的配置文件实际所在路径。其他参数说明请参见“步骤二 > 启动模型服务”。​
  • ​
    Prefill节点实例
    Decode节点实例
    ​
    说明​
    请将192.168.0.2:10240替换为“Prefill_0”实例私网IP地址及节点间通信的端口号。​
    • “Prefill_0”实例​
    • 该实例将作为2台Prefill实例的主节点。​
    • ​
      GLOO_SOCKET_IFNAME=eth0 NCCL_IB_HCA=mlx5_ NCCL_IB_DISABLE=0 NCCL_SOCKET_IFNAME=eth0 NCCL_IB_GID_INDEX=3 \​
      SGL_DISABLE_TP_MEMORY_INBALANCE_CHECK=1 \​
      NCCL_MIN_NCHANNELS=24 \​
      NCCL_IB_QPS_PER_CONNECTION=8 \​
      SGL_ENABLE_JIT_DEEPGEMM=1 \​
      python3 -m sglang.launch_server \​
      --attention-backend flashmla --disaggregation-ib-device "mlx5_1,mlx5_2,mlx5_3,mlx5_4" \​
      --model-path /data00/DeepSeek-V3.1-Terminus/ \​
      --tp 16 --disaggregation-mode prefill \​
      --host 0.0.0.0 --port 30300 --trust-remote-code --dist-init-addr 192.168.0.2:10240 --moe-a2a-backend deepep --deepep-mode normal --disable-radix-cache --max-running-requests 16 --moe-dense-tp-size 1 --chunked-prefill-size 0 \​
      --trust-remote-code --watchdog-timeout 1000000 \​
      --enable-dp-attention --dp-size 16 --ep-num-redundant-experts 32 --enable-two-batch-overlap --mem-fraction-static 0.7 \​
      --nnodes 2 --node-rank 0 --page-size 64 --load-balance-method round_robin \​
      --init-expert-location /sgl-workspace/DeepSeek-R1_prefill_ep16_3500_1500.json​
      ​
    • “Prefill_1”实例​
    • ​
      GLOO_SOCKET_IFNAME=eth0 NCCL_IB_HCA=mlx5_ NCCL_IB_DISABLE=0 NCCL_SOCKET_IFNAME=eth0 NCCL_IB_GID_INDEX=3 \​
      SGL_DISABLE_TP_MEMORY_INBALANCE_CHECK=1 \​
      NCCL_MIN_NCHANNELS=24 \​
      NCCL_IB_QPS_PER_CONNECTION=8 \​
      SGL_ENABLE_JIT_DEEPGEMM=1 \​
      python3 -m sglang.launch_server \​
      --attention-backend flashmla --disaggregation-ib-device "mlx5_1,mlx5_2,mlx5_3,mlx5_4" \​
      --model-path /data00/DeepSeek-V3.1-Terminus/ \​
      --tp 16 --disaggregation-mode prefill \​
      --host 0.0.0.0 --port 30300 --trust-remote-code --dist-init-addr 192.168.0.2:10240 --moe-a2a-backend deepep --deepep-mode normal --disable-radix-cache --max-running-requests 16 --moe-dense-tp-size 1 --chunked-prefill-size 0 \​
      --trust-remote-code --watchdog-timeout 1000000 \​
      --enable-dp-attention --dp-size 16 --ep-num-redundant-experts 32 --enable-two-batch-overlap --mem-fraction-static 0.7 \​
      --nnodes 2 --node-rank 1 --page-size 64 --load-balance-method round_robin​
      ​
    ​
    ​
步骤四:调用模型​
  1. 执行如下命令调用模型,确保部署的模型可以正常进行推理。​
  • ​
    curl http://127.0.0.1:8000/v1/chat/completions -H "Content-Type: application/json" -d '{​
    "model": "/data00/DeepSeek-V3.1-Terminus",​
    "messages": [​
    {​
    "role": "user",​
    "content": "Please prove the Riemann Hypothesis."​
    }​
    ],​
    "max_tokens": 100,​
    "temperature": 0.7​
    }'​
    ​
  • 参数说明:​
  • 本文仅说明验证使用到的参数信息,更多参数详情可查看DeepSeek API文档。​
  • ​
    参数名​
    说明​
    取值样例​
    model​
    使用的模型。支持:​
    • DeepSeek-R1​
    • DeepSeek-V3.1-Terminus​
    /data00/DeepSeek-V3.1-Terminus​
    messages​
    对话的消息列表。​
    • role:该消息的发起角色。​
    • content:消息的内容。​
    -​
    max_tokens​
    指定一次请求中模型生成Completion的最大Token数。取值:​
    • 介于1 到 8192 间的整数。​
    • 默认值为 4096。​
    100​
    temperature​
    采样温度,值越高(例如1)会使输出更随机,而值越低(例如0.2)会使其更加集中和确定。取值:介于 0 和 2 之间。​
    0.7​
    ​
​
最近更新时间:2025.12.05 15:59:47
这个页面对您有帮助吗?
有用
有用
无用
无用