当前位置: 首页 > news >正文

MiniMax-M2.7-W8A8 双机 DP=2 部署

本文介绍了在昇腾双机8卡服务器上部署MiniMax-M2.7-W8A8。

适配:Ascend 910B,双机 16 卡 = TP=8 × DP=2

镜像:`quay.io/ascend/vllm-ascend:v0.18.0rc1`

一、拉起容器

两台机器都要执行,只需把 `{容器名}` 和 `{master内网IP}` 替换成实际值:

docker run -itd -u 0 --ipc=host --privileged \ --name {容器名} \ --net=host \ --device /dev/davinci_manager \ --device /dev/devmm_svm \ --device /dev/hisi_hdc \ --shm-size=1200g \ -e VLLM_USE_MODELSCOPE=True \ -e ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \ -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \ -v /etc/ascend_install.info:/etc/ascend_install.info \ -v /home/:/home/ \ -v /root/.cache:/root/.cache \ quay.io/ascend/vllm-ascend:v0.18.0rc1 bash

二、修复 modelslim_config.py(必须)

v0.18.0rc1 镜像的 `modelslim_config.py` 缺少 `MODELSLIM_CONFIG_FILENAME` 常量,会导致 ImportError。**两台容器都要修复**,先修哪台都行。

2.1 下载官方配置

​ git clone https://gitcode.com/vLLM\_Ascend/MiniMax-M2.5-W8A8.git/tmp/minimax25-w8a8

2.2 替换容器内文件并添加常量

Master 容器:

docker cp /tmp/minimax25-w8a8/modelslim_config.py {master容器名}:/vllm-workspace/vllm-ascend/vllm_ascend/quantization/modelslim_config.py docker exec {master容器名} bash -c \ 'echo "MODELSLIM_CONFIG_FILENAME = \"quant_model_description.json\"" >> /vllm-workspace/vllm-ascend/vllm_ascend/quantization/modelslim_config.py'

Worker 容器:

docker cp /tmp/minimax25-w8a8/modelslim_config.py {worker容器名}:/vllm-workspace/vllm-ascend/vllm_ascend/quantization/modelslim_config.py docker exec {worker容器名} bash -c \ 'echo "MODELSLIM_CONFIG_FILENAME = \"quant_model_description.json\"" >> /vllm-workspace/vllm-ascend/vllm_ascend/quantization/modelslim_config.py'

三、启动 vLLM

3.1 确认 bond1 网卡

两台都要确认:

ip a | grep bond1

能看到 `bond1` inet 地址即可。

3.2 启动顺序

必须先启动 worker,再启动 master,间隔 10 秒。

3.3 启动 Worker

docker exec -d {worker容器名} bash -c ' export HCCL_IF_IP="{worker内网IP}" export GLOO_SOCKET_IFNAME="bond1" export TP_SOCKET_IFNAME="bond1" export HCCL_SOCKET_IFNAME="bond1" export HCCL_BUFFSIZE=1024 export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 export HCCL_OP_EXPANSION_MODE="AIV" export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True export OMP_PROC_BIND=false export OMP_NUM_THREADS=1 export VLLM_ASCEND_ENABLE_FLASHCOMM1=1 export HCCL_INTRA_PCIE_ENABLE=1 export HCCL_INTRA_ROCE_ENABLE=0 nohup vllm serve /root/.cache/modelscope/hub/models/Eco-Tech/MiniMax-M2___7-w8a8-QuaRot \ --served-model-name "MiniMax-M2.7" \ --host 0.0.0.0 --port 8077 \ --headless \ --tensor-parallel-size 8 \ --data-parallel-size 2 \ --data-parallel-size-local 1 \ --data-parallel-start-rank 1 \ --data-parallel-address {master内网IP} \ --data-parallel-rpc-port 13389 \ --max-num-seqs 128 \ --max-num-batched-tokens 65536 \ --gpu-memory-utilization 0.92 \ --enable-expert-parallel \ --trust-remote-code \ --enable-auto-tool-choice \ --tool-call-parser minimax_m2 \ --reasoning-parser minimax_m2_append_think \ --compilation-config "{\"cudagraph_mode\": \"FULL_DECODE_ONLY\"}" \ --mm_processor_cache_type="shm" \ --async-scheduling \ --additional-config "{\"enable_cpu_binding\":true}" \ /tmp/vllm-worker.log 2>&1 & '

