- 实例 A profile 加 --disable-radix-cache(bench 测量纯净) - 新增实例 B profile(kimi3_pro6000_sglang_tp32ep32_instB,.1-.4) - 新增 deploy_dp2.sh 编排脚本(A + B + router --worker-urls) - 新增 README
61 lines
3.1 KiB
Bash
61 lines
3.1 KiB
Bash
# Kimi-K3 SGLang multi-node TP=32 EP=32 deployment profile — 实例 B (DP=2 的第二个实例).
|
||
# Nodes: 174.1.60.1~4 (rank 0~3), 32x NVIDIA RTX 6000D (85GB, sm_120).
|
||
#
|
||
# DP=2 方案 B:两个独立实例(实例 A: .5-.8, 实例 B: .1-.4),各自 TP32×EP32,
|
||
# 前面用 sglang_router(--worker-urls)做负载均衡。实例间零通信。
|
||
#
|
||
# 与实例 A(kimi3_pro6000_sglang_tp32ep32)的差异仅在于节点拓扑:
|
||
# - NODE_HOSTS = .1-.4
|
||
# - MASTER_IP = 174.1.60.1(从 .1 执行部署,LOCAL_NODE_RANK=0 本地起 rank0)
|
||
# - SGLANG_HOST_IP = 174.1.60.$(1 + NODE_RANK)
|
||
# 其余并行度/网络配置与实例 A 一致。
|
||
#
|
||
# 关键点(与实例 A 相同,勿随意改):
|
||
# - MoE 后端必须 marlin(K3 的 MXFP4 缩放因子为 uint8,DeepGEMM 只接受 fp32/UE8M0)
|
||
# - RoCE: NCCL_IB_HCA=mlx5_0..3(4 张独立卡, 10.100.21-24/24, RoCEv2 GID index 3)
|
||
# - 容器必须 --ulimit memlock=-1(否则 ibv_create_cq 报 Cannot allocate memory)
|
||
# - 不要设 NCCL_ALGO=TREE
|
||
# - --disable-radix-cache 关闭前缀缓存(bench 测量纯净)
|
||
#
|
||
# Model-team only. Ops only run `python -m sskj.bench` against the router URL.
|
||
|
||
PLATFORM=pro6000
|
||
EXPERIMENT=kimi3_pro6000_sglang_tp32ep32_instB
|
||
MODEL_NAME=Kimi-K3
|
||
ENGINE=sglang
|
||
RUNTIME=docker
|
||
DOCKER_IMAGE=lmsysorg/sglang:kimi-k3
|
||
CONTAINER_NAME=${EXPERIMENT}_node${NODE_RANK}
|
||
MODEL_PATH=/data/hf_models/Kimi-K3
|
||
SERVED_MODEL_NAME=kimi-k3
|
||
PORT=30000
|
||
HEALTH_PATH=/health
|
||
HEALTH_HOST=174.1.60.1
|
||
HEALTH_WAIT_S=2400
|
||
CONTAINER_PYTHON=python3
|
||
|
||
# ---- 并行度(固定,勿改)----
|
||
TP=32
|
||
DP=1
|
||
EP_SIZE=32
|
||
|
||
# ---- Multi-node topology (实例 B = .1-.4; rank 0 exposes the HTTP API) ----
|
||
NNODES=4
|
||
NODE_HOSTS="174.1.60.1 174.1.60.2 174.1.60.3 174.1.60.4"
|
||
NODE_SSH_USER=root
|
||
LOCAL_NODE_RANK=0
|
||
MASTER_IP=174.1.60.1
|
||
DIST_PORT=20000
|
||
|
||
DEVICE_VARS="CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7"
|
||
ENGINE_ENV="NCCL_SOCKET_IFNAME=bond0 GLOO_SOCKET_IFNAME=bond0 NCCL_IB_HCA=mlx5_0,mlx5_1,mlx5_2,mlx5_3 NCCL_IB_GID_INDEX=3 NCCL_IB_TIMEOUT=22 NCCL_IB_RETRY_CNT=7 NCCL_CUMEM_ENABLE=1 PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True SGLANG_ENABLE_TP_MEMORY_INBALANCE_CHECK=0 SGLANG_MOE_FUSED_GATE_RADIX=1"
|
||
|
||
DOCKER_FLAGS="--gpus all --network host --ipc=host --ulimit memlock=-1 --device /dev/infiniband --shm-size 32g --entrypoint ''"
|
||
VOLUMES="${MODEL_PATH}:${MODEL_PATH}:ro"
|
||
PATCH_MOUNTS="/tmp/patch_k3_sm120.py:/tmp/patch_k3_sm120.py:ro"
|
||
|
||
# BOOTSTRAP 在容器内执行: 打 sm_120 补丁 → 按节点 rank 计算 SGLANG_HOST_IP → 启动 sglang。
|
||
# SGLANG_HOST_IP 必须为本节点实际 IP(174.1.60.1~4 = 1 + NODE_RANK)。
|
||
BOOTSTRAP="python3 /tmp/patch_k3_sm120.py && export SGLANG_HOST_IP=\"174.1.60.$((1 + ${NODE_RANK}))\" && exec python3 -m sglang.launch_server ${LAUNCH_ARGS}"
|
||
|
||
LAUNCH_ARGS="--model-path ${MODEL_PATH} --served-model-name ${SERVED_MODEL_NAME} --tp-size ${TP} --ep-size 32 --nnodes ${NNODES} --node-rank ${NODE_RANK} --dist-init-addr ${MASTER_IP}:${DIST_PORT} --trust-remote-code --moe-runner-backend marlin --mem-fraction-static 0.88 --cuda-graph-max-bs-decode 16 --mamba-radix-cache-strategy extra_buffer_lazy --disable-radix-cache --dist-timeout 3600 --mamba-full-memory-ratio 0.36 --host 0.0.0.0 --port ${PORT}" |