recipe.toml 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. # DeepSeek-V4.1-Flash EXL3 3bpw — coolbho3k "2x DGX Spark" production recipe,
  2. # adapted to sm121 (rc2 image, pinned at release commit 878e0ee).
  3. #
  4. # 2x Spark over 200G RoCE (8nodes-switch, first two free ranks):
  5. # TP2/DCP2, DSpark K=3 drafter, EXL3 3bpw experts, FP4 main KV + FP8 SWA,
  6. # 1M context, GMU 0.92, max-num-seqs 2 (C2; the runtime's cooperative
  7. # profile validates 1..6), prefill batch 3072.
  8. #
  9. # 2 GB headless-RAM unlock: the runtime's display-pool KV (1.75 GiB of the
  10. # firmware's 2 GB display reserve per GPU) needs nvidia_drm remoded with
  11. # modeset=1 fbdev=0. That is TEMPORARY by design (technology still in
  12. # approval): before_serve remods per boot, after_stop restores the plain
  13. # module. No UEFI change, no /etc/modprobe.d entry, resets on reboot.
  14. #
  15. # Model + drafter overlay live on the shared NAS (hub layout); the launch
  16. # nodes symlink the current refs/main snapshot and bind it at /model (the
  17. # runtime hard-requires the model at exactly /model) and the drafter overlay
  18. # at /draft-exl3.
  19. #
  20. # Cgroup: the runtime's serving guard hard-requires a 9 GiB / no-swap /
  21. # <=6-CPU cgroup (memory.max==9g, swap 0, cpu quota <=6) — memory_limit +
  22. # cpus below.
  23. engine = "vllm"
  24. docker_image = "ghcr.io/coolbho3k/deepseek-v4.1-flash-exl3-3bpw-2x-dgx-spark:20260917-rc2"
  25. model = ""
  26. name = "DeepSeek-V4.1-Flash EXL3 3bpw (2x Spark, TP2/DCP2, DSpark K=3, 1M)"
  27. port = 8888
  28. required_nodes = 2
  29. cluster = "8nodes-switch"
  30. tensor_parallel_size = 2
  31. distributed_backend = "mp"
  32. shm_size = "2g"
  33. devices = ["/dev/dri/card0"]
  34. memory_limit = "9g"
  35. cpus = 6
  36. # /model + /draft-exl3 are the exact mounts the runtime validates.
  37. entrypoint = [
  38. "/opt/ds41-venv/bin/python",
  39. "/opt/ds41-serving/serve.py",
  40. "serve",
  41. "/model",
  42. "--config",
  43. "/opt/ds41-serving/conservative.yaml",
  44. "--worker-cls",
  45. "combined_worker.CombinedWorker",
  46. "--disable-custom-all-reduce",
  47. ]
  48. args = [
  49. "--served-model-name",
  50. "deepseek-v41-flash-exl3",
  51. "--enable-auto-tool-choice",
  52. "--tool-call-parser",
  53. "deepseek_v41",
  54. "--reasoning-parser",
  55. "deepseek_v41",
  56. ]
  57. before_serve = [
  58. { script = "unlock_display_ram" },
  59. # Stable per-node symlinks to the current refs/main snapshots (recreated
  60. # every serve; docker resolves the symlink at bind time).
  61. "ln -sfn /mnt/nas/ai/huggingface/hub/models--coolbho3k--DeepSeek-V4.1-Flash-EXL3-3bpw/snapshots/$(cat /mnt/nas/ai/huggingface/hub/models--coolbho3k--DeepSeek-V4.1-Flash-EXL3-3bpw/refs/main) /home/kilork/exl3-model",
  62. "ln -sfn /mnt/nas/ai/huggingface/hub/models--coolbho3k--DeepSeek-V4.1-Flash-DSpark-EXL3-3bpw/snapshots/$(cat /mnt/nas/ai/huggingface/hub/models--coolbho3k--DeepSeek-V4.1-Flash-DSpark-EXL3-3bpw/refs/main) /home/kilork/exl3-draft",
  63. ]
  64. after_stop = [{ script = "restore_display_ram", on_failure = "warn" }]
  65. [[extra_mounts]]
  66. host = "/home/kilork/exl3-model"
  67. container = "/model"
  68. read_only = true
  69. [[extra_mounts]]
  70. host = "/home/kilork/exl3-draft"
  71. container = "/draft-exl3"
  72. read_only = true
  73. [env]
  74. # DS41 runtime profile (validated against DS41_* envs; kv_cap_mib is
  75. # env-only, not a CLI flag).
  76. DS41_GPU_MEMORY_UTILIZATION = "0.92"
  77. DS41_MAX_MODEL_LEN = "1048576"
  78. DS41_MAX_NUM_SEQS = "2"
  79. DS41_MAX_NUM_BATCHED_TOKENS = "3072"
  80. DS41_LONG_PREFILL_TOKEN_THRESHOLD = "2816"
  81. DS41_KV_CAP_MIB = "1536"
  82. # Feature gates (serve.py hard-requires the '1' set; defaults are 1, set
  83. # explicitly so the guard passes).
  84. DS41_ENABLE_COOPERATIVE_MOE = "1"
  85. DS41_ENABLE_DCP2 = "1"
  86. DS41_ENABLE_DSPARK = "1"
  87. DS41_ENABLE_SSD_VOCAB = "1"
  88. DS41_SSD_ENGRAM_SOURCE = "/model/engrams"
  89. DS41_ENGRAM_CACHE_MIB = "64"
  90. DS41_DRAFT_EXL3_PATH = "/draft-exl3"
  91. # Engine / offline / threading.
  92. VLLM_PLUGINS = "ds41"
  93. VLLM_USE_V2_MODEL_RUNNER = "1"
  94. VLLM_USE_BREAKABLE_CUDAGRAPH = "0"
  95. VLLM_ENGINE_READY_TIMEOUT_S = "3600"
  96. VLLM_WORKER_MULTIPROC_METHOD = "spawn"
  97. VLLM_NO_USAGE_STATS = "1"
  98. HF_HUB_OFFLINE = "1"
  99. TRANSFORMERS_OFFLINE = "1"
  100. DSV41_IO_THREADS = "96"
  101. TORCH_CUDA_ARCH_LIST = "12.1a"
  102. FLASHINFER_CUDA_ARCH_LIST = "12.1a"
  103. MAX_JOBS = "1"
  104. MKL_NUM_THREADS = "4"
  105. OPENBLAS_NUM_THREADS = "4"
  106. TORCH_NCCL_ASYNC_ERROR_HANDLING = "1"
  107. MALLOC_ARENA_MAX = "2"
  108. MALLOC_TRIM_THRESHOLD_ = "131072"
  109. VLLM_SPARSE_INDEXER_MAX_LOGITS_MB = "128"
  110. # NCCL pins (on top of the launcher's cluster NCCL env).
  111. NCCL_NVLS_ENABLE = "0"
  112. NCCL_CROSS_NIC = "0"
  113. NCCL_IB_MERGE_NICS = "0"
  114. NCCL_CUMEM_ENABLE = "0"
  115. NCCL_MAX_CTAS = "8"
  116. NCCL_BUFFSIZE = "1048576"
  117. NCCL_LL128_BUFFSIZE = "262144"
  118. NCCL_PROTO = "^LL128"
  119. NCCL_MAX_NCHANNELS = "8"
  120. NCCL_IB_ROCE_VERSION_NUM = "2"