recipe.toml 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. parent_model = "upstage/Solar-Open2-250B"
  28. required_nodes = 2
  29. tensor_parallel_size = 2
  30. pipeline_parallel_size = 1
  31. distributed_backend = "mp"
  32. shm_size = "32gb"
  33. docker_image_dir = "solar-open2-nvfp4"
  34. entrypoint = ["vllm", "serve"]
  35. args = [
  36. # KV cache & memory
  37. "--kv-cache-dtype", "fp8",
  38. "--load-format", "auto",
  39. # Context length (128K; model supports up to 131584)
  40. "--max-model-len", "131072",
  41. # Batch & memory
  42. "--max-num-seqs", "8",
  43. "--max-num-batched-tokens", "4096",
  44. "--max-cudagraph-capture-size", "16",
  45. "--gpu-memory-utilization", "0.88",
  46. # Scheduling
  47. "--async-scheduling",
  48. "--enable-chunked-prefill",
  49. "--enable-prefix-caching",
  50. # Solar Open2 parsers + logits processor (ships in the UpstageAI fork)
  51. "--reasoning-parser", "solar_open2",
  52. "--tool-call-parser", "solar_open2",
  53. "--enable-auto-tool-choice",
  54. "--logits-processors", "vllm.v1.sample.logits_processor.solar_open2:SolarOpen2TemplateLogitsProcessor",
  55. "--default-chat-template-kwargs", """
  56. '{"think_render_option":"preserved"}'""",
  57. # General
  58. "--trust-remote-code",
  59. "--served-model-name", "solar",
  60. ]
  61. [env]
  62. # ── Architecture (aarch64/sm_121a DGX Spark) ──────────────────────────────
  63. TORCH_CUDA_ARCH_LIST = "12.1a"
  64. CUTE_DSL_ARCH = "sm_121a"
  65. FLASHINFER_CUDA_ARCH_LIST = "12.1a"
  66. # ── Offline mode (weights must be cached on each node) ────────────────────
  67. HF_HOME = "/root/.cache/huggingface"
  68. HF_HUB_OFFLINE = "1"
  69. TRANSFORMERS_OFFLINE = "1"
  70. # ── Timeout safety net (cold boot: cudagraph + JIT) ───────────────────────
  71. VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS = "3600"
  72. # ── NCCL / RoCE (cluster config ib_hca/socket_ifname used for most) ──────
  73. NCCL_CROSS_NIC = "1"
  74. NCCL_CUMEM_ENABLE = "0"
  75. NCCL_IGNORE_CPU_AFFINITY = "1"
  76. NCCL_DEBUG = "WARN"
  77. # ── Compute ────────────────────────────────────────────────────────────────
  78. OMP_NUM_THREADS = "4"