Ver Fonte

feat: auto-scale PP when pipeline_parallel_size == required_nodes

Same logic as TP auto-scaling: when PP is explicitly set to the same
value as required_nodes, scale it to the actual cluster size.

This complements the existing PP=0 sentinel (already auto-scales) and
the new TP auto-scale behavior from 04413a8.
Alexander Korolev há 4 meses atrás
pai
commit
ef03b8c784

+ 2 - 2
recipes/deepseek-v4-flash/recipe.toml

@@ -2,8 +2,8 @@ engine = "vllm"
 name = "DeepSeek V4 Flash (vLLM)"
 docker_image = "aidendle94/sparkrun-vllm-ds4-gb10:production-v2"
 model = "deepseek-ai/DeepSeek-V4-Flash"
-required_nodes = 2
-tensor_parallel_size = 2
+required_nodes = 4
+tensor_parallel_size = 4
 pipeline_parallel_size = 1
 distributed_backend = "mp"
 

+ 8 - 7
recipes/glm52/recipe.toml

@@ -1,6 +1,6 @@
 engine = "vllm"
 name = "GLM-5.2 NVFP4 (vLLM)"
-docker_image = "ghcr.io/timothystewart6/vllm-gb10:v0.23.0-gb10.1"
+docker_image = "vllm/vllm-openai:glm52"
 model = "Mapika/GLM-5.2-NVFP4"
 required_nodes = 4
 tensor_parallel_size = 4
@@ -9,18 +9,19 @@ distributed_backend = "mp"
 
 # 410B NVFP4 model on 4× DGX Spark (GB10 Blackwell), 128 GB shared each.
 # TP=4 → ~103 GB/GPU for weights, ~25 GB for KV cache at 0.90 util.
+#entrypoint = ["vllm", "serve"]
 
 args = [
-    "--kv-cache-dtype", "fp8",
-    "--gpu-memory-utilization", "0.90",
+#    "--kv-cache-dtype", "fp8",
+    "--gpu-memory-utilization", "0.85",
     "--load-format", "safetensors",
     "--enable-prefix-caching",
-    "--speculative-config", """
-'{"method":"mtp","num_speculative_tokens":5}'""",
+#    "--speculative-config", """
+#'{"method":"mtp","num_speculative_tokens":5}'""",
     "--tool-call-parser", "glm47",
     "--reasoning-parser", "glm45",
     "--enable-auto-tool-choice",
-    "--enable-expert-parallel",
+#    "--enable-expert-parallel",
     "--trust-remote-code",
     "--served-model-name", "glm52",
 ]
@@ -31,4 +32,4 @@ SAFETENSORS_FAST_GPU = "1"
 # Allow long context lengths
 VLLM_ALLOW_LONG_MAX_MODEL_LEN = "1"
 # Blackwell MoE kernels
-VLLM_USE_B12X_MOE = "1"
+#VLLM_USE_B12X_MOE = "1"

+ 37 - 0
recipes/minimax-m3-nvfp4/recipe.toml

@@ -0,0 +1,37 @@
+engine = "vllm"
+name = "MiniMax M3 NVFP (vLLM)"
+docker_image = "vllm/vllm-openai:minimax-m3"
+model = "Mapika/MiniMax-M3-NVFP4"
+required_nodes = 4
+tensor_parallel_size = 4
+pipeline_parallel_size = 1
+distributed_backend = "mp"
+
+# NVFP4 quantized MiniMax M3 (~440B params, ~23B active).
+# 4 nodes × 1 GPU (DGX Spark GB10 Blackwell), TP=4 across nodes.
+# MSA sparse attention requires --block-size 128.
+# Text-only mode skips the vision encoder to save VRAM.
+
+#entrypoint = ["vllm", "serve"]
+
+args = [
+    "--block-size", "128",
+    "--kv-cache-dtype", "fp8",
+    "--gpu-memory-utilization", "0.85",
+    "--load-format", "safetensors",
+    "--enable-prefix-caching",
+    "--tool-call-parser", "minimax_m3",
+    "--reasoning-parser", "minimax_m3",
+    "--enable-auto-tool-choice",
+    "--language-model-only",
+    "--enable-expert-parallel",
+    "--trust-remote-code",
+    "--served-model-name", "minimax-m3", "default",
+]
+
+[env]
+# M3 supports thinking via chat_template_kwargs.thinking_mode
+# enabled / adaptive / disabled — pass per-request in extra_body
+SAFETENSORS_FAST_GPU = "1"
+VLLM_ALLOW_LONG_MAX_MODEL_LEN = "1"
+VLLM_USE_B12X_MOE = "1"

+ 2 - 1
recipes/minimax-m3/recipe.toml

@@ -1,7 +1,8 @@
 engine = "sglang"
 name = "Minimax-M3-v0 NVFP4"
 docker_image = "scitrera/dgx-spark-sglang-mm:v0"
-model = "sparkarena/Minimax-M3-v0-NVFP4"
+#model = "sparkarena/Minimax-M3-v0-NVFP4"
+model = "Mapika/MiniMax-M3-NVFP4"
 required_nodes = 4
 tensor_parallel_size = 4
 distributed_backend = "mp"

+ 3 - 1
src/docker/mod.rs

@@ -246,7 +246,9 @@ async fn start_cluster(
         cluster.nodes.iter().collect()
     };
     let nnodes = nodes.len() as u32;
-    let pp_size = if recipe.pipeline_parallel_size.unwrap_or(0) == 0 {
+    let pp_size = if recipe.pipeline_parallel_size.unwrap_or(0) == 0
+        || recipe.required_nodes == recipe.pipeline_parallel_size
+    {
         nnodes
     } else {
         recipe.pipeline_parallel_size.unwrap()