Преглед изворни кода

fix: select_cluster should use >= not == for required_nodes matching

Also add Qwen-AgentWorld-35B-A3B recipe (solo-capable, TP=1).
The filter now picks clusters that have at least the required node count.
Alexander Korolev пре 4 месеци
родитељ
комит
ea8fb4e287
2 измењених фајлова са 6 додато и 6 уклоњено
  1. 5 5
      recipes/qwen-agentworld-35b/recipe.toml
  2. 1 1
      src/config.rs

+ 5 - 5
recipes/qwen-agentworld-35b/recipe.toml

@@ -2,14 +2,14 @@ engine = "vllm"
 name = "Qwen-AgentWorld-35B-A3B (vLLM)"
 docker_image = "ghcr.io/timothystewart6/vllm-gb10:v0.23.0-gb10.1"
 model = "Qwen/Qwen-AgentWorld-35B-A3B"
-required_nodes = 2
-tensor_parallel_size = 2
+required_nodes = 1
+tensor_parallel_size = 1
 pipeline_parallel_size = 1
 distributed_backend = "mp"
 
-# 35B total / 3B active MoE — world model for agentic environment simulation.
-# 2× DGX Spark (GB10), 128 GB shared each.
-# TP=2 → ~35 GB/node for weights, room for 262K context.
+# Solo: ~70 GB BF16 weights, only 10 GA layers need KV cache (DeltaNet is linear).
+# Use: sm121-launcher serve --recipe qwen-agentworld-35b --node dgx1.lan
+# Nodes: sm121-launcher serve --recipe qwen-agentworld-35b --cluster 2nodes-dac
 # Requires --language-model-only (no vision weights in checkpoint).
 
 entrypoint = ["vllm", "serve"]

+ 1 - 1
src/config.rs

@@ -178,7 +178,7 @@ pub fn select_cluster<'c>(
         .clusters
         .iter()
         .filter_map(|c| Some((c, config.nccl.get(&c.name)?)))
-        .filter(|(c, _)| required_nodes.is_none_or(|r| (c.nodes.len() as u32) == r))
+        .filter(|(c, _)| required_nodes.is_none_or(|r| (c.nodes.len() as u32) >= r))
         .collect();
     candidates.sort_by_key(|(c, _)| c.nodes.len());
     if let Some((cluster, nccl)) = candidates.into_iter().next() {