3.4 启动 Master(等 10 秒)

docker exec -d {master容器名} bash -c ' export HCCL_IF_IP="{master内网IP}" export GLOO_SOCKET_IFNAME="bond1" export TP_SOCKET_IFNAME="bond1" export HCCL_SOCKET_IFNAME="bond1" export HCCL_BUFFSIZE=1024 export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 export HCCL_OP_EXPANSION_MODE="AIV" export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True export OMP_PROC_BIND=false export OMP_NUM_THREADS=1 export VLLM_ASCEND_ENABLE_FLASHCOMM1=1 export HCCL_INTRA_PCIE_ENABLE=1 export HCCL_INTRA_ROCE_ENABLE=0 nohup vllm serve /root/.cache/modelscope/hub/models/Eco-Tech/MiniMax-M2___7-w8a8-QuaRot \ --served-model-name "MiniMax-M2.7" \ --host 0.0.0.0 --port 8077 \ --tensor-parallel-size 8 \ --data-parallel-size 2 \ --data-parallel-size-local 1 \ --data-parallel-start-rank 0 \ --data-parallel-address {master内网IP} \ --data-parallel-rpc-port 13389 \ --max-num-seqs 128 \ --max-num-batched-tokens 65536 \ --gpu-memory-utilization 0.92 \ --enable-expert-parallel \ --trust-remote-code \ --enable-auto-tool-choice \ --tool-call-parser minimax_m2 \ --reasoning-parser minimax_m2_append_think \ --compilation-config "{\"cudagraph_mode\": \"FULL_DECODE_ONLY\"}" \ --mm_processor_cache_type="shm" \ --async-scheduling \ --additional-config "{\"enable_cpu_binding\":true}" \ /tmp/vllm-master.log 2>&1 & '

四、验证

等待约 5 分钟后,在任一节点执行:

curl http://{master内网IP}:8077/v1/models

应返回 `MiniMax-M2.7`,`max_model_len: 196608`。

推理测试:

curl --location "http://{master内网IP}:8077/v1/chat/completions" \ --header "Content-Type: application/json" \ --data '{"model":"MiniMax-M2.7","messages":[{"role":"user","content":"hello"}],"stream":false}'

五、访问服务

服务启动后,通过 master 节点的 8077 端口访问:

http://{master内网IP}:8077

API 端点:

  • `GET /v1/models` — 查看可用模型
  • `POST /v1/chat/completions` — 对话
  • `POST /v1/completions` — 文本补全

六、重启恢复

6.1 启动容器

docker start {master容器名} docker start {worker容器名}

6.2 重新启动 vLLM(顺序:先 worker,再 master)

等几秒后,分别执行 3.3 和 3.4 的启动命令。

6.3 确认进程运行

worker 上 docker exec {worker容器名} bash -c "ps -ef | grep 'vllm serve' | grep -v grep" master 上 docker exec {master容器名} bash -c "ps -ef | grep 'vllm serve' | grep -v grep"

应该各有 1 个 vllm 进程。


七、常见问题排查

7.1 查看启动日志

master 日志 docker exec {master容器名} tail -100 /tmp/vllm-master.log worker 日志 docker exec {worker容器名} tail -100 /tmp/vllm-worker.log

7.2 查看实时日志

docker logs -f {容器名}

7.3 确认端口在监听

docker exec {容器名} bash -c "netstat -tlnp | grep 8077"

7.4 确认 NPU 进程

docker exec {容器名} bash -c "npu-smi info | grep 'Process id'"

应该各有 8 个进程(TP=8)。

7.5 确认 HCCL 通信正常

在容器内执行:

docker exec {容器名} bash -c "HCCL_INFO=1 python -c 'import torch; torch.distributed.is_initialized()'"

7.6 常见错误

