recipe.toml 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. # Solar Open2 250B — Nota NVFP4 (compressed-tensors, W4A4)
  2. # 2× DGX Spark (GB10, aarch64/sm_121a), TP=2 over RoCE.
  3. #
  4. # Model: nota-ai/Solar-Open2-250B-Nota-NVFP4
  5. # → https://huggingface.co/nota-ai/Solar-Open2-250B-Nota-NVFP4
  6. # 145B params (MoE), 153.3 GB NVFP4 weights (vs 500.6 GB BF16).
  7. # NVFP4 is auto-detected from config (compressed-tensors) — no --quantization.
  8. #
  9. # Image: solar-open2-nvfp4:probe (built locally from the UpstageAI vLLM fork
  10. # v0.22.0-solar-open2 — carries the solar_open2 reasoning/tool parsers and
  11. # the SolarOpen2TemplateLogitsProcessor). cu130 / aarch64 / sm_121a, same
  12. # pinned base stack as glm52-nf3-hybrid (no b12x suite — stock vLLM serve).
  13. #
  14. # Memory: GB10 ≈ 121 GB usable (128 GB advertised − 4 GB OS). TP=2 →
  15. # ~77 GB weights/node, ~40 GB/node for KV cache + activations.
  16. #
  17. # PREREQUISITES:
  18. # - Weights cached on every node:
  19. # huggingface-cli download nota-ai/Solar-Open2-250B-Nota-NVFP4
  20. # (153 GB, NVFP4 compressed-tensors shards)
  21. # - Image built (sm121 serve builds it automatically on the build node):
  22. # cd docker-images/solar-open2-nvfp4 && bash build.sh
  23. engine = "vllm"
  24. name = "Solar Open2 250B Nota NVFP4 (vLLM)"
  25. docker_image = "solar-open2-nvfp4:probe"
  26. model = "nota-ai/Solar-Open2-250B-Nota-NVFP4"
  27. required_nodes = 2
  28. tensor_parallel_size = 2
  29. pipeline_parallel_size = 1
  30. distributed_backend = "mp"
  31. shm_size = "32gb"
  32. docker_image_dir = "solar-open2-nvfp4"
  33. entrypoint = ["vllm", "serve"]
  34. args = [
  35. # KV cache & memory
  36. "--kv-cache-dtype", "fp8",
  37. "--load-format", "auto",
  38. # Context length (128K; model supports up to 131584)
  39. "--max-model-len", "131072",
  40. # Batch & memory
  41. "--max-num-seqs", "8",
  42. "--max-num-batched-tokens", "4096",
  43. "--max-cudagraph-capture-size", "16",
  44. "--gpu-memory-utilization", "0.88",
  45. # Scheduling
  46. "--async-scheduling",
  47. "--enable-chunked-prefill",
  48. "--enable-prefix-caching",
  49. # Solar Open2 parsers + logits processor (ships in the UpstageAI fork)
  50. "--reasoning-parser", "solar_open2",
  51. "--tool-call-parser", "solar_open2",
  52. "--enable-auto-tool-choice",
  53. "--logits-processors", "vllm.v1.sample.logits_processor.solar_open2:SolarOpen2TemplateLogitsProcessor",
  54. "--default-chat-template-kwargs", """
  55. '{"think_render_option":"preserved"}'""",
  56. # General
  57. "--trust-remote-code",
  58. "--served-model-name", "solar",
  59. ]
  60. [env]
  61. # ── Architecture (aarch64/sm_121a DGX Spark) ──────────────────────────────
  62. TORCH_CUDA_ARCH_LIST = "12.1a"
  63. CUTE_DSL_ARCH = "sm_121a"
  64. FLASHINFER_CUDA_ARCH_LIST = "12.1a"
  65. # ── Offline mode (weights must be cached on each node) ────────────────────
  66. HF_HOME = "/root/.cache/huggingface"
  67. HF_HUB_OFFLINE = "1"
  68. TRANSFORMERS_OFFLINE = "1"
  69. # ── Timeout safety net (cold boot: cudagraph + JIT) ───────────────────────
  70. VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS = "3600"
  71. # ── NCCL / RoCE (cluster config ib_hca/socket_ifname used for most) ──────
  72. NCCL_CROSS_NIC = "1"
  73. NCCL_CUMEM_ENABLE = "0"
  74. NCCL_IGNORE_CPU_AFFINITY = "1"
  75. NCCL_DEBUG = "WARN"
  76. # ── Compute ────────────────────────────────────────────────────────────────
  77. OMP_NUM_THREADS = "4"