GLM 5.2 双机混部 - shun8686/sglang GitHub Wiki
服务启动参数 - A3
#!/bin/bash
SERVER_PORT=6677
MODEL_PATH="${MODEL_PATH:-/root/.cache/modelscope/hub/models/Eco-Tech/GLM-5.2-w8a8}"
NODE_IPS=(
"192.168.0.1"
"192.168.0.2"
)
NNODES=${#NODE_IPS[@]}
MASTER_ADDR="${NODE_IPS[0]}"
MASTER_PORT="5567"
DIST_INIT_ADDR="${MASTER_ADDR}:${MASTER_PORT}"
detect_nic() {
local nic
nic=$(awk '
function is_virtual(name) {
return name ~ /^(lo|docker|tunl|cali|veth|br-|virbr|kube-|flannel|weave|cilium)/
}
NR > 2 {
split($1, a, ":"); ifname = a[1]
if (!is_virtual(ifname)) traffic[ifname] = $2 + $10
}
END {
best = ""; bestv = -1
for (i in traffic) if (traffic[i] > bestv) { best = i; bestv = traffic[i] }
if (best != "") print best
}' /proc/net/dev 2>/dev/null || true)
echo "${nic:-lo}"
}
NIC_NAME="${NIC_NAME:-$(detect_nic)}"
# ========================= 环境变量 (node_envs) =========================
export PYTORCH_NPU_ALLOC_CONF="expandable_segments:True"
export STREAMS_PER_DEVICE="32"
export SGLANG_SET_CPU_AFFINITY="1"
export SGLANG_ENABLE_SPEC_V2="1"
export SGLANG_ENABLE_OVERLAP_PLAN_STREAM="1"
export DEEPEP_HCCL_BUFFSIZE="2500"
export DEEPEP_NORMAL_COMBINE_ENABLE_LONG_SEQ="1"
export DEEPEP_NORMAL_LONG_SEQ_PER_ROUND_TOKENS="1024"
export DEEPEP_NORMAL_LONG_SEQ_ROUND="72"
export SGLANG_DEEPEP_NUM_MAX_DISPATCH_TOKENS_PER_RANK="32"
export DEEPEP_HYBRID_DEPLOYMENT="1"
export DEEP_NORMAL_MODE_USE_INT8_QUANT="1"
export HCCL_SOCKET_IFNAME="${NIC_NAME}"
export GLOO_SOCKET_IFNAME="${NIC_NAME}"
# ===== Auto-detect node rank by matching local IPs =============
LOCAL_HOST1=$(hostname -I | awk '{print $1}')
LOCAL_HOST2=$(hostname -I | awk '{print $2}')
NODE_RANK=""
for i in "${!NODE_IPS[@]}"; do
if [ "$LOCAL_HOST1" == "${NODE_IPS[$i]}" ](/shun8686/sglang/wiki/|-"$LOCAL_HOST2"-==-"${NODE_IPS[$i]}"-); then
NODE_RANK="$i"
SERVER_HOST="${NODE_IPS[$i]}"
export HCCL_SOCKET_IFNAME="${HCCL_IFS[$i]}"
break
fi
done
if [ -z "${NODE_RANK}" ](/shun8686/sglang/wiki/--z-"${NODE_RANK}"-); then
echo "ERROR: local IPs [${LOCAL_HOST1} ${LOCAL_HOST2}] not found in NODE_IPS=[${NODE_IPS[*]}]"
exit 1
fi
echo "========================================"
echo "Launching ${NNODES} Nodes"
echo "node-rank : ${NODE_RANK}"
echo "local IPs : ${LOCAL_HOST1} ${LOCAL_HOST2}"
echo "dist-init-addr : ${DIST_INIT_ADDR}"
echo "nnodes : ${NNODES}"
echo "HCCL interface : ${HCCL_SOCKET_IFNAME}"
echo "GLOO interface : ${GLOO_SOCKET_IFNAME}"
echo "========================================"
# ========================= 启动 sglang 服务 =========================
python3 -m sglang.launch_server \
--trust-remote-code \
--model "${MODEL_PATH}" \
--host "${SERVER_HOST}" \
--port "${SERVER_PORT}" \
--attention-backend ascend \
--device npu \
--tp-size 32 \
--nnodes 2 \
--node-rank "${NODE_RANK}"
--dp-size 8 \
--enable-dp-attention \
--chunked-prefill-size 65536 \
--max-prefill-tokens 280000 \
--mem-fraction-static 0.76 \
--context-length 135000 \
--served-model-name glm-5.2-w8a8 \
--cuda-graph-max-bs-decode 4 \
--max-running-requests 32 \
--quantization modelslim \
--moe-a2a-backend deepep \
--deepep-mode auto \
--disable-shared-experts-fusion \
--load-balance-method round_robin \
--reasoning-parser glm45 \
--tool-call-parser glm47 \
--enable-metrics \
--speculative-algorithm NEXTN \
--speculative-num-steps 3 \
--speculative-eagle-topk 1 \
--speculative-num-draft-tokens 4 \
--speculative-draft-model-quantization unquant \
--dist-init-addr "${DIST_INIT_ADDR}" \
--enable-hierarchical-cache \
--hicache-io-backend kernel_ascend \
--enable-cache-report \
--hicache-ratio 2 \
--hicache-write-policy write_through \
--hicache-storage-backend npu_memcache \
--hicache-storage-backend-extra-config '{"meta_service_url":"tcp://127.0.0.1:5000", "config_store_url":"tcp://127.0.0.1:6000", "log_level":"info", "world_size":256, "protocol": "device_sdma", "dram_size": "1GB"}'
服务启动参数 - A3 - 极光
#!/bin/bash
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
sysctl -w vm.swappiness=0
sysctl -w vm.swappiness=0
sysctl -w kernel.numa_balancing=0
source /usr/local/Ascend/cann/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
source /usr/local/Ascend/ascend-toolkit/latest/opp/vendors/customize/bin/set_env.bash
source /usr/local/Ascend/ascend-toolkit/latest/opp/vendors/custom_transformer/bin/set_env.bash
export PYTORCH_NPU_ALLOC_CONF="expandable_segments:True"
export STREAMS_PER_DEVICE="32"
export SGLANG_SET_CPU_AFFINITY="1"
export SGLANG_ENABLE_SPEC_V2="1"
export SGLANG_ENABLE_OVERLAP_PLAN_STREAM="1"
export DEEPEP_HCCL_BUFFSIZE="2500"
export DEEPEP_NORMAL_COMBINE_ENABLE_LONG_SEQ="1"
export DEEPEP_NORMAL_LONG_SEQ_PER_ROUND_TOKENS="1024"
export DEEPEP_NORMAL_LONG_SEQ_ROUND="72"
export SGLANG_DEEPEP_NUM_MAX_DISPATCH_TOKENS_PER_RANK="32"
export DEEPEP_HYBRID_DEPLOYMENT="1"
export DEEP_NORMAL_MODE_USE_INT8_QUANT="1"
export SGLANG_HICACHE_HOST_MEM_BACKEND=memfabric
# ========================= 启动 sglang 服务 =========================
python3 -m sglang.launch_server \
--max-total-tokens 65536 \
--chunked-prefill-size 65536 \
--trust-remote-code \
--model "/root/.cache/modelscope/hub/models/Eco-Tech/GLM-5.2-w8a8" \
--attention-backend ascend \
--device npu \
--tp-size 32 \
--dp-size 8 \
--enable-dp-attention \
--max-prefill-tokens 280000 \
--mem-fraction-static 0.88 \
--context-length 135000 \
--served-model-name glm-5.2-w8a8 \
--cuda-graph-max-bs-decode 4 \
--max-running-requests 32 \
--quantization modelslim \
--moe-a2a-backend deepep \
--deepep-mode auto \
--disable-shared-experts-fusion \
--load-balance-method round_robin \
--reasoning-parser glm45 \
--tool-call-parser glm47 \
--enable-metrics \
--speculative-algorithm NEXTN \
--speculative-num-steps 3 \
--speculative-eagle-topk 1 \
--speculative-num-draft-tokens 4 \
--speculative-draft-model-quantization unquant \
--enable-hierarchical-cache \
--hicache-io-backend kernel_ascend \
--enable-cache-report \
--hicache-ratio 2 \
--hicache-write-policy write_through \
--hicache-storage-backend npu_memcache \
--hicache-storage-backend-extra-config '{"meta_service_url":"tcp://127.0.0.1:5000", "config_store_url":"tcp://127.0.0.1:6000", "log_level":"info", "world_size":256, "protocol": "device_sdma", "dram_size": "1GB"}'
服务启动参数 - A5 - 原始
#!/bin/bash
# ===== Cleanup =====
unset https_proxy http_proxy HTTPS_PROXY HTTP_PROXY ASCEND_LAUNCH_BLOCKING
pkill -9 python 2>/dev/null || true
pkill -9 sglang 2>/dev/null || true
pkill -9 VLLM 2>/dev/null || true
# ===== Environment =====
#export PYTHONPATH=/home/r00648901/sglang/python:$PYTHONPATH
export DEEPEP_HCCL_BUFFSIZE=2048
export HCCL_CONNECT_TIMEOUT=300
export HCCL_EXEC_TIMEOUT=68
export HCCL_OP_EXPANSION_MODE=AIV
export ACL_DEVICE_SYNC_TIMEOUT=60
# 内存碎片
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export STREAMS_PER_DEVICE=32
# [FIA]
export ASCEND_USE_FIA=1
# [MLAPO]
export SGLANG_NPU_USE_MLAPO=1
#export SGLANG_NPU_GLM_NEXTN_BF16_KV_CACHE=1
# [DEEPEP]
export SGLANG_DEEPEP_NUM_MAX_DISPATCH_TOKENS_PER_RANK=35
# [Prefill Delay]
export SGLANG_SCHEDULER_DECREASE_PREFILL_IDLE=1
export SGLANG_PREFILL_DELAYER_MAX_DELAY_PASSES=200
# [MTP]
export SGLANG_ENABLE_SPEC_V2=1
export SGLANG_ENABLE_OVERLAP_PLAN_STREAM=1
export TRANSFORMERS_VERBOSITY=error
# [多机]
export HCCL_HOST_SOCKET_PORT_RANGE=auto
export GLOO_SOCKET_IFNAME=data0.3001
unset HCCL_IF_IP 2>/dev/null || true
unset HCCL_SOCKET_FAMILY 2>/dev/null || true
unset RANK_TABLE_FILllE 2>/dev/null || true
# ===== Model Config =====
MODEL_PATH=/mnt/share/w00936111/GLM-5.2-W8A8C8-mxfp8
SERVED_MODEL_NAME=glm52
SERVER_HOST=141.61.33.18
SERVER_PORT=6677
# ===== Cluster Config ===========================================
# 每台机器: IP + HCCL 网卡名 (一一对应)
# 拓展时只需往三个数组里追加即可,NNODES / TP_SIZE 自动推算
NODE_IPS=(
"141.61.33.18"
"141.61.33.19"
)
HCCL_IFS=(
"enp34s0f1"
"enp34s0f1"
)
NUM_NPUS_PER_NODE=8 # 每机 NPU 数
# ================================================================
MASTER_ADDR="${NODE_IPS[0]}"
MASTER_PORT="5569"
DIST_INIT_ADDR="${MASTER_ADDR}:${MASTER_PORT}"
NNODES=${#NODE_IPS[@]}
TP_SIZE=$(( NNODES * NUM_NPUS_PER_NODE ))
DP_SIZE=4 # DP 并行度
# ===== Auto-detect node rank by matching local IPs =============
LOCAL_HOST1=$(hostname -I | awk '{print $1}')
LOCAL_HOST2=$(hostname -I | awk '{print $2}')
NODE_RANK=""
for i in "${!NODE_IPS[@]}"; do
if [ "$LOCAL_HOST1" == "${NODE_IPS[$i]}" ](/shun8686/sglang/wiki/|-"$LOCAL_HOST2"-==-"${NODE_IPS[$i]}"-); then
NODE_RANK="$i"
export HCCL_SOCKET_IFNAME="${HCCL_IFS[$i]}"
break
fi
done
if [ -z "${NODE_RANK}" ](/shun8686/sglang/wiki/--z-"${NODE_RANK}"-); then
echo "ERROR: local IPs [${LOCAL_HOST1} ${LOCAL_HOST2}] not found in NODE_IPS=[${NODE_IPS[*]}]"
exit 1
fi
echo "========================================"
echo "Launching GLM5.2 ${NNODES} Nodes"
echo "node-rank : ${NODE_RANK}"
echo "local IPs : ${LOCAL_HOST1} ${LOCAL_HOST2}"
echo "dist-init-addr : ${DIST_INIT_ADDR}"
echo "nnodes : ${NNODES}"
echo "tp-size : ${TP_SIZE}"
echo "dp-size : ${DP_SIZE}"
echo "HCCL interface : ${HCCL_SOCKET_IFNAME}"
echo "GLOO interface : ${GLOO_SOCKET_IFNAME}"
echo "========================================"
# ===== Launch =====
python3 -m sglang.launch_server --model-path ${MODEL_PATH} \
--served-model-name "${SERVED_MODEL_NAME}" \
--host "${SERVER_HOST}" \
--port "${SERVER_PORT}" \
--nnodes "${NNODES}" \
--node-rank "${NODE_RANK}" \
--dist-init-addr "${DIST_INIT_ADDR}" \
--tp-size "${TP_SIZE}" \
--trust-remote-code \
--attention-backend ascend \
--device npu \
--watchdog-timeout 9000 \
--max-running-requests 52 \
--mem-fraction-static 0.84 \
--quantization modelslim \
--max-prefill-tokens 2048000 \
--chunked-prefill-size 16384 \
--kv-cache-dtype "fp8_e4m3" \
--speculative-draft-kv-cache-dtype bf16 \
--dp ${DP_SIZE} \
--enable-dp-attention \
--enable-dp-lm-head \
--load-balance-method round_robin \
--moe-a2a-backend deepep \
--deepep-mode auto \
--speculative-algorithm NEXTN \
--speculative-num-steps 4 --speculative-eagle-topk 1 --speculative-num-draft-tokens 5 \
--enable-metrics
服务启动参数 - A5 - 极光
#!/bin/bash
# ===== Cleanup =====
unset https_proxy http_proxy HTTPS_PROXY HTTP_PROXY ASCEND_LAUNCH_BLOCKING
# ===== Environment =====
export DEEPEP_HCCL_BUFFSIZE=2048
export HCCL_CONNECT_TIMEOUT=300
export HCCL_EXEC_TIMEOUT=68
export HCCL_OP_EXPANSION_MODE=AIV
export ACL_DEVICE_SYNC_TIMEOUT=60
# 内存碎片
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export STREAMS_PER_DEVICE=32
# [FIA]
export ASCEND_USE_FIA=1
# [MLAPO]
export SGLANG_NPU_USE_MLAPO=1
#export SGLANG_NPU_GLM_NEXTN_BF16_KV_CACHE=1
# [DEEPEP]
export SGLANG_DEEPEP_NUM_MAX_DISPATCH_TOKENS_PER_RANK=35
# [Prefill Delay]
export SGLANG_SCHEDULER_DECREASE_PREFILL_IDLE=1
export SGLANG_PREFILL_DELAYER_MAX_DELAY_PASSES=200
# [MTP]
export SGLANG_ENABLE_SPEC_V2=1
export SGLANG_ENABLE_OVERLAP_PLAN_STREAM=1
export TRANSFORMERS_VERBOSITY=error
# [多机]
export HCCL_HOST_SOCKET_PORT_RANGE=auto
export GLOO_SOCKET_IFNAME=data0.3001
unset HCCL_IF_IP 2>/dev/null || true
unset HCCL_SOCKET_FAMILY 2>/dev/null || true
unset RANK_TABLE_FILllE 2>/dev/null || true
echo "========================================"
echo "HCCL interface : ${HCCL_SOCKET_IFNAME}"
echo "GLOO interface : ${GLOO_SOCKET_IFNAME}"
echo "========================================"
# ===== Launch =====
python3 -m sglang.launch_server \
--model-path /mnt/share/w00936111/GLM-5.2-W8A8C8-mxfp8 \
--served-model-name glm52 \
--tp-size 16 \
--trust-remote-code --device npu --attention-backend ascend --watchdog-timeout 9000 \
--max-running-requests 52 \
--mem-fraction-static 0.84 \
--quantization modelslim \
--max-prefill-tokens 2048000 \
--max-total-tokens 65536 \
--chunked-prefill-size 65536 \
--kv-cache-dtype "fp8_e4m3" \
--speculative-draft-kv-cache-dtype bf16 \
--dp 4 \
--enable-dp-attention \
--enable-dp-lm-head \
--load-balance-method round_robin \
--moe-a2a-backend deepep \
--deepep-mode auto \
--speculative-algorithm NEXTN \
--speculative-num-steps 4 --speculative-eagle-topk 1 --speculative-num-draft-tokens 5 \
--enable-metrics \
--enable-hierarchical-cache \
--hicache-io-backend kernel_ascend \
--enable-cache-report \
--hicache-ratio 2 \
--hicache-write-policy write_through \
--hicache-storage-backend npu_memcache \
--hicache-storage-backend-extra-config '{"meta_service_url":"tcp://127.0.0.1:5007", "config_store_url":"tcp://127.0.0.1:6007", "log_level":"info", "world_size":256, "protocol": "device_urma", "dram_size": "1GB"}'