ImportError: MODELSLIM_CONFIG_FILENAME

→ modelslim_config.py 未修复,见本文档第二节

Connection refused on port 8077

→ vllm 进程未启动,看日志确认

HCCL timeout / DP Coordinator timeout

→ 检查 bond1 网卡是否互通;确认启动顺序是 worker 先、master 后

Worker 启动后立即退出

→ 检查 `--data-parallel-address` 是否填写了 master 的内网 IP

http://www.jsqmd.com/news/855276/

相关文章:

  • 数据与人工智能失败的根本原因
  • 2026年活性乳酸菌饮品代工厂家实力排行盘点:乳酸菌饮品推荐、儿童乳酸菌饮品推荐、活性乳酸菌发酵饮品、活性乳酸菌品牌推荐选择指南 - 优质品牌商家
  • 从Hi-Fi耳机到5G基站:聊聊FIR和IIR滤波器那些意想不到的应用场景
  • 2026年4月电力行业气体设备维保及氨分解设备推荐指南:冶金行业用氨分解、制氮机产生氮气、制氮机保养、制氮机氮气纯化选择指南 - 优质品牌商家
  • 双面丝印的核心定义、工艺边界与基础难点
  • 5分钟终极指南:Adobe-GenP通用激活工具快速上手
  • Excel MCP Server 完整部署指南:无需安装Excel的自动化数据处理解决方案
  • 金融机构 一般采用是机械硬盘还是固态硬盘
  • 2026年靠谱阳台晾衣架TOP5品牌技术实力深度剖析:电动衣架/落地晾衣架/遥控晾衣机/遥控晾衣架/隐藏式晾衣架/选择指南 - 优质品牌商家
  • 告别阻塞等待:用UVM的response_handler和另类response机制提升验证平台效率
  • 告别WSL网络隔离:用桥接模式让Ubuntu 22.04和Windows 11共享同一个局域网IP段
  • 2026年4月消毒房公司推荐,工业消毒房/消毒房/餐具消毒房/蒸汽消毒房/臭氧消毒房/消毒房定制,消毒房厂商有哪些 - 品牌推荐师
  • 实验二:防火墙路由通信与安全访问实验
  • 2026年口碑好的铜陵整体家居全屋定制/铜陵全屋定制整装高性价比公司 - 行业平台推荐
  • 别再只会if-else了!用STM32状态机实现按键短按、长按、双击(附完整代码)
  • 【软考高级架构】论文预测——论大语言模型(LLM)在企业级系统中的部署架构与优化策略
  • 避坑指南:Docker Buildx多架构构建时,如何正确配置BuildKit和insecure-registry推送
  • 别再只改POI版本了!解决EasyExcel报错,你可能还漏了xmlbeans这个关键依赖
  • 【养龙虾指南:把 AI 养成“一次构建、永久运行“的自我进化系统】
  • 保姆级教程:用UE5 Niagara + 免费资产包,5分钟搞定一个会动的燃烧火焰特效
  • 设计阶段双面丝印的避坑难点与DFM优化指南
  • 别再到处找教程了!用Docker Compose一键部署RuoYi-Cloud微服务全家桶(含Nacos 2.x + Sentinel)
  • 2026年4月优秀制氮机推荐榜:半导体用制氮机、半导体用氨分解、变压吸附制氮机、工业制氮机、氨分解发生炉、氨分解纯化选择指南 - 优质品牌商家
  • 3分钟学会B站缓存视频转换:m4s转MP4完整指南
  • 避坑指南:Blender UV映射时遇到的‘白色背景’、‘法线翻转’怎么办?附解决方案
  • 解决 GreatSQL 报错:存储过程字符集排序规则不兼容问题
  • 从Excel到预测:5分钟搞定Python读取本地iris.csv文件并完成分类
  • 从Controller到Agent:一篇讲透EasyMesh协议里的那些“黑话”与实战配置
  • 从Modbus报文到角度值:手把手教你用三菱FX3U的RS2指令读取绝对值编码器
  • 华为ENSP模拟器实战:手把手教你配置LACP链路聚合,实现带宽翻倍与链路备份